@WebServlet annotation web.xml welcome-file

时间:2013-03-19 18:47:36

标签: java jsp servlets web.xml deployment-descriptor

我想设置JSP / JavaBeans项目的welcome-file。我有一个名为'Controller.java'的servlet,带有以下@WebServlet注释:

@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>

几乎所有事情都进展顺利,我可以打开http://localhost:8080/PROJECT/loginhttp://localhost:8080/PROJECT/show_dbs,然后我来到Controller.java。但是当我打开http://localhost:8080/PROJECT/时,我收到404错误。

我正在使用带有“动态Web项目”的Eclipse,Controller.java文件位于/ src(默认包)下,web.xml文件位于/ WebContent / WEB-INF下。

我希望你能给我一个小费。

5 个答案:

答案 0 :(得分:8)

在欢迎文件列表中,您必须指定URI 。但是您已指定了servlet的名称

引自Java™ Servlet Specification version 3.0(强调我的):

  

10.10欢迎文件

     

Web应用程序开发人员可以定义   Web中的部分URI的有序列表称为欢迎文件   应用部署描述符。部署描述符语法   列表在Web应用程序部署描述符中描述   架构。

     

此机制的目的是允许部署者   指定要用于的容器的部分URI的有序列表   当存在对应URI的请求时附加到URI   到WAR中的目录条目未映射到Web组件。这个   请求类型称为有效的部分请求。

     

通过以下常见示例清楚地了解此功能:欢迎文件   可以定义'index.html'以便对URL的请求   host:port/webapp/directory/,其中'directory'是WAR中的条目   未映射到servlet或JSP页面的,返回给客户端   为'host:port/webapp/directory/index.html'

     

如果Web容器收到有效的部分请求,则Web容器必须检查   部署描述符中定义的欢迎文件列表。欢迎   文件列表是部分URL的有序列表,没有尾随或   领先/. Web服务器必须在订单中附加每个欢迎文件   在部署描述符中指定的部分请求和   检查WAR中的静态资源是否映射到该请求   URI。如果找不到匹配项, Web服务器必须再次附加   欢迎文件按部署描述符中指定的顺序来   部分请求并检查servlet是否映射到该请求   URI。 Web容器必须将请求发送到第一个资源   匹配的WAR。容器可以将请求发送给   具有转发,重定向或特定容器的欢迎资源   与直接请求无法区分的机制。

     

如果找不到所述方式的匹配欢迎文件,则为容器   可以以其认为合适的方式处理请求。对于某些配置,这可能   意味着返回目录列表或返回404响应的其他人。


P.S。

另见第10.10章

中规范中的示例

答案 1 :(得分:8)

感谢您的帮助。这是我的解决方案:

如果要将servlet设置为欢迎文件,则必须执行以下操作:

将标准html定义为欢迎文件,例如web.xml中的index.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,这将调用servlet。

答案 2 :(得分:2)

这就是你的web.xml应该是什么。创建一个index.jsp。使用index.jsp作为欢迎文件。控制器类是你的sevlet。因此,在web.xml中定义一个servlet,如下所示。这应该导致所有请求都被定向到Controller类。您仍然可以访问localhost:8080 / PROJECT /,在这种情况下,它将被定向到您的欢迎文件。

如果您不想创建index.jsp,可以使用现有的jsp文件,也可以将您的login.jsp文件作为欢迎文件。在这种情况下,只需用login.jsp

替换index.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>

答案 3 :(得分:1)

默认欢迎文件为index.html,因此只需添加网址格式。

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

答案 4 :(得分:0)

您可以在@WebServlet批注中的urlPatterns中指定URL“/ Controller”。我认为它会奏效。