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

JSP页面跳转异常求助:提交后无法展示议员结果页面

JSP议员查询项目页面跳转异常排查与修复

问题描述

JSP议员查询项目存在页面跳转异常:点击提交按钮后,无法正常跳转到结果页面展示对应选区的议员数据。尝试过将JSP文件移至WEB-INF目录、删除自定义错误页、修改路径配置及beans.xml,但触发了此前已解决的404和循环路径错误,已恢复原有配置。调试发现请求URI存在拼写错误(cirocoscrizione而非circoscrizione),响应内容包含多个页面代码。

相关代码文件

beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<absolute-ordering>
<welcome-file-list>
  <welcome-file>index.html</welcome-file>
   <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
     <welcome-file>default.html</welcome-file>
      <welcome-file>default.htm</welcome-file>
       <welcome-file>default.jsp</welcome-file>
</welcome-file-list>

</absolute-ordering>

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>        
</servlet-mapping>
 
<error-page>
        <error-code>500</error-code>
        <location>/webapp/500.jsp</location>
    </error-page>
    
    <error-page>
        <error-code>404</error-code>
        <location>/webapp/404.jsp</location>
    </error-page>
 
<servlet-mapping>
 <servlet-name>ParlamentareController</servlet-name>
 <url-pattern>/Parlamento</url-pattern>
</servlet-mapping>

  <servlet>
    <description></description>
    <display-name>AggiugiParlamentare</display-name>
    <servlet-name>AggiugiParlamentare</servlet-name>
    <servlet-class>com.giuggiola.controller.ParlamentareController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AggiugiParlamentare</servlet-name>
    <url-pattern>/addParlamentare</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>CercaParlamentareDalPartito</display-name>
    <servlet-name>CercaParlamentareDalPartito</servlet-name>
    <servlet-class>com.giuggiola.controller.ParlamentareController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CercaParlamentareDalPartito</servlet-name>
    <url-pattern>/getParlamentare3</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>Cerca_parlamentare_dalla_circoscrizione</display-name>
    <servlet-name>Cerca_parlamentare_dalla_circoscrizione</servlet-name>
    <jsp-file>/cerca_parlamentare_dalla_circoscrizione.jsp</jsp-file>
    <servlet-class>com.giuggiola.controller.ParlamentareController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Cerca_parlamentare_dalla_circoscrizione</servlet-name>
    <url-pattern>/cerca_parlamentare_dalla_circoscrizione</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <description></description>
    <display-name>indexcontroller</display-name>
    <servlet-name>indexcontroller</servlet-name>
    <servlet-class>com.giuggiola.controller.IndexController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>indexcontroller</servlet-name>
    <url-pattern>/error</url-pattern>
  </servlet-mapping>
   
  <!--  
   <servlet>
    <description></description>
    <display-name>lista_parlamentari_circoscrizione</display-name>
    <servlet-name>lista_parlamentari_circoscrizione</servlet-name>
    <jsp-file>/lista_parlamentari_circoscrizione.jsp</jsp-file>
     
    <servlet-class>com.giuggiola.controller.ParlamentareController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>lista_parlamentari_circoscrizione</servlet-name>
    <url-pattern>/lista_parlamentari_circoscrizione</url-pattern>
  </servlet-mapping>
  -->
  <servlet>
  <servlet-name>jsptest</servlet-name>
        <jsp-file>/lista_parlamentari_circoscrizione.jsp</jsp-file>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>jsptest</servlet-name>
        <url-pattern>/lista_parlamentari_circoscrizione.jsp</url-pattern>
    </servlet-mapping>  
  
  <servlet>
    <description></description>
    <display-name>error</display-name>
    <servlet-name>error</servlet-name>
    
    <servlet-class>com.giuggiola.controller.ParlamentareController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>/error2</url-pattern>
  </servlet-mapping>
  
   <servlet>
    <description></description>
    <display-name>error</display-name>
    <servlet-name>error</servlet-name>
  
    <servlet-class>com.giuggiola.controller.IndexController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>src/main/resources/static/error</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <description></description>
    <display-name>Cerca_parlamentare_dal_nome</display-name>
    <servlet-name>Cerca_parlamentare_dal_nome</servlet-name>
    <servlet-class>com.giuggiola.controller.ParlamentareController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Cerca_parlamentare_dal_nome</servlet-name>
    <url-pattern>/getParlamentare</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>AggiornaParlamentare</display-name>
    <servlet-name>AggiornaParlamentare</servlet-name>
    <servlet-class>com.giuggiola.controller.ParlamentareController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AggiornaParlamentare</servlet-name>
    <url-pattern>/updateParlamentare</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>CancellaParlamentare</display-name>
    <servlet-name>CancellaParlamentare</servlet-name>
    <servlet-class>com.giuggiola.controller.ParlamentareController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CancellaParlamentare</servlet-name>
    <url-pattern>/cancellaParlamentare</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>LeggiParlamentare</display-name>
    <servlet-name>LeggiParlamentare</servlet-name>
    <servlet-class>com.giuggiola.controller.ParlamentareController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LeggiParlamentare</servlet-name>
    <url-pattern>/parlamentare/{nome}</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>ListaParlamentari</display-name>
    <servlet-name>ListaParlamentari</servlet-name>
    <servlet-class>com.giuggiola.controller.ParlamentareController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ListaParlamentari</servlet-name>
    <url-pattern>/lista_parlamentari</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>ListaPeriodiCariche</display-name>
    <servlet-name>ListaPeriodiCariche</servlet-name>
    <servlet-class>com.giuggiola.controller.ParlamentareController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ListaPeriodiCariche</servlet-name>
    <url-pattern>/lista_periodi_cariche</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>Parlamentari</display-name>
    <servlet-name>Parlamentari</servlet-name>
    <servlet-class>com.giuggiola.controller.ParlamentareController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Parlamentari</servlet-name>
    <url-pattern>/parlamentari</url-pattern>
  </servlet-mapping>
 
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/webapp/WEB-INF/" />
<property name="suffix" value=".jsp" />
</bean>

