web-dev-qa-db-ja.com

web.xmlでウェルカムファイルリストを構成する方法

これは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を入力する必要があります...これを正しく行う方法は?

37
PeterJohn

JSPファイルを/index.jspではなく/WEB-INF/jsp/index.jspに配置する必要があります。このようにして、サーブレット全体がスーパーフロースになります。

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

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

実際に「ホームページサーブレット」(およびnot)を持つことを意図している場合-まったく異なる目的を持つウェルカムファイル(デフォルトファイル) folderが要求されている場合(つまり、具体的にはルートフォルダーではない場合)に提供する必要があります。その後、空の文字列URLパターンにサーブレットをマッピングする必要があります。

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

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

56
BalusC

インデックスサーブレットがウェルカムページとして機能することを望んでいるので、次のように変更します。

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

そのため、インデックスサーブレットが使用されます。これを行うには、サーブレット仕様2.4のコンテナが必要です。

また、@ BalusCが投票を取得します。これは、インデックスサーブレット自体が不要であるためです。

23
beny23

これは、サーブレットをウェルカムページとして設定する私の方法です。

私は誰の懸念を共有します。

web.xml

  <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>Demo</servlet-name>
        <servlet-class>servlet.Demo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Demo</servlet-name>
        <url-pattern></url-pattern>
    </servlet-mapping>

サーブレットクラス

@WebServlet(name = "/demo")
public class Demo extends HttpServlet {
   public void doGet(HttpServletRequest req, HttpServletResponse res)
     throws ServletException, IOException  {
       RequestDispatcher rd = req.getRequestDispatcher("index.jsp");
   }
}
1
Hien Nguyen

空の文字列URLパターン ""を使用することで、defulatサーブレットの処理の問題の読者を助けるかもしれない、この stackoverflow link でニースのソリューションを見ました。

@WebServlet("")

または

<servlet-mapping>
    <servlet-name>yourHomeServlet</servlet-name>
    <url-pattern></url-pattern> <!-- Yes, empty string! -->
</servlet-mapping>
1
mohamed sulibi