提问者:小点点

如何在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页面servlet

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); 
    }
}

为什么它仍然不起作用?我仍然需要在我的网址中输入 /index…如何正确做到这一点?


共3个答案

匿名用户

您需要将JSP文件放在/index. jsp中,而不是放在/WEB-INF/jsp/index.jsp中。顺便说一句,这样整个servlet就变得多余了。

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

如果您绝对肯定需要以这种奇怪的方式调用servlet,那么您应该将其映射到/index. jsp而不是/index的URL模式上。您只需要更改它以从request而不是从config获取请求调度程序,并摆脱整个init()方法。

如果你真的打算有一个主页servlet(因此不是一个欢迎文件——它有一个完全不同的目的;即当请求文件夹时应该提供的默认文件,因此不是特定的根文件夹),那么你应该将servlet映射到空字符串URL模式上。

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

另请参阅servlet映射url模式中/和/*之间的区别。

匿名用户

我猜你想要的是你的索引servlet作为欢迎页面,所以改为:

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

以便使用索引servlet。请注意,您需要一个servlet spec 2.4容器才能做到这一点。

另请注意,@BalusC得到了我的投票,因为您的索引servlet本身是多余的。

匿名用户

我在这个stackoverflow链接中看到了一个很好的解决方案,它可以通过使用空字符串URL模式""来帮助defulat servlet处理问题的读者:

@WebServlet("")

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