我想设置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/login
和http://localhost:8080/PROJECT/show_dbs
,然后我来到Controller.java。但是当我打开http://localhost:8080/PROJECT/
时,我收到404错误。
我正在使用带有“动态Web项目”的Eclipse,Controller.java文件位于/ src(默认包)下,web.xml文件位于/ WebContent / WEB-INF下。
我希望你能给我一个小费。
答案 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”。我认为它会奏效。