zoukankan      html  css  js  c++  java
  • Servlet

    1.概念

    Servlet:服务器端小程序,是专门提供的一种服务器处理请求和响应结果的标准(接口)。

    全称Java Servlet,是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。Servlet运行于支持Java应用的服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

    2.servlet的工作原理

    3.servlet的生命周期

    Servlet实例由谁产生?

    ​ Servlet容器(tomcat、jboss、jetty)

    Servlet实例什么时候产生?

    ​ 一种是第一次访问一个请求的时候,产生对应的Servlet对象,只会产生一次。
    ​ 另一种需要针对Servlet标签特殊配置,就会在Tomcat启动的时候,产生该实例。

    Servlet的入口:servlet配置完,怎么没有main方法呢?如何调用啊?

    答:Servlet实际上是tomcat容器生成的,调用init方法可以初始化。他有别于普通java的执行过程,普通java需要main方法;但是web项目由于是服务器控制的创建和销毁,所以servlet的访问也需要tomcat来控制。通过tomcat访问servlet的机制是通过使用http协议的URL来访问,所以servlet的配置完想要访问,必须通过URL来访问,所以没有main方法。

    4.servlet常用API

    Servlet API由两个软件包组成,这两个包都在tomcat的servlet-api.jar包中。

    • Javax.servlet包:跟http请求无关的一般性servlet

    • Javax.servlet.http包:跟http协议相关的类

    image-20200616152937116
    Servlet:

    ​ init()
    ​ service()
    ​ destroy()

    HttpServlet:

    常用接口: HttpServletRequest 接口 : 提供HTTP请求信息

    HttpServletResponse 接口 : 提供HTTP响应

    常用方法:doGet()

    ​ doPost()

    实际上还有一些方法是不常用的。例如:doDelete和doPut

    原因:就以我们最常用的Tomcat为例:tomcat的readonly参数默认是true,那也就是说默认情况下,是能接收“获取”的指令;然而delete指令是:通过http请求删除URL上的资源;put指令是:往服务器上传资源;不像get和post是专门用来获取资源的;所以不常用。

    ServletConfig

    常用方法:getInitParameter()

    ​ getInitParameterNames()

    其他常用方法:

    ServletRequest

    ServletRequestWrapper extends ServletRequest

    重写:getAttribute()

    ​ getParameter()

    获取request对象的参数

    Request.getParameter() 获取地址栏参数或表单字段值

    Request.getAttribute() 获取作用域的属性值

    5.Servlet示例程序

    public class MyFirstServlet extends HttpServlet {
    	@Override
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            System.out.println("我处理http的GET请求");
        }
    	@Override
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            System.out.println("我处理http的POST请求");
        }
    }
    

    web.xml配置

    <servlet>
        <servlet-name>myServlet</servlet-name>
        <servlet-class>com.edu.servlet.MyFirstServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>myServlet</servlet-name>
        <url-pattern>/firstServlet</url-pattern>
    </servlet-mapping>
    

    6.过滤器

    当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行检查或改动,并依次通过过滤器链,最后把请求/响应交给请求的Web资源处理。
    image-20200616162601155

    方法
    • init:初始化过滤器
    • destory:销毁过滤器
    • doFilter:继续向后执行FilterChain的剩余部分

    FilterChain是过滤器的链。以图为例我们可以认为:客户端请求到过滤器再到服务器、服务器响应从服务器到过滤器再到客户端;整个过程实际上是四个步骤,就是一条FilterChain。
    image-20200616162707990

    7.监听器

    监听器一般用来监听容器的创建和销毁。当然监听器也可以四大作用域对应的对象的创建和销毁,以及各自范围内参数的变化(包括:增、删、改)。

    常见的监听器:

    • ServletContextListener

      在日常工作当中比较常用,因为这个监听器在servlet初始化的时候,就能监听到;由于这个特征,我们常常用它来监听初始化状态,并且获取某些初始化的参数,例如:init-Parameter等。

    • ServletContextAttributeListener

    • HttpSessionAttributeListener

    • ServletRequestAttributeListener

      属性监听器:xxxAttributeListener格式的监听器,用来监听四个作用域属性的增、删、改操作何时发生。以此特性,我们可以用它来生成日志:某时某分,某用户在某范围内增/删/改了某数据等。

  • 相关阅读:
    Python接口自动化(四) https请求(SSLError解决办法)
    Python接口自动化(三)post请求四种传送正文方式
    Python接口自动化(二) 发送post请求的接口;发送post【data】;python中字典和json的区别
    requests高级用法
    HDU-1874-畅通工程续 (队列优化)
    Codeforces Round #387 (Div. 2) D. Winter Is Coming
    Codeforces Round #387 (Div. 2) C. Servers
    Codeforces Round #387 (Div. 2) B. Mammoth's Genome Decoding
    Codeforces Round #387 (Div. 2) A. Display Size
    Codeforces Round #386 (Div. 2) B. Decoding
  • 原文地址:https://www.cnblogs.com/kuotian/p/13141784.html
Copyright © 2011-2022 走看看