一、servlet:
 1、servlet属于j2ee的组件,构建servlet的web project不需要导入项目框架jar包
 2、servlet的体系结构:
  在j2ee API中,提供给servlet的支持接口和基类都位于javax.servlet.*和javax.servlet.http.*(提供所有与http请求有关的API)两个包中
  servlet包中常使用的接口
   Interface ServletConfig
   Interface ServletContext
   Interface ServletRequest
   Interface ServletResponse
   Interface Servlet:此接口中提供的方法有init,getServletConfig,getServletInfo,destroy,service
      jqavax.servlet.Genericservlet(实现了servlet接口,实现了基本servlet功能,提供有service()方法)
      javax.servlet.http.HttpServlet(继承了Genericservlet类,可以处理http请求,提供的doGet()+doPost()和service()方法作用相同

3、实现servlet控制器的功能类需要继承HttpServlet类,并重写HttpServlet类中的方法
  public class TestServlet extends HttpServlet{
   public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
    String username=req.getParameter("username");//可以随意调用Request和Response方法
    String name="admin";
    String password="admin";
    System.out.println(name+"\t"+password);
   }
   public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
    this.doPost(req, resp);
    System.out.println("这是get提交方式");
   }
   通过上面的这种重写方式,可以避免因处理doGet或者doPost不同的提交方式而导致代码重复的问题
   或者采用重写service()方法,实际上,重写doGet()和doPost()方法,也是程序自动调用service()方法进行解析get或者post的提交方式:
   public void service(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
    String username=req.getParameter("username");//可以随意调用Request和Response方法
    String name="admin";
    String password="admin";
    System.out.println(name+"\t"+password);  
   }

servlet的生命周期:通过重写下面的两个方法(过滤器中的)可以了解servlet的生命周期:
   public void init(ServletConfig config)throws ServletException{
    //第一条请求到来时加载,可以将当前servlet的初始化配置以ServletConfig config类型传出来
    System.out.println("servlet初始化");
   }
   public void destroy(){------------------------------------->>//服务器停止时加载,是最后调用的方法
    System.out.println("servlet的销毁方法");
   }
 4、servlet中获得请求对象:
  application----ServletContext    ServletContext application=config.getServletContext();这是通过config获得的,也可以通过session获得
  session----HttpSession           HttpSession session=request.getSession();通过session获得
  request---HttpServletRequest,继承ServletRequest------------>>servlet,filter  listener等的所有请求都是这个类型的
  response---HttpServletResponse,继承ServletResponse---------->>servlet,filter  listener等的所有响应都是这个类型的
  config---ServletConfig ------------------>>获得初始化参数值          
  out----PrintWriter:PrintWriter out = response.getWriter();
  exception----Exception
  pageContext----javax.servlet.jsp.PageContext
  page----javax.servlet.jsp.JspPage
 5、servlet在web.xml中的配置:
  <!-- 配置servlet --> 
  <servlet>
   <servlet-name>LoginServlet</servlet-name>--------->>为此servlet定义的名称
   <servlet-class>net.cstp.servlet.LoginServlet</servlet-class>-------->>让容器tomcat加载相应的servlet类
   <1-- 可以设置初始化参数,在servlet初始化方法中通过ServletConfig config对象获得该初始化参数 -->
   <init-param>
    <param-name>name</param-name>
    <param-value>admin</param-value>
   </init-param>
   <init-param>
    <param-name>password</param-name>
    <param-value>123456</param-value>
   </init-param>
  </servlet>
  <servlet-mapping>
   <servlet-name>LoginServlet</servlet-name>---------->>为了找到匹配加载类(servlet控制器),与servlet节点中的name相同
   <url-pattern>/login</url-pattern>------------------>>servlet入口,与地址栏的url或者表单中action的url相对应,以/开头
  </servlet-mapping>
         
  <!-- 配置session的生命周期:单位分钟 -->
  <session-config>
   <session-timeout>20</session-timeout>
  </session-config>

