Servlet API概览

    Servlet API有一下四个java包:

    1,javax.servlet,其中包含定义servlet和servlet容器之间契约的类和接口。

    2,javax.servlet.http,其中包含定义HTTP servlet 和servlet容器之间契约的类和接口。

    3,javax.servlet.annotation,其中包含标注servlet,filter,listener的标注。它还为标注元件定义元数据。

    4,javax.servlet.descriptor,其中包含提供程序化登陆web应用程序的配置信息的类型。

  Servlet技术的核心是servlet,它是所有servlet类必须直接或间接实现的一个接口。在编写实现servlet和servlet类时,直接实现它,在扩展实现这个接口的类时,间接实现它。servlet接口定义了servlet与servlet容器之间的契约。这个契约归结起来就是,servlet容器将servlet类载入内存,并在servlet实例上调用具体的方法。在一个应用程序中,每种servlet类型只能有一个实例。

  用户请求致使servlet容器调用servlet的service方法,并传入一个servletRequest实例和一个servletResponse实例。ServletRequest中封装了当前的http请求,因此servlet开发人员不必解析和操作原始2的http数据。ServletResponse表示当前用户的HTTP响应,使得将响应发回给用户变得十分容易。对于每一个应用程序,servlet容器还会创建一个servletContext实例。这个对象封装了上下文(应用程序)的环境详情。每个上下文只有一个servletContext。每个servlet实例也都有一个封装Servlet配置的ServletConfig。

  Servlet生命周期

  servlet生命周期相关的方法有三个init(),servlice(),destory()

  init()方法,但该servlet第一次被请求时,servlet容器会调用该方法。这个方法在后续请求中不会再被调用。我们可以利用这个方法执行相应初始化工作。调用这个方法时,servlet容器会传入一个ServletConfig。一般来说,你会将ServletConfig赋给一个类级变量,因此这个对象可以通过servlet类的其他点来使用。

  service()方法,每当请求servlet时,servlet容器会调用这个方法。编写代码时,是假设servlet要在这里被请求,第一次请求servlet时,servlet容器调用init方法和service方法,后续的请求只调用service方法。

  destory()方法,当要销毁servlet时,servlet容器就会调用这个方法,当要卸载应用程序,或者要关闭servlet容器时,就会发生这种情况。一般在这个方法中编写清除代码。

  ps:servlet生命周期

  Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应。常用的tomcat、jboss、weblogic都是Servlet容器)中的,其生命周期是由容器来管理。Servlet生命周期通过java.servlet.Servlet接口中的init(),Service(),和destory()方法表示。Servlet的生命周期有四个阶段:加载并实例化、初始化、请求处理、销毁。 

步骤:

  1. 当Servlet容器负责加载和实例化Sevlet。当容器启动时,或者容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。当容器启动后,Servlet通过类加载器来加载Servlet类,加载完成后再new一个Servlet对象来完成实例化操作。

  2. 实例化操作完成后,会调用Init()方法,并传递实现ServletConfig接口的对象。在init()方法中,Servlet可以部署描述符中读取配置参数,或者执行任何其他一次性活动。在Servlet的整个生命周期类,init()方法只被调用一次。

  3.  当Servlet初始化后,容器就可以准备处理客户机请求了。当容器收到对这一Servlet的请求,就调用Servlet的service()方法,并把请求和响应对象作为参数传递。当并行的请求到来时,多个service()方法能够同时运行在独立的线程中。通过分析ServletRequest或者HttpServletRequest对象,service()方法处理用户的请求,并调用ServletResponse或者HttpServletResponse对象来响应。当servlet完成一次请求和相应后,会等待下一个请求或有服务器将其销毁。

  4. 一旦Servlet容器检测到一个Servlet要被卸载,这可能是因为要回收资源或者因为它正在被关闭,容器会在所有Servlet的service()线程之后,调用Servlet的destroy()方法。然后,Servlet就可以进行无用存储单元收集清理。这样Servlet对象就被销毁了。这四个阶段共同决定了Servlet的生命周期。 

 Servlet的配置

  常用jar包文件

  

      servlet常用的配置方式有两种,一种是通过注解的形式,一种是通过web.xml的方式

  1,通过注解的方式 

    @WebServlet(name = ("FormServlet"),urlPatterns = {"/formServlet"})
    public class FormServlet extends HttpServlet {}

    其中@WebServlet代表是通过注解的方式配置servlet其中name对应的值代表servlet的名称,urlPatterns代表的servlet的请求路径,注意请求路径前一定要加上“/”。如果需要初始化参数则通过    

    @WebServlet(name = "GenericServletDemoServlet",urlPatterns = {"/enericServletDemo"},
      initParams = {
        @WebInitParam(name = "admin",value = "admin"),
        @WebInitParam(name = "password",value = "admin")
    }
  )通过此种方式进行参数的初始化动作

  请求路径http://localhost:8080/xxx项目名称/formServlet

  2,通过web.xml的方式

  

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name> <servlet>
<servlet-name>myServletDemo</servlet-name>
<servlet-class>com.liu.day02.MyServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServletDemo</servlet-name>
<url-pattern>/myServletDemo</url-pattern>
</servlet-mapping> </web-app>

  请求路径http://localhost:8080/xxx项目名称/myServletDemo  

  其中servlet-name代表的是servlet的名称,servlet-class代表servlet对应的类,url-pattern表示映射路径。

  servlet配置中比较常用的是基于web的配置。

  (放在应用程序目录下的任何资源,用户只要输入资源url,都可以直接访问到。如果想让某一个资源可以被servlet访问,但不可以被用户访问,那么就要把它放在web-inf目录下。)

  ServletRequest

    对于每一个http请求,servlet容器都会创建一个servletRequest实例,并将它传给Servlet的service方法。servletRequest封装了关于这个请求的信息。

    servletRequest接口中有一些方法。

    public int getContentLength() 返回请求主体的字节数,如果不知道字节长度,这个方法就会返回-1

    public String getContentType()返回请求主体的MIME类型,如果不知道类型则返回null

    public String getProtocol();返回这个http请求的协议名称和版本。

    ......

  ServletResponse

    javax.servlet.servletResponse接口表示一个servlet响应。在调用servlet的service方法前,servlet容器首先创建一个servletResponse,并将它作为第二个参数传给service方法。servletResponse隐藏了向浏览器发送响应的复杂过程。

  常用方法有getWriter方法获取一个打印流对象用于向客户端发送响应。setContextType设置传输对象类型

  其余的常见方法请参考servlet相关api。

  servletConfig

  当servlet容器初始化servlet时,servlet容器会给servlet的init方法传入一个servletconfig。servletconfig封装可以通过@webservlet或者部署描述符传给servlet的配置信息。这样传入的每一条信息就叫一个初始参数,一个初始参数有key和value两个元件。

  servletContext

  servletContext表示servlet应用程序。每个web应用程序只有一个上下文。在将一个应用程序同时部署到多个容器的分布式环境中,每台java虚拟机上的web应用都会有一个ServletContext对象。

  HttpServlet

  HttpServlet类覆盖了javax.servlet.GenericServlet类。使用HttpServlet时,还要借助分别代表Servlet请求和Servlet响应的HttpServletRequest和HttpServletResponse对象。HttpServletRequest接口扩展javax.servlet.ServletRequest,HttpServletResponse扩展javax.servlet.ServletResponse.

