1. 什么是cookie
最早由Netscape社区发展的一种机制.目前cookie已经成为标准,所有的主浏览器IE,Netscape,Firefox,Ppera等都支持cookie.
2.cookie的原理
使用Cookie创建cookie对象:
Cookie color = new Cookie(“color”,”red”);
在响应中加入cookie:
response.addCookie(color);
通过request取回cookie
Cookie[] cookie = request.getCookies();
示例:记录用户访问次数
Cookie[] c = request.getCookies();
int count = 1;
if(c!=null) {
for(int i=0;i
Cookie 的maxAge决定这Cookie的有效期,单位为秒(Second).Cookie中同构getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性
如果maxAge属性为正数,则表示该Cookie会在maxAge妙后自动失效,浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中.无论客户关闭了浏览器还是电脑, 只要换在maxAge妙之前,登录网站时该Cookie仍然有,
Cookie永远有效代码:
Cookie cookie-new Cookie(“Username”,”hello”);//新建一个Cookie
Cookie.setMaxAge(Integer.MAX-VALUE);//设置生命周期
response.addCookie(cookie);//输出到客户端
具体来说Cookie机制是采用的是在客户端保持状态的方式,它是在客户端的会话状态的储存机制,它需要用户打开客户端的cookie支持
获取session对象
HttpSession session = request.getSession();
通过session存取数据
Session.setAttribute(“name”,value)
Session.getAttribute(“name”)
1、在Session对象中保存数据,可以传递给同一个系统的其他Servlet或者是页面。
2、不同的客户端同时访问时,根据sessionId来自动获取Session中保存的数据。
3、HttpSession对象中只能保存Object类型的数据。
Session原理是通过容器在调用session方法时自动通过cookie写入sessionid的方法来控制
Cookie默认的有效期是浏览器被关闭之前 当前session有效期是当前session的有效期是当 前这一次访问
Session数据存放在容器中,容器无监听浏览器的关闭会通过web.xml
配置
1
来决定定时清除长期未访问的session数据
Session.invalidate();
Session.setMaxIncativeInterval(Interva);
连接器链:
如果某些资源被多个过滤器拦截形成了链,如果资源被访问时这个连中的所有过滤器都会被依次执行,如果任何一个过滤器没有通过链条被中断链条后的所有过滤器都不会执行
接口:javax.servlet.Filter
所有起到过滤器功能的类要实现此接口
接口:javax.servlet.FilterChain
将各个过滤器连接起来组成过滤器链
接口:javax.servlet.FilterConfig
处理过滤器配置相关信息
创建filter
第一步:创建一个类,实现javax.servlet.Filter接口
第二步:配置web.xml文件
Web.xml中文件的配置
Filter定义:名字, Filter类
Filter映射:要处理哪类资源
charencode
servlet.CharEncodingFilter
charencode
/*
MyFilter1
cn.servlet.lesson4.MyFilter1
MyFilter1
/lesson03/*
/*
* 配置了拦截某些资源 这些资源都别进入doFilter
* 方法决定了资源是否能够通过该过滤器
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//调用该方法
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse resp=(HttpServletResponse)response;
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
String url=req.getRequestURI();
System.out.println(url);
//如果访问了file就通过访问了private
if(!url.contains("private")){
chain.doFilter(request, response);
}
}
拦截器的拦截顺序:由定义的先后顺序
事件是java中的一个重要的概念,指某个代码运行过程中的一个状态,如:HttpSession创建,属性值的改变等都可以用事件来描述。
事件:java.util.EventObject
getSource()-Object
事件侦听程序:
(标志)接口:java.util.EventListener
实现listener接口
事件源:
注册侦听程序
触发事件侦听程序
生成事件对象
调用已注册的侦听程序,处理事件
事件定义三要素:
1.事件源
2.动作
3.触发回调(触发动作后调用什么东西οnclick=”回调”)
事件源:HttpServletRequest,HttpSession,ServletContext
动作:生命周期阶段对象产生销毁,数据变化(setAttribute,remaveAttrihute)回调
cn.servlet.lesson4.RequestCycleListener
Request的生命周期:
生命周期短,浏览器发起请求产生request对响应后request被销毁
servletcontext的生命周期:
伴随着应用的发布(产生)和关闭(销毁)
所有的servlet都需要共存数据需要保留很长时间,写入servletContext数据是有状态的,不同的用户拥有不同的数据写用Httpsession传递的参数或者请求转发跳转数据传递写入httpservletRequest