在本教程中编写了相同的代码后,我尝试遵循有关JSP和eve的教程,但仍然收到以下错误。
java.lang.Error:未解决的编译问题:重复的局部变量cart。
我正在尝试使用以下代码运行servlet。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); Cart cart = (Cart)session.getAttribute("cart"); if (cart == null) { cart = new Cart(); } cart.setTotalItems(7); session.setAttribute("cart", cart); getServletContext().getRequestDispatcher("/showcart.jsp").forward(request,response); } HTTP Status 500 - Servlet execution threw an exception -------------------------------------------------------------------------------- type Exception report message Servlet execution threw an exception description The server encountered an internal error that prevented it from fulfilling this request. exception javax.servlet.ServletException: Servlet execution threw an exception org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) root cause java.lang.Error: Unresolved compilation problem: Duplicate local variable cart demo.Session.doGet(Session.java:32) javax.servlet.http.HttpServlet.service(HttpServlet.java:620) javax.servlet.http.HttpServlet.service(HttpServlet.java:727) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note注意在Apache Tomcat / 7.0.53日志中可以找到根本原因的完整堆栈跟踪。
Apache Tomcat / 7.0.53
showcart.jsp:
<?xml version="1.0" encoding="ISO-8859-1" ?> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>Insert title here</title> </head> <body> <%@ page import= "demo.*" %> <% Cart cart= (Cart)session.getAttribute("cart");%> Items in cart : <%= cart.getTotalItems() %> </body> </html>
web.xml:
<servlet> <description></description> <display-name>Session</display-name> <servlet-name>Session</servlet-name> <servlet-class>demo.Session</servlet-class> </servlet> <servlet-mapping> <servlet-name>Session</servlet-name> <url-pattern>/Session</url-pattern> </servlet-mapping> </web-app>
session.java
package demo; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class Session */ public class Session extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Session() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); Cart cart = (Cart)session.getAttribute("cart"); if (cart == null) { cart = new Cart(); } cart.setTotalItems(7); session.setAttribute("cart", cart); getServletContext().getRequestDispatcher("/showcart.jsp").forward(request,response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
由于您在运行时而不是编译时遇到错误,因此我认为问题不必与显示的代码直接相关(如果有的话)。该代码是在打包WAR文件时而不是在部署WAR文件时编译的,如果您获得了WAR,我认为它可以很好地编译。
我猜这个重复的变量是在JSP文件中定义的,它恰好也有一个名为“ cart”的变量。JSP文件通常在第一个请求时在运行时“即时”编译。如果您查看,showcart.jsp您应该看到真正的原因。堆栈跟踪似乎支持这一点,你可以验证我通过重命名说cart的doGet方法别的东西- 错误还是会说“购物车”。如果您没有在中找到原因showcart.jsp,可以将其内容张贴出来吗?
showcart.jsp
cart
doGet