You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse Java EE开发Web应用遇HTTP 404:afficherClient.jsp无法访问

解决404错误及后续潜在问题指南

嘿,我一眼就揪出了你遇到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:35:46