TODO java-web相关 servlet过滤器+监听器
servlet过滤器
定义:
过滤器是小型的web组件,它负责拦截请求和响应,以便查看、提供或以某种方式操作正在客户机和服务器之间交换的数据。
与过滤器相关的servlet共包含3个简单接口:Filter/Filter-Chain/FilterConfig.
要实现过滤器功能,必须先实现Filter接口。
与servlet类似,Filter也需要在web.xml中配置。
过滤器的使用:
1.在实际应用中,可能会遇到需要对某些IP进行访问限制,不让非法的IP访问应用系统,这是就需要用到过滤器进行限制。
当一个用户发出访问请求时,首先通过过滤器进行判断,如果用户的IP地址呗限制,就禁止访问,只有合法的IP才可以继续访问。
2.打印版权有效期
servlet监听器
主要用来对web应用进行监听和控制,增强web应用的时间处理能力。
servlet监听就是指一些特殊的servlet类,这些类可以监听web应用上下文信息,servlet会话信息、servlet请求信息。
cookie是一种在客户端保存信息的技术。
在servlet中,使用java.servlet.http.Cookie类来封装一个Cookie消息,在HttpServletResponse接口中定义了一个addCookie方法来向浏览器发送Cookie消息(也就是Cookie对象),在HttpServletRequest接口中定义了一个getCookies方法来读取浏览器发送的web服务器的所有cookie消息。
SaveCookie
response.setContentType("text/html;charset=UTF-8"); //添加临时Cookie对象 PrintWriter out = response.getWriter(); //建立超时时间为0的Cookie Cookie tempCookie = new Cookie("cookie","87654321"); cookie.setMaxAge(0); response.addCookie(cookie); String user = request.getParameter("user"); if(user!=null){ //建立永久cookie对象 cookie userCookie = new Cookie("user",user); userCookie.setMaxAge(60*60*24); userCookie.setPath("/"); //添加永久cookie对象 response.addCookie(userCookie); }
RequestDispatcher readCookie = getServletContext().getRequestDispatcher("/ReadCookie") readCookie.include(request,response);
ReadCookie
public class ReadCookie extends HttpServlet{ protected Cookie getCookieValue(Cookie[] cookies,String name){ if(cookies !=null){ for(Cookie c :cookies){ if(c.getName().equals(name)) return c; } } return null; }
public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //获取临时cookie Cookie tempCookie =getCookieValue(request.getCookies(),"temp"); if(tempCookie!=null) out.println("临时Cookie的值"+tempCookie.getValue()+"<br/>"); else out.println("临时cookie未设置!<br/>"); //获取超时时间为0的cookie Cookie cookie = getCookieValue(request.getCookies(),"cookie"); if(cookie!=null) out.println("cookie:"+cookie.getValue()+"<br/>"); else out.println("cookie已经被删除!<br/>"); //获取永久cookie Cookie userCookie = getCookieValue(request.getCookies(),"userCookie"); if(userCookie!=null) out.println("user:"+userCookie.getValue()); else out.println("user未设置"); } }
Session技术
session对象用来保存每个用户的用户信息和会话状态。
session对象有服务器端自动创建,可以跟踪每个用户的操作状态。
用户首次登陆系统是,服务器会自动给用户分配唯一表示的SessionID,可以用来区分开其他用户。相对Cookie,Session是存储在服务器端的会话,相对安全,而且其存储长度限制也比Cookie的存储长度限制扩大了。
通过Cookie跟踪Session;(尚不清楚什么原理)
//todo
通过URL跟踪Session;