Eclipse Java EE开发Web应用遇HTTP 404:afficherClient.jsp无法访问
嘿,我一眼就揪出了你遇到404错误的核心原因——路径里的多余空格!咱们一步步来修复,顺便把几个潜在坑也填上:
1. 修复404的直接原因
在你的CreationClient Servlet的doGet方法里,转发JSP的路径多了个空格:
// 错误写法:路径开头有空格 this.getServletContext().getRequestDispatcher( "/ afficherClient.jsp" ).forward( request, response );
改成下面这样,去掉空格就可以找到afficherClient.jsp文件了:
// 正确写法:路径无多余空格 this.getServletContext().getRequestDispatcher( "/afficherClient.jsp" ).forward( request, response );
服务器会严格按照你写的路径去查找资源,带空格的路径会被当成真实的文件名一部分,自然找不到对应的文件,这就是404的根源。
2. 修复Servlet映射冲突
你同时在web.xml和Servlet类上做了映射配置,而且两者路径不一致(web.xml里是/creationClient,注解是/CreationClient,Java Web里路径是大小写敏感的),而你的表单action用的是creationClient,这会导致请求可能无法正确匹配Servlet。
解决办法二选一:
- 删掉
web.xml里的Servlet配置块(Servlet 3.0及以上版本支持注解配置,更简洁) - 把Servlet类上的注解改成
@WebServlet("/creationClient"),和表单action保持完全一致
3. 避免空指针异常
你现在判断必填字段的代码有风险:如果用户没填某个字段,request.getParameter()会返回null,直接调用trim()会抛出NullPointerException。修改判断逻辑,先检查是否为null:
// 优化后的判断逻辑 if (nomClient == null || nomClient.trim().isEmpty() || adresseClient == null || adresseClient.trim().isEmpty() || telephoneClient == null || telephoneClient.trim().isEmpty()) { message = "Erreur - Vous n'avez pas rempli tous les champs obligatoires. <br> <a href=\"creerClient.jsp\">Cliquez ici</a> pour accéder au formulaire de création d'un client."; } else { message = "Client créé avec succès !"; }
4. 补全并优化表单代码
你提供的creerClient.jsp代码不完整,telephoneClient输入框没写完,而且缺少邮箱输入和提交按钮,补全后应该是这样:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Création d'un client</title> <link type="text/css" rel="stylesheet" href="inc/style.css" /> </head> <body> <div> <form method="post" action="creationClient"> <!-- 建议用POST提交表单,更安全 --> <fieldset> <legend>Informations client</legend> <label for="nomClient">Nom <span class="requis">*</span></label> <input type="text" id="nomClient" name="nomClient" value="" size="20" maxlength="20" /> <br /> <label for="prenomClient">Prénom </label> <input type="text" id="prenomClient" name="prenomClient" value="" size="20" maxlength="20" /> <br /> <label for="adresseClient">Adresse de livraison <span class="requis">*</span></label> <input type="text" id="adresseClient" name="adresseClient" value="" size="20" maxlength="20" /> <br /> <label for="telephoneClient">Numéro de téléphone <span class="requis">*</span></label> <input type="text" id="telephoneClient" name="telephoneClient" value="" size="20" maxlength="20" /> <br /> <label for="emailClient">Email </label> <input type="email" id="emailClient" name="emailClient" value="" size="30" maxlength="50" /> <br /> <input type="submit" value="Valider" /> </fieldset> </form> </div> </body> </html>
另外建议把表单的method从get改成post,避免敏感数据出现在URL里,同时要确保Servlet的doPost方法正确调用doGet(你现在已经这么做了,没问题)。
5. 统一字符编码,避免乱码
你的JSP页面同时设置了ISO-8859-1和utf-8编码,会导致乱码问题,统一改成UTF-8:
- JSP页面顶部的指令改成
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - 在Servlet的
doGet和doPost方法开头加上编码设置:
request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8");
按照上面的步骤修改后,你的应用应该就能正常工作了——点击Valider按钮后,要么显示错误提示,要么跳转到客户详情页面。
内容的提问来源于stack exchange,提问作者Slim

