文章目录
- 一、j2ee相关接口(下)
- 1. javax.servlet.http.Cookie
- 2. javax.servlet.http.HttpSession
- 3. java.util.EventListener
- 4. javax.servlet.ServletContextListener
- 5. javax.servlet.http.HttpSessionListener
- 6. javax.servlet.ServletRequestListener
- 7. javax.servlet.ServletContextAttributeListener
- 8. javax.servlet.http.HttpSessionAttributeListener
- 9. javax.servlet.ServletRequestAttributeListener
- 10. javax.servlet.http.HttpSessionBindingListener
- 11. javax.servlet.http.HttpSessionActivationListener
- 12. javax.servlet.Filter
- 二、web.xml配置
- 总结
一、j2ee相关接口(下)
1. javax.servlet.http.Cookie
- cookie会以响应头的形式发送给客户端:set-cookie:”name=zhengsan”
- cookie不能存储中文、它是浏览器缓存的一部分。
- cookie数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除cookie,有大小和个数的限制
- 会话级别cookie:不设置cookie会存储在浏览器的内存中,随浏览器关闭销毁
- 持久级别cookie:设置cookie信息会被持久化到浏览器的磁盘文件里,过期浏览器自动删除
- 创建CookieCookie cookie = new Cookie(name,value)
- 持久化时间cookie.setMaxAge(秒);
- 请求时cookie被携带路径
- cookie.setPath();不设置,cookie信息会在访问产生该cookie的web资源所在的路径都携带cookie信息,会覆盖
- cookie.setPath(“/WEB”);访问WEB应用中的任何资源都携带cookie
- cookie.setPath(“/WEB/cookieServlet”);访问WEB16中的cookieServlet时才携带cookie信息
- cookie.setPath(“/”);代表访问tomcat下所有的web项目的cookie信息
- 向客户端发送cookie response.addCookie(Cookie cookie);//如果路径和名称一样,两次add会覆盖
- 获得客户端的cookie Cookie[] cookies = request.getCookies();
- 获得cookie的键值 cookie.getName();cookie.getValue();
- 删除cookie
- Cookie cookie = new Cookie(“name”,“”);//将cookie的name设置与删除的cookie一致
- cookie.setPath(“/WEB16”);//将path设置成与要删除cookie的path一致
- cookie.setMaxAge(0);//设置时间是0;
- response.addCookie(cookie);
2. javax.servlet.http.HttpSession
- session将数据存储到服务器端,安全性相对好,增加服务器的压力,没有大小和个数限制
- session会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间。
- 所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID来辨别是哪个客户端
- 获得Session request.getSession([boolean create])
- 获得sessionid String getId()
- 设置session空闲时间 void setMaxInactiveInterval(int interval)
- 获得servletcontext ServletContext getServletContext()
- session域
- void setAttribute(String name,Object obj);
- Object getAttribute(String name);
- void removeAttribute(String name);
- 销毁session void invalidate();
3. java.util.EventListener
4. javax.servlet.ServletContextListener
- contextInitialized(ServlertContextEvent sre)
- contextDestroyed(ServlertContextEvent sre)
- ServletContext context = ServlertContextEvent.getServletContext();
- ①初始化:对象、数据、加载数据库驱动,连接池的初始化
- ②加载一些初始化的配置文件 — spring的配置文件
- ③任务调度----定时器----Timer/TimerTask
- 需要web.xml注册
5. javax.servlet.http.HttpSessionListener
- sessionCreated(HttpSessionEvent se);
- sessionDestroyed(HttpSessionEvent se);
- Session session = HttpSessionEvent.getSession();
- 需要web.xml注册
6. javax.servlet.ServletRequestListener
- requestInitialized(ServlertRequestEvent sre);
- requestDestroyed(ServlertRequestEvent sre);
- ServletContext context = ServlertRequestEvent.getServletContext();
- ServlertReque request = ServlertRequestEvent.getServletRequest();
- 需要web.xml注册
7. javax.servlet.ServletContextAttributeListener
- attributeAdded(ServletContextAttributeEvent event);
- attributeRemoved(ServletContextAttributeEvent event);
- attributeReplaced(ServletContextAttributeEvent event);
- String name = ServletContextAttributeEvent.getName()
- String value = ServletContextAttributeEvent.getValue()
- SevletContext context = ServletContextAttributeEvent.getSevletContext()
- 需要web.xml注册
8. javax.servlet.http.HttpSessionAttributeListener
- attributeAdded(HttpSessionBindingEvent event);
- attributeRemoved(HttpSessionBindingEvent event);
- attributeReplaced(HttpSessionBindingEvent event);
- String name = HttpSessionBindingEvent.getName()
- String value = HttpSessionBindingEvent.getValue()
- Session session = HttpSessionBindingEvent.getSession()
- 需要web.xml注册
9. javax.servlet.ServletRequestAttributeListener
- attributeAdded(ServletRequestAttributEvent srae);
- attributeRemoved(ServletRequestAttributEvent srae);
- attributeReplaced(ServletRequestAttributEvent srae);
- String name = ServletRequestAttributEvent.getName()
- String value = ServletRequestAttributEvent.getValue()
- SevletContext context = ServletRequestAttributEvent.getSevletContext()
- ServletRequest request = ServletRequestAttributEvent.getServletRequest()
- 需要web.xml注册
10. javax.servlet.http.HttpSessionBindingListener
- javaBean实现HttpSessionBindingListener接口,不需web.xml配置
- valueBound(HttpSessionBindingEvent event)绑定:对象被放到session域
- valueUnbound(HttpSessionBindingEvent event)解绑:对象从session域中移除
- String name = HttpSessionBindingEvent.getName()
- String value = HttpSessionBindingEvent.getValue()
- Session session = HttpSessionBindingEvent.getSession()
11. javax.servlet.http.HttpSessionActivationListener
- javaBean实现HttpSessionActivationListener接口,在META-INF创建context.xml文件,不需web.xml配置
- Session钝化:当服务器正常关闭时,还存活着的session(在设置时间内没有销毁) 会随着服务器的关闭被以文件(“SESSIONS.ser”)的形式存储在tomcat的work目录下
- Session活化:当服务器再次正常开启时,服务器会找到之前的“SESSIONS.ser” 文件,从中恢复之前保存起来的Session 对象
- sessionWillPassivate(HttpSessionEvent se); session钝化前执行(session从内存到硬盘)
- sessionDidActivate(HttpSessionEvent se); session活化后执行(session从硬盘到内存)
<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">钝化时间
<Store className="org.apache.catalina.session.FileStore" directory="test" />
配置钝化的对象文件在%tomcat%/work/catalina/localhost/项目名称/钝化文件名.ser(test)
</Manager>
</Context>
12. javax.servlet.Filter
- filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理,运行在服务器端的程序,先于与之相关的Servlet或jsp前运行,对请求资源过滤的功能,可以处理请求和响应
- 公共代码的提取
- 对request和response中的方法进行增强(装饰者模式/动态代理)
- 进行权限控制
- 自动登录,解决全局乱码,屏蔽非法文字,响应数据压缩
- 实现Filter接口并实现所有方法,配置web.xml
- init(Filterconfig filterconfig);过滤器初始化方法
- doFilter(ServletRequest,SevletResponse,FilterChain)每次访问这个资源都会执行该方法
- destory():销毁方法 关闭服务器时
- Filterconfig方法
- getFilterName返回
<filter-name>
元素的设置值 - getServletContext返回ServletContext对象的引用
- getInitParameter返回在web.xml中Filter初始化的参数值
- getInitParameterNames返回一个 Enumeration 集合对象
- getFilterName返回
- FilterChain方法
- 放行请求chain.doFilter(request, response);
二、web.xml配置
<servlet>
<servlet-name>QuickStartServlet</servlet-name>
<servlet-class>xxx.xxx</servlet-class>
<load-on-startup>3</load-on-startup>启动先后 正整数,越小被创建的优先级越高
<init-param>
<param-name>url</param-name>servlet的初始化参数
<param-value>xxx</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>QuickStartServlet</servlet-name>
完全匹配:访问的资源与配置的资源完全相同<url-pattern>/LoginServlet</url-pattern>
目录匹配:./当前路径 ../上一级 格式:/虚拟的目录../\* \*代表任意<url-pattern>/LoginServlet/\*</url-pattern>
扩展名匹配:\*.扩展名 <url-pattern>\*.jsp</url-pattern>
(默认)缺省Servlet:将url-pattern配置一个/,代表该servlet是缺省的servlet(默认访问的路径)
客户端地址添加web应用的名称,重定向,而服务器端的地址不需添加web应用的名称 转发
<url-pattern>/quickStartServlet</url-pattern>
</servlet-mapping>
主页设置
<welcome-file-list>
<welcome-file>login.html</welcome-file>
</welcome-file-list>
serveletcofig和servletContext的初始化参数
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
session时间
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.ithiema.web.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:url-pattern可以使用servlet-name替代,也可以混用
总结
本文介绍了j2ee规范下接口的api,如有问题欢迎私信和评论