登录页面提交表单报404错误,JSP调用Servlet跳转WEB-INF页面路径排查
登录提交404问题解决方案
问题原因
- 表单提交路径配置错误
login.jsp中form的action属性写为/Login属于服务器根路径的绝对路径,Java Web项目部署时会带有上下文路径(例如项目部署后根路径为http://localhost:8080/项目名/),直接写/Login会将请求发送到http://localhost:8080/Login,而非正确的项目内路径,因此触发404错误。 - Servlet配置重复
同时使用了@WebServlet(urlPatterns = {"/Login"})注解和web.xml中的Servlet注册配置,两类配置作用重复,容易引发路由冲突。 - web.xml中Servlet类路径配置不全
web.xml的<servlet-class>标签仅填写了Login,如果Login类定义在自定义包下,未填写全类名会导致服务器无法找到对应的Servlet类。
修复步骤
- 修改表单提交路径
将login.jsp中的form标签调整为如下内容,去掉action前的斜杠使用相对路径即可:
<form method="post" action="Login"> <input type="text" id="username" name="username" placeholder="Usuário"> <input type="password" id="password" name="password" placeholder="Senha"> <input type="submit" value="Entrar"> </form>
如果需要适配不同部署环境的上下文路径,也可以替换为EL表达式写法:action="${pageContext.request.contextPath}/Login"。
清理重复的Servlet配置
二选一保留一套配置即可:要么删除web.xml中的<servlet>和<servlet-mapping>两段配置,要么删除Login类上的@WebServlet(urlPatterns = {"/Login"})注解。补全Servlet全类名
如果保留web.xml的配置方案,需要将<servlet-class>标签的内容替换为Login类的完整路径,例如Login类存放在com.test包下,就修改为<servlet-class>com.test.Login</servlet-class>。
内容的提问来源于stack exchange,提问作者Vitória Natália
相关产品推荐
相关产品推荐

