39

これは web.xml ドキュメントにあります。ウェルカム リストを作成しようとしているので、ホームページのパスを入力する必要がなくなりました。しかし、Tomcat ページでアプリケーションをクリックするたびに、要求されたリソースが利用できませんと表示されます。

<listener>
    <listener-class>web.Init</listener-class>
</listener>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<servlet>
    <servlet-name>index</servlet-name>
    <servlet-class>web.IndexServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>index</servlet-name>
    <url-pattern>/index</url-pattern>
</servlet-mapping>

JSPページの私のサーブレット

package web;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

public class IndexServlet extends HttpServlet
{
    private Logger logger = Logger.getLogger(this.getClass());
    private RequestDispatcher jsp;

    public void init(ServletConfig config) throws ServletException
    {
        ServletContext context = config.getServletContext();
        jsp = context.getRequestDispatcher("/WEB-INF/jsp/index.jsp");
    }

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        logger.debug("doGet()");
        jsp.forward(req, resp); 
    }
}

それでも機能しないのはなぜですか?URL に /index を入力する必要があります...どうすれば正しく実行できますか?

4

6 に答える 6

61

/index.jspの代わりにJSP ファイルを配置する必要があります/WEB-INF/jsp/index.jsp。ちなみに、この方法では、サーブレット全体が不要になります。

WebContent
 |-- META-INF
 |-- WEB-INF
 |    `-- web.xml
 `-- index.jsp

この奇妙な方法でサーブレットを呼び出す必要があることに絶対に確信がある場合は、 の/index.jsp代わりにの URL パターンにマップする必要があります/indexrequestfromではなく fromからリクエスト ディスパッチャーを取得し、メソッドconfig全体を削除するように変更するだけです。init()

実際に「ホームページ サーブレット」を使用するつもりである場合 (つまり、ウェルカム ファイルではありません。目的はまったく異なります。つまり、フォルダが要求されたときに提供されるデフォルト ファイルであり、具体的にはルートではありません)。フォルダー)、空の文字列の URL パターンにサーブレットをマッピングする必要があります。

<servlet-mapping>
    <servlet-name>index</servlet-name>
    <url-pattern></url-pattern>
</servlet-mapping>

サーブレット マッピング URL パターンの / と /* の違いも参照してください。

于 2013-02-01T14:15:20.923 に答える
24

あなたが望むのは、あなたのインデックスサーブレットがウェルカムページとして機能することだと思うので、次のように変更します。

<welcome-file-list>
   <welcome-file>index</welcome-file>
</welcome-file-list>

インデックス サーブレットが使用されるようにします。これを行うには、サーブレット仕様 2.4 コンテナーが必要になることに注意してください。

また、@BalusC が私の票を獲得することにも注意してください。インデックス サーブレット自体は不要なためです。

于 2013-02-01T14:22:02.433 に答える
4

このスタックオーバーフローリンクで、空文字列の URL パターン "" を使用することで、defulat サーブレット処理の問題の読者に役立つ良い解決策を見ました。

@WebServlet("")

また

<servlet-mapping>
    <servlet-name>yourHomeServlet</servlet-name>
    <url-pattern></url-pattern> <!-- Yes, empty string! -->
</servlet-mapping>
于 2016-10-11T08:46:38.493 に答える
0

私は単に web.xml ファイルで以下のように宣言し、それは私のために働いています:

 <welcome-file-list>
    <welcome-file>/WEB-INF/jsps/index.jsp</welcome-file>
</welcome-file-list>

また、パブリック ディレクトリには、静的リソース (css、js、画像) 以外の html/jsp ページは存在しません。これで、次のような URL でインデックス ページにアクセスできます。 http://localhost:8080/app/ /WEB-INF/jsps/index.jsp ページを呼び出します。本番環境でホストされる場合、最終的な URL はhttps://eisdigital.com/のようになります

于 2019-10-01T19:01:34.603 に答える