如何在web.xml中配置欢迎文件列表

时间:2013-02-01 14:11:58

标签: jsp servlets web.xml welcome-file

我的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 ...如何正确执行此操作?

6 个答案:

答案 0 :(得分:55)

您需要将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”(因此一个欢迎文件 - 它有一个完全不同的目的;即当一个正在请求文件夹,因此不是特定的根文件夹),那么您应该在空字符串URL模式上映射servlet。

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

另见Difference between / and /* in servlet mapping url pattern

答案 1 :(得分:22)

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

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

这样就可以使用索引servlet了。注意,你需要一个servlet spec 2.4容器才能做到这一点。

另请注意,@ BalusC获得了我的投票,因为您自己的索引servlet是多余的。

答案 2 :(得分:1)

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

@WebServlet("")

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

答案 3 :(得分:1)

这是将Servlet设置为欢迎页面的方式。

我分享关注的人。

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>

Servlet类

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

答案 4 :(得分:0)

我只是在web.xml文件中声明如下,并且对我有用:

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

除了静态资源(css,js,图像)外,公共目录中没有html / jsp页面。 现在,我可以使用如下网址访问索引页面: http://localhost:8080/app/ 其调用/WEB-INF/jsps/index.jsp页面。当在生产环境中进行托管时,最终URL类似于https://eisdigital.com/

答案 5 :(得分:-2)

它基于您尝试访问这些文件的文件。

如果它位于工作项目文件所在的文件夹中,则只能使用文件名。不需要路径。

如果它位于工作项目文件的同一父文件夹下的另一个文件夹中,则可以使用以下/javascript/sample.js中的位置

在您的示例中,如果您尝试从html文件访问js文件,则可以使用以下位置

../的JavaScript / sample.js

前缀../将转到文件的父文件夹(文件夹向上旅程)