Servlet

Posted kuotian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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协议相关的类

技术图片
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资源处理。
技术图片

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

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

7.监听器

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

常见的监听器:

  • ServletContextListener

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

  • ServletContextAttributeListener

  • HttpSessionAttributeListener

  • ServletRequestAttributeListener

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






以上是关于Servlet的主要内容,如果未能解决你的问题,请参考以下文章

servlet和filter的区别

Java基础——JSP

java---servlet与filter的联系与区别

servlet,filter,listener,intercepter区别

Tomcat根据JSP生成Servlet机制解析

servlet,过滤器,监听器,拦截器的区别