7

JSP/JavaBeans プロジェクトのウェルカム ファイルを設定したいと考えています。次の @WebServlet 注釈が付いた「Controller.java」という名前のサーブレットがあります。

@WebServlet(name="Controller", urlPatterns={"/login", "/show_dbs"})

そして、次の内容の web.xml ファイルがあります。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

    <welcome-file-list>
        <welcome-file>Controller</welcome-file>
    </welcome-file-list>
</web-app>

ほとんどすべてが順調に進んでおり、Controller.java を開くことができhttp://localhost:8080/PROJECT/loginますhttp://localhost:8080/PROJECT/show_dbs。しかし、開くhttp://localhost:8080/PROJECT/と404エラーが発生します。

「動的 Web プロジェクト」で Eclipse を使用しています。Controller.java ファイルは /src (デフォルト パッケージ) の下にあり、web.xml ファイルは /WebContent/WEB-INF の下にあります。

ヒントをいただければ幸いです。

4

5 に答える 5

9

ご協力ありがとうございました。これが私の解決策です:

サーブレットをウェルカム ファイルとして設定する場合は、次の手順を実行する必要があります。

web.xml で、index.html などの標準的な html をウェルカム ファイルとして定義します。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

このファイル (index.html)が存在しないことを確認してください。

次のように @WebServlet で urlPatterns を定義します。

@WebServlet(name="Controller", urlPatterns={"/index.html", "/login", "/show_dbs"})

http://.../PROJECT/(root)へのすべてのリクエストがリダイレクトされhttp://.../PROJECT/index.html、サーブレットが呼び出されます。

于 2013-03-21T14:29:39.790 に答える
8

ウェルカム ファイル リストでは、URI を指定する必要があります。しかし、サーブレットの名前を指定しました。

Java™ サーブレット仕様バージョン 3.0からの引用(強調は私のもの):

10.10 ようこそファイル

Web アプリケーション開発者は、 ウェルカム ファイルと呼ばれる部分 URI の順序付けられたリストをWeb アプリケーション デプロイメント記述子で定義できます。リストのデプロイメント記述子の構文は、Web アプリケーションのデプロイメント記述子スキーマで説明されています。

このメカニズムの目的は、Web コンポーネントにマップされていない WAR 内のディレクトリ エントリに対応する URI の要求がある場合に、コンテナが URI への追加に使用する部分 URI の順序付きリストをデプロイヤが指定できるようにすることです。 . この種のリクエストは、有効な部分リクエストと呼ばれます。

この機能の使用法は、次の一般的な例によって明確になります。 のような URL へのリクエストが返されるように、のウェルカム ファイルを'index.html'定義できます 。としてクライアントに。host:port/webapp/directory/'directory''host:port/webapp/directory/index.html'

Web コンテナが有効な部分リクエストを受信した場合、Web コンテナはデプロイメント記述子で定義されたウェルカム ファイル リストを調べる必要があります。ウェルカム ファイル リストは、末尾または先頭に / がない、部分 URL の順序付けられたリストです。Web サーバーは、デプロイメント記述子で指定された順序で各ウェルカム ファイルを部分的な要求に追加し、WAR 内の静的リソースがその要求 URI にマップされているかどうかを確認する必要があります。一致するものが見つからない場合、Web サーバーは、展開記述子で指定された順序で各ウェルカム ファイルを部分的な要求に再度追加し、サーブレットがその要求 URI にマップされているかどうかを確認する必要があります。Web コンテナーは、一致する WAR 内の最初のリソースに要求を送信する必要があります。コンテナーは、転送、リダイレクト、または直接の要求と区別できないコンテナー固有のメカニズムを使用して、ウェルカム リソースに要求を送信できます。

説明されている方法で一致するウェルカム ファイルが見つからない場合、コンテナーは、適切であると判断した方法で要求を処理できます。構成によっては、これはディレクトリ リストを返すことを意味する場合もあれば、404 応答を返すことを意味する場合もあります。


PS

10.10 章の仕様の例も参照してください。

于 2013-03-20T20:18:45.183 に答える
2

これが web.xml の本来の姿です。index.jsp を作成します。index.jsp をウェルカム ファイルとして使用します。コントローラ クラスは、サーブレットです。したがって、次のように web.xml でサーブレットを定義します。これにより、すべてのリクエストが Controller クラスに送られるようになります。そして、まだ localhost:8080/PROJECT/ にアクセスできるはずです。この場合、ウェルカム ファイルにリダイレクトされます。

index.jsp を作成したくない場合は、既存の jsp ファイル (login.jsp ファイルなど) をウェルカム ファイルとして使用できます。その場合は、index.jsp を login.jsp に置き換えるだけです。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>   
        <servlet-name>Controller</servlet-name>
        <servlet-class>com.company.Controller</servlet-class>   
    </servlet>
    <servlet-mapping>
        <servlet-name>Controller</servlet-name>
        <url-pattern>*</url-pattern>
    </servlet-mapping>  
</web-app>
于 2013-03-19T19:56:57.910 に答える
1

デフォルトのウェルカム ファイルはindex.htmlであるため、URL パターンを追加するだけです。

@WebServlet(name="Controller", urlPatterns={"/index.html","/login", "/show_dbs"})
于 2016-04-12T22:24:14.073 に答える