jsp/servlet学习二之servlet详解的更多相关文章

  1. Tomcat学习(二)------Tomcat原理详解及请求过程

    Tomcat: Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的Servlet容器. Tomcat ...

  2. Servlet技术——request、respone详解

    Servlet之request.respone详解 Request (一) 概述 request是Servlet.service()方法的一个参数,在客户端发出每个请求时,服务器都会创建一个reque ...

  3. Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

    [Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.And ...

  4. Shell学习之Bash变量详解(二)

    Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...

  5. HTTPD之二————HTTPD服务详解————httpd的配置文件常见设置

    HTTPD之二----HTTPD服务详解----httpd的配置文件常见设置 HTTP服务器应用 http服务器程序 httpd apache nginx lighttpd 应用程序服务器 IIS,a ...

  6. Asp.Net MVC学习总结之过滤器详解(转载)

    来源:http://www.php.cn/csharp-article-359736.html   一.过滤器简介 1.1.理解什么是过滤器 1.过滤器(Filters)就是向请求处理管道中注入额外的 ...

  7. [深入学习Web安全](5)详解MySQL注射

    [深入学习Web安全](5)详解MySQL注射 0x00 目录 0x00 目录 0x01 MySQL注射的简单介绍 0x02 对于information_schema库的研究 0x03 注射第一步—— ...

  8. 数据结构图文解析之:二叉堆详解及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  9. Java进阶(三十二) HttpClient使用详解

    Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...

随机推荐

  1. javascript 缩写技巧

    19种JS高(炫)效(技)缩写法 https://segmentfault.com/a/1190000011229633

  2. python 中的 list dict 与 set 的关系

    转自: http://www.cnblogs.com/soaringEveryday/p/5044007.html list arraylist 实现(数组) List 通过内置的 append()方 ...

  3. Dubbo 分布式服务框架入门

    要想了解 Dubbo 是什么,我们不防先了解它有什么用.使用场景:比如我想开发一个网上商城项目,这个网上商城呢,比较复杂,分为 pc 端 web 管理后台,微信端销售公众号,那么我们分成四个项目,pc ...

  4. BASE64和图片之间的互相转换

    package com.test.demo; import java.io.FileInputStream; import java.io.FileOutputStream; import java. ...

  5. MSSQL:查看所有触发器信息的命令

    转自:http://www.2cto.com/database/201307/228708.html 编写程序,有时或为了偷懒,或为更简单地实现所需功能,使用了触发器.这可是把双刃剑,用得不好,程序出 ...

  6. LeetCode 12 - 整数转罗马数字 - [简单模拟]

    题目链接:https://leetcode-cn.com/problems/integer-to-roman/ 题解: 把 $1,4,5,9,10,40,50, \cdots, 900, 1000$ ...

  7. HomeBrew及HomeBrew Cask的简介和使用

    前言: 最近在Mac终端上安装SVN时用到了HomeBrew工具,虽然常用,但平时没有过多了解,特翻阅了资料总结一下,以便遗忘. 目录结构: 1. 什么是HomeBrew 2. HomeBrew的主要 ...

  8. ng2-table

    [转]https://github.com/valor-software/ng2-table  demo:http://valor-software.com/ng2-table/ ng2-table ...

  9. Apktool反编译apk资源文件

    Android开发过程中,如何查看已经打包的APK内部xml呢,google下找到了apktool这个工具, apktool项目现在已经迁移到了github:apktool 目前最新版本2.2.2,如 ...

  10. luogu3830 [SHOI2012]随机树

    传送门:洛谷 题目大意:对于一个只有一个节点的二叉树,一次操作随机将这棵树的叶节点的下方增加两个节点.$n-1$次操作后变为$n$个叶节点的二叉树.求:(1)叶节点平均深度的期望值(2)树深度的数学期 ...