zoukankan      html  css  js  c++  java
  • javaWeb三大核心技术笔记

    Servlet

    1) 客户端发送请求至服务器端;
    2) 服务器将请求信息发送至 Servlet;
    3) Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
    4) 服务器将响应返回给客户端。
    在 Web 应用程序中,一个 Servlet 在一个时刻可能被多个用户同时访问。这时 Web 容器将为每个用户创建一个线程来执行 Servlet。如果 Servlet 不涉及共享资源的问题,不必关心多线程问题。但如果 Servlet 需要共享资源,需要保证 Servlet 是线程安全的。
    最新版本3.1,为了简化开发流程,Servlet 3.0 引入了注解(annotation),这使得 web 部署描述符 web.xml 不再是必须的选择。

    Filter

    Filter实现了javax.servlet.Filter接口,因此一定要实现javax.servlet包的Filter接口的三个方法init()、doFilter()、destroy(),空实现也行。

    在启动服务器时加载。随你的web应用启动而启动的,只初始化一次,只有当你的web应用停止或重新部署的时候才销毁。

    不像Servlet,它不能产生请求或者响应,它只是修改 对某一资源的请求,或者修改对某一资源的响应。或者成为请求的预处理,响应的后处理

    Listenner

    输入url,先经过过滤器,然后是servlet。

    Servlet,Filter都是针对url之类的,而Listener是针对对象的操作的

    Listenner 也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。

    web.xml 的加载顺序是:context-param -> listener -> filter -> servlet 

    下面是一个日志过滤器的实现

    public class LogFilter implements Filter 
    {
    //FilterConfig可用于访问Filter的配置信息
    private FilterConfig config;
    //实现初始化方法
    public void init(FilterConfig config)
    {
    this.config = config; 
    }
    //实现销毁方法
    public void destroy()
    {
    this.config = null; 
    }
    //执行过滤的核心方法
    public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain)throws IOException,ServletException
    {
    //---------下面代码用于对用户请求执行预处理---------
    //获取ServletContext对象,用于记录日志
    ServletContext context = this.config.getServletContext(); 
    long before = System.currentTimeMillis();
    System.out.println("开始过滤...");
    //将请求转换成HttpServletRequest请求
    HttpServletRequest hrequest = (HttpServletRequest)request;
    //记录日志
    context.log("Filter已经截获到用户的请求地址: " + hrequest.getServletPath());
    //Filter只是链式处理,请求依然放行到目的地址
    chain.doFilter(request, response); 
    //---------下面代码用于对服务器响应执行后处理---------
    long after = System.currentTimeMillis();
    //记录日志
    context.log("过滤结束");
    //再次记录日志
    context.log("请求被定位到" + hrequest.getRequestURI() + "所花的时间为: " + (after - before)); 
    }
    }
  • 相关阅读:
    游标cursor
    SQL: EXISTS
    LeetCode Reverse Integer
    LeetCode Same Tree
    LeetCode Maximum Depth of Binary Tree
    LeetCode 3Sum Closest
    LeetCode Linked List Cycle
    LeetCode Best Time to Buy and Sell Stock II
    LeetCode Balanced Binary Tree
    LeetCode Validate Binary Search Tree
  • 原文地址:https://www.cnblogs.com/scmath/p/11185542.html
Copyright © 2011-2022 走看看