编程日记12-06-28

今天的主要工作:

继续编写菜品后台管理系统:C:\Program Files\apache-tomcat-8.0.52\webapps\foodManager。

遇到的问题:

1:根据ID修改菜品时,菜品修改不掉。原因是使用Map删除元素搞错了。在使用foreach循环遍历时使用remove(object key)方法不能元素。如果此时删除元素,因为删除了当前元素,下一个元素的指针丢失了。可能会导致异常。

2:food-query-name.jsp请求发送到food-show.jsp页面,如果使用post请求,提示空指针异常。使用get方式则没问题。

3:FoodDelete.java这个Servlet将菜品删除后,使用response.sendRedirect("/food-query-all.jsp")重定向,但是报404错误。而是用转发:request.getRequestDispatcher("/food-query-all.jsp")则不会报错。

问题分析:

1:foreach模式,适用于不需要修改HashMap内元素的遍历,只需要获取元素的键/值的情况。

原本想可以先使用foreach循环找到该键,再在循环外删除元素。但是,foreach循环的循环变量必须在foreach中定义,提前定义无效。。所以改键就不能再循环外找到了。这时可以曲线救国。在循环外定义一个变量,在循环内定义一个循环变量。当匹配到键时,把循环变量赋值给循环外的变量,再使用循环外使用remove(Object key)删除就好了。

当然,如果在遍历过程中要删除元素,使用迭代器方式。例:

for (Iterator<Map.Entry<String, Integer>> it = myHashMap.entrySet().iterator(); it.hasNext();){
    Map.Entry<String, Integer> item = it.next();
    //... todo with item
    it.remove();
}

2:原因是使用post需要对request进行编码。在请求获取页面使用request.setCharacterEncoding("utf-8");

3:转发和重定向中的路径不同。“/"在java中表示绝对路径。在转发中使用"/"表示项目路径。重定向中使用"/"和JSP以及HTML中的效果相同,表示服务器路径。所以这里不要加/。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值