Java Servlet中的Id解析错误

Java Servlet中的Id解析错误,java,jsp,servlets,Java,Jsp,Servlets,我有一个编辑servlet。分析错误只是编辑时的问题。虽然我已经试了半个月了,但还是无法解决。请帮助我 package com.intermediateDemo.home.controller; import com.intermediateDemo.home.dao.ItemDao; import com.intermediateDemo.home.dao.ItemDaoFactory; import com.intermediateDemo.home.dto.ItemBean; impor

我有一个编辑servlet。分析错误只是编辑时的问题。虽然我已经试了半个月了,但还是无法解决。请帮助我

package com.intermediateDemo.home.controller;

import com.intermediateDemo.home.dao.ItemDao;
import com.intermediateDemo.home.dao.ItemDaoFactory;
import com.intermediateDemo.home.dto.ItemBean;
import com.intermediateDemo.login.dto.LoginBean;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;


public class EditExpense extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws NumberFormatException, ServletException, IOException {

        try {
            ItemBean item = new ItemBean();
            ItemDao dao = ItemDaoFactory.getItemDao();
            HttpSession session = request.getSession(false);
            LoginBean user = (LoginBean) session.getAttribute("user");
            item.setId(Integer.parseInt(request.getParameter("id")));
            item.setItemName(request.getParameter("itemname"));
            item.setItemPrice(Double.valueOf(request.getParameter("itemprice")));
            item.setTransactionTime(request.getParameter("transactiontime"));
            item.setEmail(user.getEmail());
            System.out.println("at edit servlet" +item);
            dao.updateexpense(item, user);

        } catch (NumberFormatException e) {
               e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            response.sendRedirect("homeservlet");
        }


    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher view;
        view = request.getRequestDispatcher("/home/editexpense.jsp");
        view.forward(request,response);
    }
}
而接受输入的jsp是


编辑
费用名称
费用金额
费用日期
在控制台编辑后发现的错误如下所示,而不是任何更改。但删除时,删除servlet没有id的整数解析错误

java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at com.intermediateDemo.home.controller.EditExpense.doPost(EditExpense.java:27)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
我更新的课程是

package com.intermediateDemo.home.controller;

import com.intermediateDemo.home.dao.ItemDao;
import com.intermediateDemo.home.dao.ItemDaoFactory;
import com.intermediateDemo.home.dto.ItemBean;
import com.intermediateDemo.login.dto.LoginBean;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;


public class EditExpense extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws NumberFormatException, ServletException, IOException {

        try {
            ItemBean item = new ItemBean();
            ItemDao dao = ItemDaoFactory.getItemDao();
            HttpSession session = request.getSession(false);
            LoginBean user = (LoginBean) session.getAttribute("user");
            item.setId(Integer.parseInt(request.getParameter("id")));
            item.setItemName(request.getParameter("itemname"));
            item.setItemPrice(Double.valueOf(request.getParameter("itemprice")));
            item.setTransactionTime(request.getParameter("transactiontime"));
            item.setEmail(user.getEmail());
            System.out.println("at edit servlet" +item);
            dao.updateexpense(item, user);

        } catch (NumberFormatException e) {
               e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            response.sendRedirect("homeservlet");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher view;
        try {
            HttpSession session = request.getSession(false);
            LoginBean user = (LoginBean) session.getAttribute("user");
            ItemDao dao = ItemDaoFactory.getItemDao();
            List<ItemBean> item =  dao.getItemFromdb(user);
            request.setAttribute("item", item);
            System.out.println("@ edit servlet ");
            for(ItemBean item1:item){
                System.out.println(item1.getId());
                System.out.println(item1.getTransactionTime());
                System.out.println(item1.getItemPrice());
                System.out.println(item1.getItemName());
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        view = request.getRequestDispatcher("/home/editexpense.jsp");
        view.forward(request,response);
    }
}
type Exception report

message

description The server encountered an internal error () that prevented it from  fulfilling this request.

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page   /home/editexpense.jsp at line 30

27:                 <input name="transactiontime" type="date" id="datepicker"    required="required" /></td></tr>
28: 
29:             <%--Hidden field for id--%>
30:            <input type="hidden" name="id" value="${item.id}">
31: 
32: 
33:             <tr><td> </td><td><input type="submit" name="submit" value="update"/>  </td></tr>


Stacktrace:
   org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:553)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:457)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
