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

Servlet与JSP映射不匹配 点击链接无响应如何解决

问题根因与修复方案

核心问题:导航链接地址配置错误

页面中「Listino Videogiochi」的导航链接直接指向JSP文件,完全绕过了Servlet的请求映射,Servlet中查询数据、转发页面的逻辑根本不会执行,这是点击后无预期效果的最主要原因:

<!-- 错误写法:直接访问静态JSP,不经过业务逻辑处理 -->
<li><a href ="listinoVideogiochi.jsp" class="active"> Listino Videogiochi </a></li>

将链接地址改为Servlet配置的@WebServlet对应的urlPatterns路径即可:

<!-- 正确写法:先请求Servlet执行业务逻辑,再由Servlet转发到JSP渲染 -->
<li><a href ="listinoVideogiochi" class="active"> Listino Videogiochi </a></li>

其余会导致功能异常的问题

  • JSP缺少JSTL标签库声明
    页面中使用了<c:set>、<c:if>、<c:forEach>等JSTL标签,但未在页面顶部引入标签库,会直接导致JSP编译失败。需要在JSP文件最开头、<!DOCTYPE html>之前添加如下声明:
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
  • EL表达式写法错误
    页面中写的${empty utente.getUsername()}、${videogiochi.getTitolo()}这类调用getter的写法不符合EL语法规范,EL会自动匹配实体类的getter方法,直接写属性名即可,例如${empty utente.username}、${videogiochi.titolo}。同时需要确认登录逻辑执行成功后,确实将utente对象存入了Session作用域,否则页面会一直重定向到登录页。
  • 数据库查询逻辑未给实体对象赋值
    VideogiocoFactory的getAllVideogiochi()方法中,遍历ResultSet时仅创建了空的Videogioco对象,没有从查询结果中读取字段给对象属性赋值,最终返回的列表里全是空属性的对象,页面无法渲染出任何游戏数据。需要在while循环中补全属性赋值逻辑,字段名与数据库表、实体类属性对应即可:
    while (set.next()) {
        Videogioco videogioco = new Videogioco();
        videogioco.setTitolo(set.getString("titolo"));
        videogioco.setGenere(set.getString("genere"));
        videogioco.setUrl_Foto(set.getString("url_foto"));
        // 其余价格、发行时间、配置要求等属性按相同方式补全赋值
        videogiochi.add(videogioco);
    }
    
  • JSP存在语法与结构错误
    1. 游戏封面的img标签未闭合,src属性的EL表达式写了一半,会导致页面渲染错乱:
      <!-- 错误写法,标签未闭合 -->
      <img title ="BlackMesa" alt="Foto del gioco di Black Mesa" src="${videogiochi.getUrl_Foto(
      
      修正为:
      <img title="BlackMesa" alt="Foto del gioco di Black Mesa" src="${videogiochi.url_Foto}" />
      
    2. JSTL逻辑标签放错位置:<c:set>、<c:if>标签放在了<head>和<body>之间,不符合HTML语法规范,需要移到页面顶部(标签库声明之后)或<body>标签最开头。
    3. 页面多写了一个多余的</article>闭合标签,会导致HTML结构错乱,直接删除即可。
  • 数据库资源关闭存在空指针风险
    getAllVideogiochi()方法的finally块中,没有判断Connection、PreparedStatement、ResultSet对象是否为null就直接调用close()方法,如果数据库连接初始化阶段就抛出异常,会触发空指针错误。需要添加非空判断:
    finally {
        try {if (set != null) set.close();} catch (Exception e) {}
        try {if (stmt != null) stmt.close();} catch (Exception e) {}
        try {if (conn != null) conn.close();} catch (Exception e) {}
    }
    

内容的提问来源于stack exchange,提问作者erica

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:54:26