标签:rac spl pos store 工作 怎么 eve 功能 工程项目
首发日期:2018-07-15
1.监听域对象的创建与销毁:
2.监听三个域的数据的创建
3.监听一个javabean在session域的存值的变化【这些监听器不需要在web.xml中配置】【由于它要有javabean实现对应接口采用功能。但面对的对象是session,换了一个session后,并且这个session没有那种数据,那么是不会有响应的】
题外话:什么是钝化和活化,以及怎么配置?
活化是指数据从硬盘到内存的过程;钝化是指数据从内存到硬盘的过程。
由于数据要使用,所以数据在内存中没有什么问题。但为什么需要钝化呢?这是因为内存是有限的,一些很久不用的数据不应该占用可贵的内存资源。
数据默认是内存中的,钝化需要进行配置(在tomcat里面 conf/context.xml 里面配置或在conf/Catalina/localhost/context.xml 配置或者在自己的web工程项目中的 META-INF/context.xml):【钝化的配置还有更多参数,这里不做详细讲解。有兴趣自查。】
<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1" maxActiveSessions="1">
<Store className="org.apache.catalina.session.FileStore" directory="session"/>
</Manager>
</Context>钝化已经配置好了,但如果想把数据重新取出来,bean必须实现Serializable.这样才能活化成功
实现HttpSessionBindingListener接口的例子:
package work.domain; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; public class User implements HttpSessionBindingListener { private int age; private String name; private String gender; public User(int age, String name, String gender) { super(); this.age = age; this.name = name; this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public void valueBound(HttpSessionBindingEvent arg0) { System.out.println("bean数据被绑定了!"); } @Override public void valueUnbound(HttpSessionBindingEvent arg0) { System.out.println("bean数据被解绑了"); } }
实现HttpSessionActivationListener接口的例子:
package work.domain; import java.io.Serializable; import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionEvent; public class Person implements HttpSessionActivationListener,Serializable { private int age; private String name; private String gender; public Person(int age, String name, String gender) { super(); this.age = age; this.name = name; this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public void sessionDidActivate(HttpSessionEvent arg0) { System.out.println("数据被活化了!"); } @Override public void sessionWillPassivate(HttpSessionEvent arg0) { System.out.println("数据被钝化了!"); } }
1.定义一个类, 实现Filter接口(是servlet包中的Filter)
package work.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class MyFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("证明一下,你经过了过滤器!"); chain.doFilter(request, response);//这一步是放行! } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
2.在web.xml中配置过滤器:基本上与servlet的配置没什么区别,url-pattern也是一样的用法。
利用过滤器来统一请求数据的编码:
1.一般来说,对于post请求中的中文数据问题,可以使用request.setCharacterEncoding来解决,但如果每一个请求交给一个servlet来处理的话,就会在很多个servlet中加上这一个重复多次的代码(当然实际使用中,不会有那么多servlet,会利用一些手段将多个功能汇集到一个servlet中)
2.所以为了处理n多个请求的编码问题(这里只演示一个),可以使用过滤器来统一处理。
package work.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req=(HttpServletRequest)request; HttpServletResponse resp=(HttpServletResponse)response; String method = req.getMethod(); if("POST".equals(method)) { request.setCharacterEncoding("utf-8"); chain.doFilter(req, resp);//这一步是放行! } //简单演示起见,不对get处理,tomcat8已经不需要了 } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
标签:rac spl pos store 工作 怎么 eve 功能 工程项目
原文地址:https://www.cnblogs.com/progor/p/9311580.html