7

我想设置我的 JSP/JavaBeans 项目的欢迎文件。我有一个名为“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 下。

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

4

5 回答 5

9

感谢您的帮助。我的解决方案来了:

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

在 web.xml 中将标准 html 定义为欢迎文件,例如 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"})

现在对 (root) 的每个请求都http://.../PROJECT/将被重定向到http://.../PROJECT/index.html,这将调用 servlet。

于 2013-03-21T14:29:39.790 回答
8

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

引用Java™ Servlet Specification 3.0 版(强调我的):

10.10 欢迎文件

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

此机制的目的是允许部署者指定部分 URI 的有序列表,以便容器在请求对应于未映射到 Web 组件的 WAR 中的目录条目的 URI 时使用附加到 URI . 这种请求称为有效的部分请求。

通过以下常见示例可以清楚地说明此工具的用途:'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 响应。


附言

另请参阅第 10.10 章规范中的示例

于 2013-03-20T20:18:45.183 回答
2

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

如果你不想创建 index.jsp,你可以使用你现有的 jsp 文件,可能是你的 login.jsp 文件作为你的欢迎文件。在这种情况下,只需将 index.jsp 替换为 login.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>
于 2013-03-19T19:56:57.910 回答
1

默认欢迎文件是index.html,因此只需添加 URL 模式。

@WebServlet(name="Controller", urlPatterns={"/index.html","/login", "/show_dbs"})
于 2016-04-12T22:24:14.073 回答
0

您可以在@WebServlet 注释中的 urlPatterns 中指定 url“/Controller”。我认为它会起作用。

于 2015-03-18T13:40:41.430 回答