JSP提交form表单到servlet,结果servlet接收数据为空?

JavaIsTheBest 2017-03-29 10:36:38
问题:
初[学者学到一个点餐后台管理系统。后台要添加一道菜,有id,菜名,所属菜系id,价格,简介,图片等信息,在JSP页面作为一个form提交到FoodServlet保存到数据库,但是FoodServlet接收到的数据始终全部为null,不知道哪里不对,是我servlet接收数据的方法不对还是什么原因呢?请大神不吝赐教,多谢!

1,先看JSP表单部分
<form action="${pageContext.request.contextPath }/FoodServlet?method=addFood" method="post" enctype="multipart/form-data">
<!-- 本段标题(分段标题) -->
<div class="ItemBlock_Title">
<img width="4" height="7" border="0" src="${pageContext.request.contextPath }/sys/style/images/item_point.gif"> 菜品信息 
</div>
<!-- 本段表单字段 -->
<div class="ItemBlockBorder">
<div class="ItemBlock">
<div class="ItemBlock2">
<table cellpadding="0" cellspacing="0" class="mainForm">
<tr>
<td width="80px">菜系</td>
<td>
<select name="foodTypeId" style="width:80px">
<c:choose>

<%-- 判断从数据库中获取的菜系表是否为空 --%>
<c:when test="${not empty requestScope.foodTypeList }">
<%-- 在下拉框里显示所有菜系 --%>
<c:forEach var="foodType" items="${requestScope.foodTypeList }">
<option value="${foodType.id }" >
${foodType.typeName }
</option>
</c:forEach>
</c:when>

<%-- 如果菜系表为空 --%>
<c:otherwise>
<option value="0" >
无菜系
</option>
</c:otherwise>

</c:choose>
</select>
</tr>
<tr>
<td width="80px">菜名</td>
<td><input type="text" name="foodName" class="InputStyle" value=""/> *</td>
</tr>
<tr>
<td>价格</td>
<td><input type="text" name="price" class="InputStyle" value=""/> *</td>
</tr>
<tr>
<td>会员价格</td>
<td><input type="text" name="mprice" class="InputStyle" value=""/> *</td>
</tr>

<tr>
<td>简介</td>
<td><textarea name="remark" class="TextareaStyle"></textarea></td>
</tr>
<tr>
<td width="80px">菜品图片</td>
<td>

<input type="file" name="img"/> *
</td>
</tr>
</table>
</div>
</div>
</div>


<!-- 表单操作 -->
<div id="InputDetailBar">



<input type="submit" value="添加" class="FunctionButtonInput">



<a href="javascript:history.go(-1);" class="FunctionButton">返回</a>
</div>
</form>

2,提交到FoodServlet?method=addFood,根据参数method的值,doGet()调用addFood()方法.
如果我打印下面每一条数据,那么结果是:7条数据,只有3个null
// 3,添加菜品
private void addFood(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// 获取前台数据并封装到Food对象
Food food = new Food();

// 主键id
//food.setId(Integer.parseInt(request.getParameter("id")));

// 菜名
food.setFoodName(request.getParameter("foodName"));

// 外键,所属菜系id
//food.setFoodTypeId(Integer.parseInt(request.getParameter("foodTypeId")));

// 价格
food.setPrice(Double.parseDouble(request.getParameter("price")));

// 会员价
food.setMprice(Double.parseDouble(request.getParameter("mprice")));

// 菜品简介
food.setRemark(request.getParameter("remark"));

// 菜品图片
food.setImg(request.getParameter("img"));

// 添加到数据库
foodService.addFood(food);

// 回到菜品列表
uri = "/FoodServelet?method=listFood";

} catch (Exception e) {
e.printStackTrace();
uri = "/error/error.jsp";

}
request.getRequestDispatcher(uri).forward(request,response);
}

3,错误信息,servlet只贴了addFood()方法的代码,所以错误行数这上面不一致。
为什么会提示空指针异常呢?
java.lang.NullPointerException
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1838)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at cn.itcast.servlet.FoodServlet.addFood(FoodServlet.java:112)
at cn.itcast.servlet.FoodServlet.doGet(FoodServlet.java:48)
at cn.itcast.servlet.FoodServlet.doPost(FoodServlet.java:164)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
...全文
527 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻梦csdn 2017-03-30
  • 打赏
  • 举报
回复
你请求方式是post,servlet处理在doGet,那个doPost方法内有调用doGet方法吗? 建议你将代码放到doPost中处理
PrettyTutu 2017-03-30
  • 打赏
  • 举报
回复
首先,空指针异常是因为调用方法的那个对象为空 所以你应该看一下foodService
JavaIsTheBest 2017-03-30
  • 打赏
  • 举报
回复
引用 1 楼 pany1209 的回复:
使用ServletFileUpload解析request。。。。
我犯二了,有文件上传的表单我竟然还直接获取,忘了这一点了。刚才已经用fileupload解决了这个问题。谢谢! 也谢谢各位的回答!
75闪光雷 2017-03-30
  • 打赏
  • 举报
回复
你的addfood方法里 没用对象接取form提交的值啊 private void addFood(HttpServletRequest request, HttpServletResponse response,fooditem fooditem) 用fooditem 接form提交的值
李德胜1995 2017-03-29
  • 打赏
  • 举报
回复
使用ServletFileUpload解析request。。。。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