3

私はEclipse JunoにWebアプリケーションを持っています.Run on serverを押すと、 Eclipseのブラウザ(私はWindowsを使用しています)またはFFのいずれかで正常に実行されます。

右クリック>エクスポート戦争>これを$CATALINA_HOME/webappsにダンプ>すべて正常に動作しています(解凍されました)例外

  • カスタム タグ -WEB-INF\functions.tld明らかに読み取られていないファイルがありました。server.xml自動生成された eclipse (Serversプロジェクト内) とデフォルトの Tomcatの唯一の違いserver.xmlは次の行です。

    <Context docBase="ted2012" path="/ted2012" 
    reloadable="true"source="org.eclipse.jst.jee.server:ted2012"/>
    

sourceWTP 固有の属性です。
これはなんとか解決できました-私の答えを見てください

  • Tomcat は URL を正しく取得しません。私の回答の写真を参照してください。

質問:

  1. (未解決) Tomcat が URL を正しくデコードしないのはなぜですか? 失敗はどこですか?コールスタックの広範な詳細と正確に tomcat が失敗する場所については、これに関する私の特定の質問を参照してください
  2. そもそもTomcatがtldを見なかったのに、Eclipseが見たのはなぜですか? を編集する必要があったのはなぜweb.xmlですか? (私の答えで回避しました。別の質問にする必要があります)

コードはgithubにあります - ファイル INSTRUCTIONS.txt には、プロジェクトをセットアップし、以下の私の回答に示されているバグを再現するための詳細な手順があります。

Tomcat 7.0.32、Eclipse 4.2、Java 1.7.9

4

2 に答える 2

1

役に立ったことの1つは、に追加することでしたweb-xml

<jsp-config>
    <taglib>
        <taglib-uri>
            functions
        </taglib-uri>
        <taglib-location>
            functions.tld
        </taglib-location>
    </taglib>
</jsp-config>

現在、Tomcat (7.0.30) は、URI のエンコードに使用されている私の taglib を認識しています。


奇妙なことに、システム出力でユーザー名を出力すると、???? が表示されます。象形文字の代わりにTomcatのコンソールで。多分これは問題を指していますか?私のコントローラーには次のものがあります:

final String username = Helpers.decodeRequest(request
                .getParameter("user"));
System.out.println("ProfileController.doGet() user name DECODED : "
                                + username);

どこ :

private static final String CHARSET_FOR_URL_ENCODING = "UTF-8";

public static String decodeRequest(String parameter)
        throws UnsupportedEncodingException {
    System.out.println(Charset.defaultCharset()); // EDIT: suggested by @Esailija
    if (parameter == null)
        return null;
    System.out.println("decode - request.getBytes(\"iso-8859-1\"):"
            + new String(parameter.getBytes("iso-8859-1")));
    System.out.println("decode - request.getBytes(\"iso-8859-1\") BYTES:"
            + parameter.getBytes("iso-8859-1"));
    for (byte iterable_element : parameter.getBytes("iso-8859-1")) {
        System.out.println(iterable_element);
    }
    System.out.println("decode - request.getBytes(\"UTF-8\"):"
            + new String(parameter.getBytes(CHARSET_FOR_URL_ENCODING))); // UTF-8
    return URLDecoder.decode(new String(parameter.getBytes("iso-8859-1")),
            CHARSET_FOR_URL_ENCODING);
}

だからトムキャット:

windows-1252 // EDIT: suggested by @Esailija
decode - request.getBytes("iso-8859-1"):╬╡╬╗╬╗╬╖╬╜╬▒╧?╬▒
decode - request.getBytes("iso-8859-1") BYTES:[B@d171825
-50
-75
-50
-69
-50
-69
-50
-73
-50
-67
-50
-79
-49
-127
-50
-79
decode - request.getBytes("UTF-8"):├Ä┬╡├Ä┬╗├Ä┬╗├Ä┬╖├Ä┬╜├Ä┬▒├?┬?├Ä┬▒
ProfileController.doGet() user name DECODED : ╬╡╬╗╬╗╬╖╬╜╬▒╧?╬▒
???????? // user Dao System.out.println("ελληναρα");
com.mysql.jdbc.JDBC4PreparedStatement@67322bd9: SELECT * FROM users WHERE username='╬╡╬╗╬╗╬╖╬╜╬▒╧?╬▒'
ProfileController.doGet() user : null

日食 :

UTF-8 // EDIT: suggested by @Esailija
decode - request.getBytes("iso-8859-1"):ελληναρα
decode - request.getBytes("iso-8859-1") BYTES:[B@44c353ae
-50
-75
-50
-69
-50
-69
-50
-73
-50
-67
-50
-79
-49
-127
-50
-79
decode - request.getBytes("UTF-8"):ελληναÏα
ProfileController.doGet() user name DECODED : ελληναρα
ελληναρα // user Dao System.out.println("ελληναρα");
com.mysql.jdbc.JDBC4PreparedStatement@73aae7c6: SELECT * FROM users WHERE username='ελληναρα'
ProfileController.doGet() user : com.ted.domain.User@4b22015d

編集: 設定 > ワークスペース > テキスト ファイルのエンコーディングで Eclipse エンコーディングを変更し、デフォルト (Cp1252) を設定した場合

windows-1252
decode - request.getBytes("iso-8859-1"):λαλακης
decode - request.getBytes("iso-8859-1") BYTES:[B@5ef1946a
-50
// same bytes ....
decode - request.getBytes("UTF-8"):λαλακη�‚
ProfileController.doGet() user name DECODED : λαλακης
ελληναÏ?α
com.mysql.jdbc.JDBC4PreparedStatement@4646ebd8: SELECT * FROM users WHERE username='λαλακης'
ProfileController.doGet() user : null

Eclipseも失敗します


NB : Tomcat はアドレス バーに正しい URL を出力します。

ここに画像の説明を入力

日食は大丈夫です:

ここに画像の説明を入力

Firefox が URL を自動的にデコードすることに注意してください (戸惑いました)。

于 2012-10-18T13:49:23.920 に答える