javax.servlet.http.HttpServletResponse 修改Cookie的困惑
2013-05-27 16:34
381 查看
在学习java王者java web整合开发王者归来源代码的Session那一章遇到了问题,希望可以帮助我解惑。
一、问题描述:
session那一章有一个jsp的页面的功能是通过cookie信息存储用户的用户名和登录次数的信息,为了描述简单,假设用户名和登录次数都已经保留在cookie中。
每次刷新页面的时候:都会通过request.getCookies();得到所有的cookie,然后遍历找到对应的用户名username和登录次数visitTimes的值,visitTimes++ 之后,通过
Cookie visitTimesCookie = new Cookie("visitTimes", Integer.toString(visitTimes));
response.addCookie(visitTimesCookie);
这两句代码实现把cookie信息,重新写到客户端上。
<%
request.setCharacterEncoding("UTF-8");
String username = "";
int visitTimes = 0;
// 所有的 cookie
Cookie[] cookies = request.getCookies();
// 遍历所有的 Cookie 寻找 用户帐号信息与登录次数信息
for(int i=0; cookies!=null&&i<cookies.length; i++){
Cookie cookie = cookies[i];
if("username".equals(cookie.getName())){
username = cookie.getValue();
}
else if("visitTimes".equals(cookie.getName())){
visitTimes = Integer.parseInt(cookie.getValue());
cookie.setValue("" + ++visitTimes);
}
}
// 如果没有找到 Cookie 中保存的用户名,则转到登录界面
if(username == null || username.trim().equals("")){
throw new Exception("您还没有登录。请先登录");
}
// 修改 Cookie,更新用户的访问次数
Cookie visitTimesCookie = new Cookie("visitTimes", Integer.toString(visitTimes));
response.addCookie(visitTimesCookie);
%>
2我的问题是:
首先cookie是key-value的属性对,上面第一句重新实例化了一个登录次数的cookie对象,然后在调用response.addCookie(visitTimesCookie);把这个新的 登录次数的cookie对象放到客户端。对于这个操作,我认为它的执行流程应该是这个样:
当addCookie(visitTimesCookie)时首先检查visitTimesCookie的name是否已经存在了,如果存在则替换value,如果不错在,则直接添加到相应的存储结构。
我想问的问题是:
1这个addCookie的存储实现到底是怎么样的?
2response对象保存所有cookie数据结构到底是什么(hashtable?hashmap?)?
三求解问题的过程:
于是我想查看相关源代码,找到了myEclipse依赖的javaee.jar,发现找不到源代码,去jdk中查找javax下的源代码也没有发现servlet相关的包,后来去网上查了一查才发现javaee这部分只是规范,具体实现要看具体情况比如说tomcat就有实现的,于是找到了api的定义 http://docs.oracle.com/javaee/6/api/ 发现
javax.servlet.http Interface HttpServletResponse
- All Superinterfaces:
- ServletResponse
- All Known Implementing Classes:
- HttpServletResponseWrapper
相关文章推荐
- Response(javax.servlet.http.HttpServletResponse)对象的作用
- javax.servlet.http.HttpServletResponse下爆红线
- HttpServletRequest和HttpServletResponse实现登录(附乱码处理代码)(2017.9.28第一次修改版)
- javax.servlet.http.HttpServletResponse接口(HTTP版本)
- java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
- JavaWeb开发知识总结(HttpServletRequest,HttpServletResponse)
- Servlet 3 HttpServletRequest HttpServletResponse 验证码图片 form表单
- ServletRequest,HttpServletRequest ServletResponse,HttpServletResponse的区别:
- httpservletrequest和httpservletresponse的理解
- HttpServletRequest和HttpServletResponse详解
- groovy servlet java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
- Maven项目下HttpServletRequest 或 HttpServletResponse需引用的依赖包
- Jsp页面javax.servlet.http.HttpServlet问题解决方案
- “The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit” 的我之解決辦法
- java基础——HttpServletResponse和HttpServletRequest
- HttpServletRequest和HttpServletResponse详解
- 浅谈ServletContext,HttpServletRequest,HttpServletResponse,HttpSession的获取
- HttpServletResponse和HttpServletRequest详解
- 利用Filter及HttpServletResponseWrapper修改Response的内容(内容更改利用正则表达式)
- myeclipse中关于The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path