Eclipse开发Web应用遇HTTP 404错误:/EditForm资源无法访问求助
解决HTTP 404 - /EditForm 资源不可用的问题
看起来你卡在这里好几个小时了,我帮你梳理下导致404的核心问题,还有几个后续会踩的坑:
1. 表单提交路径是最可能的元凶
你表单里写的ACTION="/EditForm"是服务器根路径,意思是直接请求http://你的服务器地址/EditForm,但你的Web应用部署在/Website这个上下文路径下,正确的请求地址应该是http://你的服务器地址/Website/EditForm,这就导致服务器找不到对应资源。
修复方案:
- 用相对路径(去掉开头的斜杠):
ACTION="EditForm",这种方式会基于当前页面的路径提交,适合你的editProfile.jsp和Servlet在同一上下文的场景。 - 或者用JSP的EL表达式动态获取上下文路径(更通用,避免后续上下文路径变更出问题):
<form CLASS="form-horizontal" METHOD=POST ACTION="${pageContext.request.contextPath}/EditForm"> <div class="form-group"> <label class="control-label col-sm-2"><b>New Address</b></label> <INPUT TYPE=TEXT PLACEHOLDER="Type new address here." NAME=address SIZE=20><BR> </div> <div class="submit_btn col-sm-2"><INPUT TYPE=SUBMIT></div> </form>
2. Servlet映射存在配置冲突
你同时用了@WebServlet("/EditForm")注解和web.xml里的<servlet>配置,但web.xml里没有添加<servlet-mapping>节点。虽然Servlet 3.0+支持注解映射,但如果项目配置有问题,可能导致注解不生效。
修复方案:
- 二选一:要么保留注解,删除web.xml里的
<servlet>配置(避免冲突);要么在web.xml里补充映射规则:
<servlet> <servlet-name>EditForm</servlet-name> <servlet-class>user.EditForm</servlet-class> </servlet> <servlet-mapping> <servlet-name>EditForm</servlet-name> <url-pattern>/EditForm</url-pattern> </servlet-mapping>
3. 确认项目部署的上下文路径
在Eclipse里右键你的项目 → Properties → Web Project Settings,查看Context root是否为Website。如果这里设置的不是/,那表单里的绝对路径/EditForm就不会自动带上上下文路径,自然找不到资源。
4. 提前规避后续的运行时错误
虽然这不是导致404的原因,但你的Servlet代码有个明显的坑:你尝试获取currForm参数,但你的表单里完全没有这个字段,这会导致currForm为null,调用currForm.equals("address")时直接抛出NullPointerException。
修复方案:
- 在表单里添加隐藏字段传递
currForm值:
<input type="hidden" name="currForm" value="address">
- 或者修改Servlet逻辑,根据实际存在的参数判断(比如检查
request.getParameter("address")是否不为空)。
另外,你的SQL语句存在严重的SQL注入风险,别用字符串拼接参数,改用PreparedStatement:
String sqlStmt = "UPDATE db.User SET address = ? WHERE username = ?"; PreparedStatement pstmt = op.getConnection().prepareStatement(sqlStmt); pstmt.setString(1, request.getParameter("address")); pstmt.setString(2, user); pstmt.executeUpdate();
内容的提问来源于stack exchange,提问作者Hassan Ali
相关产品推荐
相关产品推荐

