通过HTML传值到Servlet时出现404错误,请求资源未找到原因?
HTTP 404错误:请求资源[/ExampleLearning/Example.java]不可用的解决方法
问题根源
表单提交目标路径错误:HTML表单的action属性被设置为Example.java,但web.xml中为Servlet配置的映射路径是/Example。服务器无法找到名为Example.java的资源,因此返回404错误。
修复步骤
1. 修正HTML表单提交路径
将HTML中表单的action属性值改为Servlet的映射路径Example(若HTML与Servlet处于同一上下文路径,使用相对路径即可):
<!DOCTYPE html> <!-- Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license Click nbfs://nbhost/SystemFileSystem/Templates/JSP_Servlet/Html.html to edit this template --> <html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <div>TODO write content</div> <form action="Example" method="get"> num1:<input type="text" name="num1"> <input type="submit" value="go"> </form> </body> </html>
2. 验证核心配置一致性
- 确认Servlet类的包名
Pack与web.xml中servlet-class的Pack.Example完全匹配(含大小写):
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <servlet> <servlet-name>Example</servlet-name> <servlet-class>Pack.Example</servlet-class> </servlet> <servlet-mapping> <servlet-name>Example</servlet-name> <url-pattern>/Example</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> </web-app>
- 确保项目部署时,Servlet已被正确编译至
WEB-INF/classes/Pack/目录下。
3. 额外健壮性优化
Servlet的doGet方法直接使用Integer.parseInt可能抛出NumberFormatException,建议添加参数校验与异常处理:
package Pack; import jakarta.servlet.*; import jakarta.servlet.http.*; import java.io.IOException; import java.io.PrintWriter; public class Example extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter pw = response.getWriter(); response.setContentType("text/html;charset=UTF-8"); // 设置响应编码,避免乱码 String numStr = request.getParameter("num1"); if (numStr == null || numStr.trim().isEmpty()) { pw.print("请输入有效的数字!"); return; } try { int num1 = Integer.parseInt(numStr); pw.print(num1*num1 + " 是 " + num1 + " 的平方!"); System.out.println(num1); } catch (NumberFormatException e) { pw.print("输入的不是有效数字,请重新输入!"); } } }
内容的提问来源于stack exchange,提问作者mMadeInHeaven
相关产品推荐
相关产品推荐

