@WebServlet annotation web.xml welcome-file
我想设置JSP / JavaBeans项目的welcome-file。 我有一个名为’Controller.java’的servlet,带有以下@WebServlet注释:
@WebServlet(name="Controller", urlPatterns={"/login", "/show_dbs"})
我有一个web.xml文件,其中包含以下内容:
Controller
几乎所有事情都进展顺利,我可以打开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下。
我希望你有一个小费给我。
在欢迎文件列表中,您必须指定URI 。 但是您已指定了servlet的名称 。
引用Java™Servlet规范3.0版 (强调我的):
10.10欢迎文件
Web应用程序开发人员可以在Web应用程序部署描述符中定义名为welcome文件的部分URI的有序列表 。 Web应用程序部署描述符架构中描述了列表的部署描述符语法。
此机制的目的是允许部署者在请求与WAR中未映射到Web组件的WAR中的目录条目的URI时,为容器指定用于附加到URI的部分URI的有序列表。 。 这种请求称为有效的部分请求。
通过以下常见示例清楚地说明了此工具的用法:可以定义
'index.html'
欢迎文件,以便对诸如host:port/webapp/directory/
类的URL的请求,其中'directory'
是一个条目在未映射到servlet或JSP页面的WAR中,将作为'host:port/webapp/directory/index.html'
返回给客户端。如果Web容器收到有效的部分请求,则Web容器必须检查部署描述符中定义的欢迎文件列表。 欢迎文件列表是部分URL的有序列表,没有尾随或前导/。 Web服务器必须按部署描述符中指定的顺序将每个欢迎文件附加到部分请求,并检查WAR中的静态资源是否映射到该请求URI。 如果未找到匹配项, Web服务器必须再次按部署描述符中指定的顺序将每个欢迎文件附加到部分请求,并检查servlet是否映射到该请求URI。 Web容器必须将请求发送到匹配的WAR中的第一个资源。 容器可以将请求发送到具有前向,重定向或容器特定机制的欢迎资源,该机制与直接请求无法区分。
如果没有以所述方式找到匹配的欢迎文件,则容器可以以其认为合适的方式处理该请求。 对于某些配置,这可能意味着返回目录列表或返回404响应的其他人。
PS
另请参阅第10.10章中的规范中的示例
感谢您的帮助。 这是我的解决方案:
如果要将servlet设置为欢迎文件,则必须执行以下操作:
在web.xml中将标准html定义为welcome-文件,例如index.html:
index.html
确保此文件(index.html) 不存在 。
在@WebServlet中定义你的urlPatterns,如下所示:
@WebServlet(name="Controller", urlPatterns={"/index.html", "/login", "/show_dbs"})
现在,对http://.../PROJECT/
(root)的每个请求都将被重定向到http://.../PROJECT/index.html
,这将调用servlet。
这就是你的web.xml应该是什么。 创建一个index.jsp。 使用index.jsp作为欢迎文件。 控制器类是你的sevlet。 因此,在web.xml中定义一个servlet,如下所示。 这应该导致所有请求都被定向到Controller类。 您仍然可以访问localhost:8080 / PROJECT /,在这种情况下,它将被定向到您的欢迎文件。
如果您不想创建index.jsp,则可以使用现有的jsp文件,也可以将您的login.jsp文件作为欢迎文件。 在这种情况下,只需用login.jsp替换index.jsp
index.jsp Controller com.company.Controller Controller *
默认的欢迎文件是index.html
,因此只需添加URL模式即可。
@WebServlet(name="Controller", urlPatterns={"/index.html","/login", "/show_dbs"})
您可以在@WebServlet注释中的urlPatterns中指定URL“/ Controller”。 我认为它会起作用。