SearchGoodsByIdServlet.java:45 下一句 空指针异常
严重: 在路径为[/Gim]的上下文中,servlet[com.imooc.gim.SearchGoodsByIdServlet]的Servlet.service()引发异常 java.lang.NullPointerException at com.imooc.gim.SearchGoodsByIdServlet.doPost(SearchGoodsByIdServlet.java:45) at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:196) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:364) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:624) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:831) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1650) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source) package com.imooc.gim; import java.io.IOException; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class SearchGoodsByIdServlet */ @WebServlet("/sg") public class SearchGoodsByIdServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public SearchGoodsByIdServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getParameter("id"); Integer goodsId = Integer.parseInt(id); ServletContext context=request.getServletContext(); context.getAttribute("goods"); List goodsList=(List)context.getAttribute("goods"); for(int i=0; i<goodsList.size(); i++) { if( ((Goods) goodsList.get(i)).getGoodsId() == goodsId ) { //这一句有问题? System.out.println("商品id已查询到"); break; }else { System.out.println("商品id不存在"); break; } } } }
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>商品列表</title> <link href="css/bootstrap.css" type="text/css" rel="stylesheet"> </link> <script type="text/javascript" src="js/jquery-1.11.1.min.js"></script> <script type="text/javascript" src="js/bootstrap.js"></script> <style type="text/css"> .pagination { margin: 0px } .pagination>li>a, .pagination>li>span { margin: 0 5px; border: 1px solid #dddddd; } .glyphicon { margin-right: 3px; } .form-control[readonly] { cursor: pointer; background-color: white; } #dlgPhoto .modal-body { text-align: center; } .preview { max-width: 500px; } </style> <script> $(function () { $("#btnAdd").click(function () { $('#dlgForm').modal() }); }) </script> </head> <body> <div class="container"> <div class="row"> <h1 style="text-align: center">IMOOC商品信息表</h1> <div class="panel panel-default"> <div class="clearfix panel-heading "> <div> <label class="form-inline"> <div class="form-group" style="width: 850px;"> <button class="btn btn-primary" id="btnAdd">新增 </button> </div> <div class="form-group pull-right"> <form action="/Gim/sg" method="post"> <input type="text" class="form-control" id="searchById" name="id" placeholder="根据商品id进行查询"> <button type="submit" class="btn btn-primary">查询</button> </form> </div> </label> </div> <table class="table table-bordered table-hover"> <thead> <tr> <th>序号</th> <th>商品编号</th> <th>商品名称</th> <th>商品类别</th> <th>价格</th> <th>备注</th> <th> </th> </tr> <c:forEach items="${applicationScope.goods}" var ="good" varStatus="idx"> <tr> <th>${idx.index+1}</th> <th>${good.goodsId}</th> <th>${good.goodsName}</th> <th>${good.goodsType}</th> <th>¥<fmt:formatNumber value = "${good.price}" pattern="0,000.00"></fmt:formatNumber></th> <th>${good.goodsRemark}</th> <th> </th> </tr> </c:forEach> </thead> </table> </div> </div> </div> <!-- 表单 --> <div class="modal fade" tabindex="-1" role="dialog" id="dlgForm"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span> </button> <h4 class="modal-title">新增商品</h4> </div> <div class="modal-body"> <form action="/Gim/create" method="post"> <div class="form-group"> <label>商品编号</label> <input type="text" name="goodsId" class="form-control" id="empno" placeholder="请输入商品编号"> </div> <div class="form-group"> <label>商品名称</label> <input type="text" name="goodsName" class="form-control" id="ename" placeholder="请输入商品名称"> </div> <div class="form-group"> <label>商品类别</label> <select id="gname" name="goodsType" class="form-control"> <option selected="selected">服装</option> <option value="家用">家用电器</option> <option value="生活">生活用品</option> </select> </div> <div class="form-group"> <label>价格</label> <input type="text" name="price" class="form-control" id="sal" placeholder="请输入价格"> </div> <div class="form-group"> <label>备注</label> <input type="text" name="description" class="form-control" id="sal" placeholder="请输入备注"> </div> <div class="form-group" style="text-align: center;"> <button type="submit" class="btn btn-primary">保存</button> </div> </form> </div> </div><!-- /.modal-content --> </div><!-- /.modal-dialog --> </div><!-- /.modal --> </body> </html>
package com.imooc.gim; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class GoodsAddServlet */ @WebServlet("/gl") public class GoodsListServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * Default constructor. */ public GoodsListServlet() { // TODO Auto-generated constructor stgaub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); ServletContext context=request.getServletContext(); if(context.getAttribute("goods")==null) { List<Goods> goodsList=new ArrayList<>(); goodsList.add(new Goods(1001,"格力空调","家用电器",3000.00f,"铂金品质")); goodsList.add(new Goods(1002,"LV","服装",18888.00f,"生活一场旅行")); context.setAttribute("goods", goodsList); } request.getRequestDispatcher("/goods.jsp").forward(request, response); } }
package com.imooc.gim; import java.io.IOException; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class GoodsAddServlet */ @WebServlet("/create") public class GoodsAddServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public GoodsAddServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String goodsId=request.getParameter("goodsId"); String goodsName=request.getParameter("goodsName"); String goodsType=request.getParameter("goodsType"); String price=request.getParameter("price"); String goodsRemark=request.getParameter("description"); System.out.println(goodsId); Goods good = new Goods(Integer.parseInt(goodsId),goodsName,goodsType,Float.parseFloat(price),goodsRemark); ServletContext context=request.getServletContext(); context.getAttribute("goods"); List goodsList=(List)context.getAttribute("goods"); goodsList.add(good); context.setAttribute("goods", goodsList); request.getRequestDispatcher("/gl").forward(request, response); } } package com.imooc.gim; public class Goods { private Integer goodsId; private String goodsName; private String goodsType; private float price; private String goodsRemark; public Goods(Integer goodsId, String goodsName, String goodsType, float price, String goodsRemark) { super(); this.goodsId = goodsId; this.goodsName = goodsName; this.goodsType = goodsType; this.price = price; this.goodsRemark = goodsRemark; } public Integer getGoodsId() { return goodsId; } public void setGoodsId(Integer goodsId) { this.goodsId = goodsId; } public String getGoodsName() { return goodsName; } public void setGoodsName(String goodsName) { this.goodsName = goodsName; } public String getgoodsType() { return goodsType; } public void setgoodsType(String goodsType) { this.goodsType = goodsType; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public String getGoodsRemark() { return goodsRemark; } public void setGoodsRemark(String goodsRemark) { this.goodsRemark = goodsRemark; } @Override public String toString() { return "Goods [goodsId=" + goodsId + ", goodsName=" + goodsName + ", goodsType=" + goodsType + ", price=" + price + ", goodsRemark=" + goodsRemark + "]"; } }
9
收起
正在回答
1回答
同学你好,测试过同学代码之后,并未复现空指针异常。但同学的代码中存在逻辑问题:
当判断用户输入的ID在集合中是否有对应商品的时候,应当是将集合完整遍历结束之后才能确定没有找到。而同学的代码,循环只会进行一次,无论是否找到都会被break结束循环。
修改后的代码如下图所示:
//定义标记变量,如果没有找到flag的值为true,找到则更改为false boolean flag = true; //遍历集合 for (int i = 0; i < goodsList.size(); i++) { //获取集合中i下标的Goods对象 Goods goods = (Goods)goodsList.get(i); //获取对象的id值 Integer gid = goods.getGoodsId(); //如果id和用户输入的id相同,则找到 //注意:Integer类型数据对比需要使用equals而不是== if(gid.equals(goodsId)) { System.out.println("商品id已查询到"); //将标记变量修改为false flag = false; } } //循环结束后,查看标记变量,判断是否 if(flag) System.out.println("商品id不存在");
如果同学依然出现空指针异常,建议将操作步骤和错误截图一并提供。
祝学习愉快~
java工程师2020版
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星