</web-app>

ParlamentareController.java

@GetMapping("/cerca_parlamentare_dalla_circoscrizione")
public ModelAndView getParlamentare4(@RequestParam("circoscrizione") String circoscrizionee)
{
        ModelAndView mv = new ModelAndView();
        List<Parlamentare> parlamentari = parlamRepo.findByCircoscrizione(circoscrizionee);
        mv.addObject(parlamentari);
        mv.setViewName("lista_parlamentari_circoscrizione.jsp");
        
                return mv;  
}

cerca_parlamentare_dalla_circoscrizione.jsp

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cerca un parlamentare dalla circoscrizione</title>
</head>
<body>

<h2>Ricerca parlamentare in base alla circoscrizione:</h2>


 <form  method="POST" action="\lista_parlamentari_circoscrizione.jsp"  modelAttribute="parlamentari"> 
<table>
<tr>
<td>Circoscrizione:</td>

  <td> <input type="text" name="circoscrizione"><br></td>
   </tr>
   <tr>
   <td>
       <td><input type="submit" value="invio" action="\lista_parlamentari_circoscrizione.jsp"></td></br>
   </tr>
   </table>
</form>
  
</body>
</html>

lista_parlamentari_circoscrizione.jsp

<!DOCTYPE html>
<html>
<head>
    
<meta charset="UTF-8">

<title>Lista parlamentari di quella circoscrizione</title>
</head>
<body>

 <!--   <form action="getParlamentare4"> -->
     <c:forEach items="${parlamentari}" var="parlamentare" >

<td>Nome:</td>
    <td><c:out value="${parlamentare.getPk().getNome()}"/></td>
    <br>
    </tr>
    <tr>
     <td>Partito:</td>
    <td><c:out value="${pk.partito}"/></td><br>
    </tr>
    <tr>
     <td>Circoscrizione:</td>
   <c:forEach items="${pk.getCircoscrizione()}" var="CIRCOSCRIZIONE">
      <td><c:out value="${CIRCOSCRIZIONE}"/></td> <br>
       </c:forEach>
   </tr>
   <br>
    <tr>
   <td>Data di nascita:</td>
   <td><c:out value="${parlamentare.data_nascita}"/><br></td>
 </tr>
 <tr>
     <td>Luogo:</td>
   <td><c:out value="${parlamentare.luogo}"/><br></td>
   </tr>
   <tr>
     <td>Titolo di studi:</td>
   <td><c:out value="${parlamentare.titolo_studi}"/><br></td>
   </tr>
   <tr>
   <td>Mandati:</td><br>
   <c:forEach items="${parlamentare.mandati}" var="mandato">
       <table>
        <tr>
       <td>Mandato:</td> 
       <td><c:out value="${mandato}"/></td><br>
       </tr>
       </table>
       </c:forEach>
 </tr>
 
 <tr>
     <td>Commissioni:</td>
      <c:forEach items="${parlamentare.commissioni}" var="commissione">
       <table>
        <tr>
       <td>Commissione:</td> 
       <td><c:out value="${commissione}"/></td><br>
       </tr>
       </table>
       </c:forEach>
</c:forEach>

</body>
</html>

修复方案

1. 统一请求方法与表单提交路径

  • 将表单的method改为GET(匹配控制器的@GetMapping),action指向控制器映射路径,而非直接访问JSP:
<form method="GET" action="/cerca_parlamentare_dalla_circoscrizione">
  • 若需使用POST方法,将控制器注解改为@PostMapping或@RequestMapping(method = {RequestMethod.GET, RequestMethod.POST})。

2. 修正控制器视图名称与模型数据传递

  • 视图解析器已配置前缀和后缀,视图名称无需加.jsp:
mv.setViewName("lista_parlamentari_circoscrizione");
  • 传递模型数据时指定键名,确保JSP能正确获取:
mv.addObject("parlamentari", parlamentari);

3. 修复JSP中的EL表达式错误

  • 在结果JSP顶部引入JSTL核心标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • 修正pk属性的引用方式,需通过循环变量parlamentare访问:
<td><c:out value="${parlamentare.pk.partito}"/></td><br>
<!-- 替换原${pk.partito} -->
<c:forEach items="${parlamentare.pk.circoscrizione}" var="CIRCOSCRIZIONE">
<!-- 替换原${pk.getCircoscrizione()} -->

4. 清理beans.xml冗余配置

  • 删除重复的servlet定义(如两个error servlet),避免请求映射冲突。
  • 移除直接将JSP映射为servlet的配置(如jsptest),统一由Spring MVC的DispatcherServlet处理所有请求。

5. 统一拼写规范

  • 检查所有涉及circoscrizione的代码,确保表单输入名、控制器参数名、数据库字段名拼写一致,避免因拼写错误导致参数无法传递或查询失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:50:26