Filter的生命周期为:init()→doFilter()→destroy()

jvavee教材例子中的日志filter init()函初始化用FiterConfig直接访问配置信息

然后定义了销毁方法,我的理解是将将配置信息清除、

核心是doFilter();

先对用户请求执行预处理得到了对象ServletContext发来的请求,输出,

记录然后执行chain.doFilter(request,reponse)切换到对

服务器响应后执行的处理,输出提示信息。

init():这个方法在容器实例化过滤器时被调用,它主要用于使过滤器为处理做准备。
doFilter():这个方法用于处理请求和响应。此方法是Filter的核心

destroy():该方法由容器在销毁过滤器实例之前调用。

Filter可以视作是servlet的加强版,主要用作对用户的请求进行预处理,或者对返回给客户端的结果进行再次加工,是一个典型的链式处理模式。

r有着极其重要的地位和作用。它就好比是一个过滤器,位于服务器请求与响应的中间。
判断程序请求是否合法代码举例:

public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException{

HttpServletRequest req = (HttpServletRequest)var1;
HttpSession session = req.getSession();
String state = (String)session.getAttribute("state");
if(state.equals("1")){
var3.doFilter(var1,var2);
}else{
HttpServletResponse response = (HttpServletResponse)var2;
response.sendRedirect("Error_page.html");
}
}
}

 

 

Session:

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。

服务器端为了保存某些数据,或实现某些必要的功能,当用户访问服务器时,将数据临时保存在服务器端以供完成服务器端的其他某些功能。服务器需要保存的数据可以以cookie的方式存储在客户端,而session的功能就是将服务器需要保存的数据存储在服务端。例如账号登录记录的功能,可以以session的方式将登录状态保存在服务器端,这样当用户访问其他程序时,需要用到登录的地方,都可以从该用户的session中取出该用户的数据,为用户服务。

session的底层是基于cookie技术来实现的,当用户打开浏览器,去访问服务器的时候,服务器会为每个用户的浏览器创建一个会话对象(session对象),并且为每个session对象创建一个Jsessionid号。当session对象创建成功后,会以cookie的方式将这个Jsessionid号回写给浏览器,当用户再次进行访问服务器时,及带了具有Jsessionid号的cookie数据来一起访问服务器,服务器通过不同session的 Jsessionid号来找出与其相关联的session对象,通过不同的session对象来为不同的用户服务。

 

Async:

@WebServlet(urlPatterns={"/syncservlet"})
public class SyncServlet extends HttpServlet {
private MyRemoteResource resource;
@Override
public void init(ServletConfig config) {
resource = MyRemoteResource.create("config1=x,config2=y");
}
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
String param = request.getParameter("param");
String result = resource.process(param);
/* ... print to the response ... */
}
}

 

 

@WebServlet(urlPatterns={"/asyncservlet"}, asyncSupported=true)
public class AsyncServlet extends HttpServlet {
/* ... Same variables and init method as in SyncServlet ... */
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
final AsyncContext acontext = request.startAsync();
acontext.start(new Runnable() {
public void run() {
String param = acontext.getRequest().getParameter("param");
String result = resource.process(param);
HttpServletResponse response = acontext.getResponse();
/* ... print to the response ... */
acontext.complete();
}
}

前一个没有采用异步处理,后一个使用了异步处理

 

 
 
 
 
 

 

 posted on 2018-03-26 13:21  诡谲k  阅读(78)  评论(0编辑  收藏  举报