二、filter:过滤器,j2ee组件
 1、filter的体系结构:位于javax.servlet.*包中
  FilterConfig:提供获得application对象的方法getServletContext() 以及初始化请求参数的方法getInitParameter(String name)
  FilterChain:提供向下传递请求的方法doFilter(ServletRequest request, ServletResponse response) 
  Filter:提供三个方法,filter初始化init()、销毁destroy() 、处理请求doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
 2、实现filter接口功能的方式:实现Filter接口,并重写Filter接口的三个方法
  public class Myfilter implements Filter {
   public void init(FilterConfig fConfig) throws ServletException {
    System.out.println("过滤器初始化成功");
   }
   public void destroy() {
    System.out.println("过滤器销毁的方法");
   }
   public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
    //获得能处理http请求的请求request和响应response对象
    HttpServletRequest request=(HttpServletRequest)req;
    HttpServletResponse response=(HttpServletResponse)resp;

String username=(String)request.getSession().getAttribute("username");
    if(username!=null){
     //调用FilterChain接口声明的变量chain作用:1.让请求沿着过滤器向下传递;2.起分割的作用:上处理请求,下处理响应
     System.out.println("处理的相关请求");
     chain.doFilter(request, response);
     System.out.println("处理的相关响应");
    }else{
     response.sendRedirect("../index.jsp");
    } 
   }

}
 3、filter在web.xml中的配置:
  <!-- 全部过滤 -->
   <filter>
   <filter-name>YourFilter</filter-name>
   <filter-class>net.cstp.filter.YourFilter</filter-class> 
  </filter>
  <filter-mapping>
   <filter-name>YourFilter</filter-name>
   <url-pattern>/*</url-pattern> 
  </filter-mapping>
  <!-- 选择性过滤 -->
  <filter-mapping>
   <filter-name>YourFilter</filter-name>
   <url-pattern>/update</url-pattern> 
  </filter-mapping>

三、Listener:监听器,j2ee组件
 1、Listener的体系结构,位于javax.servlet.*和javax.servlet.http.*:针对不同的作用域对象,提供相对应的实现接口,并且依据作用不同,区分不同功能的实现接口
  request对象:
   Interface ServletRequestListener:提供创建和销毁的方法
   Interface ServletRequestAttributeListener:对作用域中属性值添加、删除、替换的监测
  session对象:
   Interface HttpSessionListener,可以用于统计网站当前的在线人数
   Interface HttpSessionAttributeListener:绑定值 解除绑定
   Interface HttpSessionBindingListener
  application对象:
   Interface ServletContextListener:监听tomcat的启动或者或者销毁,也可以说当web项目被加载或者被销毁的时候,可以用于统计网站历史访问量
   Interface ServletContextAttributeListener
 2、自定义监听器:
  1)、实现ServletRequestListener接口:
   public class ValidateRequestListener implements ServletRequestListener {
       public void requestDestroyed(ServletRequestEvent event) {  
    System.out.println("监听器已经销毁");
       }
       public void requestInitialized(ServletRequestEvent  event) {
    System.out.println("监听器已经启动");
    ServletRequest req=event.getServletRequest();
    HttpServletRequest request=(HttpServletRequest)req;
    ....
       }
   }
  2)、实现ServletRequestAttributeListener接口:
   public class ValidateServletArributeRequest implements ServletRequestAttributeListener {
   //当把值添加到作用域中时,能够监测得到
   public void attributeAdded(ServletRequestAttributeEvent arg0) {
    System.out.println("向request作用域添加一个属性名"+arg0.getName()+"的值为:"+arg0.getValue()); 
   }
   //当把值从作用域中删除时,能够监测得到
   public void attributeRemoved(ServletRequestAttributeEvent arg0) {
    System.out.println("把值从作用域中删除了"+arg0.getName()+"的值为:"+arg0.getValue()); 
   }
   //当把作用域中的值替换时,能过监测得到
   public void attributeReplaced(ServletRequestAttributeEvent arg0) {
    System.out.println("获得被替换值为:"+arg0.getName()+"的值为:"+arg0.getValue());
    
    ServletRequest req=arg0.getServletRequest();
    HttpServletRequest request=(HttpServletRequest)req;
    String name=(String)request.getAttribute("name");
    System.out.println("获得替换后的值为:"+name); 
   }
  }
 3、listener在web.xml中的配置:用到哪个,添加哪个
  <listener>
   <listener-class>net.cstp.listener.ValidateRequestListener</listener-class>
  </listener>

<listener>
   <listener-class>net.cstp.listener.ValidateSessionListener</listener-class>
  </listener>
  <!-- 
  <listener>
   <listener-class>net.cstp.listener.ValidateApplicationListener</listener-class>
  </listener>
四、servlet、filter、listener的配置顺序与加载顺序:
 加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加 载 filter。但是配置顺序尽量与加载顺序一致,也方便管理
 web.xml 的加载顺序是:context- param -> listener -> filter -> servlet ,而同个类型之间的实际程序调用的时候的顺序是根据 对应的 mapping 的顺序进行调用的。

servlet、filter、listener继承的基类和获得作用域的方式的更多相关文章

  1. ServletContextInitializer添加 servlet filter listener

    ServletContextInitializer添加 servlet filter listener https://www.cnblogs.com/pomer-huang/p/9639322.ht ...

  2. SpringBoot学习笔记(6)----SpringBoot中使用Servlet,Filter,Listener的三种方式

    在一般的运用开发中Controller已经大部分都能够实现了,但是也不排除需要自己实现Servlet,Filter,Listener的方式,SpringBoot提供了三种实现方式. 1. 使用Bean ...

  3. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference

  4. C/C++ 多继承{虚基类,虚继承,构造顺序,析构顺序}

    C/C++:一个基类继承和多个基类继承的区别 1.对多个基类继承会出现类之间嵌套时出现的同名问题,如果同名变量或者函数出现不在同一层次,则底层派生隐藏外层比如继承基类的同名变量和函数,不会出现二义性, ...

  5. SpringBoot---注册Servlet,Filter,Listener

    1.概述 1.1.当使用  内嵌的Servlet容器(Tomcat.Jetty等)时,将Servlet,Filter,Listener  注册到Servlet容器的方法: 1.1.1.直接注册Bean ...

  6. servlet filter listener interceptor 知识点

    这篇文章主要介绍 servlet filter listener interceptor 之 知识点.博文主要从 概念,生命周期,使命介绍其区别.详情如下:   概念 生命周期 使命 servlet ...

  7. C++ | 继承(基类,父类,超类),(派生类,子类)

    转载:https://blog.csdn.net/Sherlock_Homles/article/details/82927515 文章参考:https://blog.csdn.net/war1111 ...

  8. C++//菱形继承 //俩个派生类继承同一个基类 //又有某个类同时继承俩个派生类 //成为 菱形继承 或者 钻石 继承//+解决

    1 //菱形继承 2 //俩个派生类继承同一个基类 3 //又有某个类同时继承俩个派生类 4 //成为 菱形继承 或者 钻石 继承 5 6 #include <iostream> 7 #i ...

  9. servlet/filter/listener/interceptor区别与联系

    转自:http://www.cnblogs.com/doit8791/p/4209442.html servlet.filter.listener是配置到web.xml中(web.xml 的加载顺序是 ...

随机推荐

  1. Connect the Campus (Uva 10397 Prim || Kruskal + 并查集)

    题意:给出n个点的坐标,要把n个点连通,使得总距离最小,可是有m对点已经连接,输入m,和m组a和b,表示a和b两点已经连接. 思路:两种做法.(1)用prim算法时,输入a,b.令mp[a][b]=0 ...

  2. VS链接数据库

    可以用VS链接数据库,并进行数据库操作.前提是安装了Sqlserver,活着连接线上的数据库服务器.

  3. Spring MVC 注解式

    1.注解式控制器简介 一.Spring2.5之前,我们都是通过实现Controller接口或其实现来定义我们的处理器类.已经@Deprecated.   二.Spring2.5引入注解式处理器支持,通 ...

  4. leetcode 10 Regular Expression Matching(简单正则表达式匹配)

    最近代码写的少了,而leetcode一直想做一个python,c/c++解题报告的专题,c/c++一直是我非常喜欢的,c语言编程练习的重要性体现在linux内核编程以及一些大公司算法上机的要求,pyt ...

  5. P2038 无线网络发射器选址

    题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...

  6. org.w3c.dom.Document 与org.dom4j.Document互转

    public static Document parse(org.w3c.dom.Document doc) throws Exception { if (doc == null) { return ...

  7. java command not found

    INSTALLATION PROCEDURE ON RASPBERRY PI The remaining steps should be performed directly on the conso ...

  8. GPT模式下ghost系统 安装方法

    GPT模式下ghost系统 安装方法 1.UEFI进入PE 2.使用diskgenius 软件 分区,选择GPT方式分区 3.使用CGI ghost 系统 文件到安装盘 4.UEFI修复:软件为 BC ...

  9. mescroll报错

    1.Cannot read property 'insertBefore' of null:说明你的容器id未找到,应确认你的容器id名与你NEW的容器名一致:

  10. 【Linux下权限控制之chmod与chown命令】

    chmod 用于配置文件/目录权限 命名格式:chmod [选项] 文件/目录名 . 权限类别: r 读取 可用数字4表示 w 写入 可用数字2表示 x 执行 可用数字1表示 . 归属类别: u 属主 ...