com.intermediateDemo.home.controller.EditExpense.doGet(EditExpense.java:65)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

java.lang.NumberFormatException: For input string: "id"
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
java.lang.Integer.parseInt(Integer.java:492)
java.lang.Integer.parseInt(Integer.java:527)
javax.el.ListELResolver.coerce(ListELResolver.java:174)
javax.el.ListELResolver.getValue(ListELResolver.java:52)
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
org.apache.el.parser.AstValue.getValue(AstValue.java:169)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:985)
org.apache.jsp.home.editexpense_jsp._jspService(editexpense_jsp.java:80)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
com.intermediateDemo.home.controller.EditExpense.doGet(EditExpense.java:65)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.11 logs.
package com.mediatedemo.home.controller;
导入com.mediatedemo.home.dao.ItemDao;
导入com.mediatedemo.home.dao.ItemDaoFactory;
导入com.mediatedemo.home.dto.ItemBean;
导入com.mediatedemo.login.dto.LoginBean;
导入javax.servlet.RequestDispatcher;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入javax.servlet.http.HttpSession;
导入java.io.IOException;
导入java.sql.SQLException;
导入java.util.List;
公共类EditExpense扩展了HttpServlet{
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发NumberFormatException、ServletException、IOException{
试一试{
ItemBean item=新的ItemBean();
ItemDao=ItemDaoFactory.getItemDao();
HttpSession session=request.getSession(false);
LoginBean user=(LoginBean)session.getAttribute(“用户”);
item.setId(Integer.parseInt(request.getParameter(“id”));
item.setItemName(request.getParameter(“itemname”));
item.setItemPrice(Double.valueOf(request.getParameter(“itemprice”));
item.setTransactionTime(request.getParameter(“transactiontime”);
item.setEmail(user.getEmail());
System.out.println(“编辑servlet”+项);
dao.updateexpense(项目、用户);
}捕获(数字格式){
e、 printStackTrace();
}捕获(例外e){
e、 printStackTrace();
}最后{
响应。发送重定向(“homeservlet”);
}
}
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
请求调度程序视图;
试一试{
HttpSession session=request.getSession(false);
LoginBean user=(LoginBean)session.getAttribute(“用户”);
ItemDao=ItemDaoFactory.getItemDao();
List item=dao.getItemFromdb(用户);
request.setAttribute(“项”,项);
System.out.println(“@editservlet”);
for(ItemBean item1:item){
System.out.println(item1.getId());
System.out.println(item1.getTransactionTime());
System.out.println(item1.getItemPrice());
System.out.println(item1.getItemName());
}
}捕获(SQLE异常){
e、 printStackTrace();
}
view=request.getRequestDispatcher(“/home/editexpense.jsp”);
视图。转发(请求、响应);
}
}
堆栈跟踪错误为

package com.intermediateDemo.home.controller;

import com.intermediateDemo.home.dao.ItemDao;
import com.intermediateDemo.home.dao.ItemDaoFactory;
import com.intermediateDemo.home.dto.ItemBean;
import com.intermediateDemo.login.dto.LoginBean;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;


public class EditExpense extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws NumberFormatException, ServletException, IOException {

        try {
            ItemBean item = new ItemBean();
            ItemDao dao = ItemDaoFactory.getItemDao();
            HttpSession session = request.getSession(false);
            LoginBean user = (LoginBean) session.getAttribute("user");
            item.setId(Integer.parseInt(request.getParameter("id")));
            item.setItemName(request.getParameter("itemname"));
            item.setItemPrice(Double.valueOf(request.getParameter("itemprice")));
            item.setTransactionTime(request.getParameter("transactiontime"));
            item.setEmail(user.getEmail());
            System.out.println("at edit servlet" +item);
            dao.updateexpense(item, user);

        } catch (NumberFormatException e) {
               e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            response.sendRedirect("homeservlet");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher view;
        try {
            HttpSession session = request.getSession(false);
            LoginBean user = (LoginBean) session.getAttribute("user");
            ItemDao dao = ItemDaoFactory.getItemDao();
            List<ItemBean> item =  dao.getItemFromdb(user);
            request.setAttribute("item", item);
            System.out.println("@ edit servlet ");
            for(ItemBean item1:item){
                System.out.println(item1.getId());
                System.out.println(item1.getTransactionTime());
                System.out.println(item1.getItemPrice());
                System.out.println(item1.getItemName());
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        view = request.getRequestDispatcher("/home/editexpense.jsp");
        view.forward(request,response);
    }
}
type Exception report

message

description The server encountered an internal error () that prevented it from  fulfilling this request.

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page   /home/editexpense.jsp at line 30

27:                 <input name="transactiontime" type="date" id="datepicker"    required="required" /></td></tr>
28: 
29:             <%--Hidden field for id--%>
30:            <input type="hidden" name="id" value="${item.id}">
31: 
32: 
33:             <tr><td> </td><td><input type="submit" name="submit" value="update"/>  </td></tr>


Stacktrace:
   org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:553)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:457)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
com.intermediateDemo.home.controller.EditExpense.doGet(EditExpense.java:65)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

java.lang.NumberFormatException: For input string: "id"
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
java.lang.Integer.parseInt(Integer.java:492)
java.lang.Integer.parseInt(Integer.java:527)
javax.el.ListELResolver.coerce(ListELResolver.java:174)
javax.el.ListELResolver.getValue(ListELResolver.java:52)
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
org.apache.el.parser.AstValue.getValue(AstValue.java:169)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:985)
org.apache.jsp.home.editexpense_jsp._jspService(editexpense_jsp.java:80)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
com.intermediateDemo.home.controller.EditExpense.doGet(EditExpense.java:65)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.11 logs.
类型异常报告
消息
说明服务器遇到内部错误(),无法完成此请求。
例外
org.apache.jasper.jaspereException:在第30行处理JSP页面/home/editexpense.JSP时发生异常
27:                 
28: 
29:             
30:            
31: 
32: 
33:                
堆栈跟踪:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:553)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:457)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javaservlet.http.HttpServlet.service(HttpServlet.java:722)
com.mediatedemo.home.controller.EditExpense.doGet(EditExpense.java:65)
javaservlet.http.HttpServlet.service(HttpServlet.java:621)
javaservlet.http.HttpServlet.service(HttpServlet.java:722)
根本原因
java.lang.NumberFormatException:用于输入字符串:“id”
forInputString(NumberFormatException.java:65)
java.lang.Integer.parseInt(Integer.java:492)
java.lang.Integer.parseInt(Integer.java:527)
强制(ListELResolver.java:174)
getValue(ListELResolver.java:52)
getValue(CompositeELResolver.java:67)
org.apache.el.parser.AstValue.getValue(AstValue.java:169)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
org.apache.jasper.runtime.PageContextImpl.proprietaryeevaluate(PageContextImpl.java:985)
org.apache.jsp.home.editexpense\u jsp.\u jsp服务(editexpense\u jsp.java:80)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javaservlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javaservlet.http.HttpServlet.service(HttpServlet.java:722)
com.mediatedemo.home.controller.EditExpense.doGet(EditExpense.java:65)
javaservlet.http.HttpServlet.service(HttpServlet.java:621)
javaservlet.http.HttpServlet.service(HttpServlet.java:722)
注意,Apache Tomcat/7.0.11日志中提供了根本原因的完整堆栈跟踪。

因为您的id输入为空,并且您正在尝试将空字符串转换为Int。这就是为什么您会得到:

java.lang.NumberFormatException: For input string: ""
假设您在doGet方法中设置请求属性项:

protected void doGet(HttpServletRequest request, 
  HttpServletResponse response) throws ServletException, IOException {

   RequestDispatcher view;
   //not sure where are you getting your item from. DB??
   request.setAttribute("item", item);
   view = request.getRequestDispatcher("/home/editexpense.jsp");
   view.forward(request,response);
}
更新 如果要显示项目列表,则需要在jsp中循环浏览该列表。某物