07-10-18学习心得

来源:互联网 发布:知乎 巅峰科比 编辑:程序博客网 时间:2024/05/29 00:34

一. 今天首先对以前做过的购物车案例一个典型的问题进行了分析.

    1.问题
 
    是在查看购物车的页面,对已选购的商品进行删除操作时,出现了最后一个商品删除不了的情况

然后再点击一次删除按钮,就会出现NullPointException.

    2.分析

    用HttpWatch工具查看,发现问题的原因.原来删除至剩最后一个商品时,再点删除按钮,访问的是上

次还剩一个商品的缓存页面.但实际最后的一个商品已经在后台被删除了.在页面上却显示还有一个商品

删不掉.再点一次删除就会出现NullPointException.

    3.解决
 
    解决方法可以在查看购物车的页面设置禁止缓存,问题解决.

二. Session 标签

    可以在JSP页面的头指令中写上Session,默认为true.(不写Session标签,那么默认为true)这样在JSP

页面中可以产生session隐含对象.可以直接调用session对象.

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" session="true"%>

    如果把session标签的值改为false,那么在JSP页面中就不会产生session的隐含对象.要用

request.getSession();方法得到session对象.request.getSession(true);方法的默认值也为true.

(有时在一个比较大的项目中.为了节省内存开销.不要创建一些无价值的HttpSession对象.需要限定系
统只能从一个Servlet程序开始.如:只有登录成功后才能开启与客户端的会话.这样就可以限定只有一个
Servlet可以用request.getSession()来创建Session对象,其他程序只能用request.getSession(false)
来获得Session对象.) 
   
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" session="false"%>

    注意:当在头指令当中使用session标签,session="false"后.那面在JSP页面中无论用
request.getSession()怎么设置.那么使用EL表达式都获取不到Session作用域中的值.


三. 用JavaBean+JSP写了一个猜数字游戏.

    在调试这个程序中,我发现了我写的程序中出现了一个BUG.我在JSP页面中定义了一个全局变量

count.用来显示玩家一共猜了几次.每次猜错count计数自加1.<%! count=0; %>
   
    这样做的结果是每次当服务器重启之后第一次运行该页面.可以正常进行游戏.而当结束这次会话.

重新开启一个浏览器时,count计数器的值是接着上次访问的次数再进行自加.而重启服务器,程序又能正

常运行.

    经过分析后发现是当我结束这次会话时,由于服务器还没有停止.所以我设置的count的值还保存在

服务器端.所以再次开启一个新的会话时,count的值会接着上次访问的次数再进行自加.
   
    解决方法是,把这个count属性写在JavaBean中,JSP页面就是用来显示数据.而且在JSP页面是定义这

样的用来计数的count全局变量是不安全的.