JavaWeb学习四、Servlet与Request、Response

七、Servlet

7.1 Servlet简介

  • Servlet是sun公司开发的一门动态web技术
  • Servlet是JavaEE规范之一。规范就是接口
  • Sun在这些API中提供了一个接口叫做:Servlet
  • Servlet是一个运行在服务器上的一个java小程序

JavaWeb三大组件

  • Servlet程序
  • Filter过滤器
  • Listener监听器

实现Servlet

  • 想要开发Servlet程序只需
    • 编写一个类,实现Servlet接口
    • 把开发好的java类部署到web服务器中

把实现了Servlet接口的Java程序叫做,Servlet

7.2 Servlet执行原理

  1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
  2. 查找web.xml文件,是否有对应的 标签体内容。
  3. 如果有,则在找到对应的 全类名
  4. tomcat会将字节码文件加载进内存,并且创建其对象
  5. 调用其方法

7.3 Servlet生命周期

  • Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

    • Servlet 通过调用 init () 方法进行初始化。
    • Servlet 调用 service() 方法来处理客户端的请求。
    • Servlet 通过调用 destroy() 方法终止(结束)。
    • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
  • init() 方法

    init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。

    public void init() throws ServletException {
      // 初始化代码...
    }
  • service() 方法

    service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

    每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。

    public void service(ServletRequest request, ServletResponse response) 
          throws ServletException, IOException{
    
    }
  • doget() 方法

    GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理。

    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        // Servlet 代码
    }
  • dopost() 方法

    POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。

    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        // Servlet 代码
    }
  • destroy() 方法

    destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

      public void destroy() {
        // 终止化代码...
      }

7.4 Servlet体系结构

Servlet -- 接口
|
GenericServlet -- 抽象类
|
HttpServlet -- 抽象类

  • GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
    • 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
  • HttpServlet:对http协议的一种封装,简化操作
    1. 定义类继承HttpServlet
    2. 复写doGet/doPost方法

一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。

7.5 ServletConfig类

Servlet 程序的配置信息类

Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。

Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象

作用

  • 可以获取 Servlet 程序的别名 servlet-name 的值
  • 获取初始化参数 init-param
  • 获取 ServletContext 对象

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- servlet标签: 给Tomcat配置servlet配置-->
    <servlet>
        <!-- servlet-name标签: Servlet 程序起一个别名(一般是类名)-->
        <servlet-name>HelloServlet</servlet-name>
        <!-- 一般为servlet程序的全类名-->
        <servlet-class>cn.imut.controller.HelloServlet</servlet-class>
    </servlet>

    <!-- servlet-mapping: 给servlet程序配置访问地址-->
    <servlet-mapping>
        <!-- servlet-name: 告诉服务器,我当前配置的地址给哪个servlet程序使用-->
        <servlet-name>HelloServlet</servlet-name>
        <!--
            url-pattern 标签配置访问地址
                / 斜杠在服务器解析时,表示地址为:http://ip:port/工程路径        
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

7.6 ServletContext类

介绍
  • ServletContext 是一个接口,它表示 Servlet 上下文对象

  • 一个 web 工程,只有一个 ServletContext 对象实例。

  • ServletContext 对象是一个域对象。

  • ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁

域对象

是可以像 Map 一样存取数据的对象,叫域对象。这里的域指的是存取数据的操作范围,整个 web 工程。

作用
  • 获取 web.xml 中配置的上下文参数 context-param

  • 获取当前的工程路径,格式:/工程路径

  • 获取工程部署后在服务器硬盘上的绝对路径

  • 像 Map 一样存取数据

八、Request与Response

8.1 HttpServletRequest 类

作用

每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。 然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的 信息。

常用方法

请求转发

请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。

8.2 HttpServletResponse 类

作用

HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个 Response 对象传 递给 Servlet 程序去使用。

HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息, 我们如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse 对象来进行设置

输出流

只能使用一个!

请求重定向

请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说。我给你一些地址。你去新地址访问。叫请求 重定向(因为之前的地址可能已经被废弃)。

8.3 Web中的路径

  • 相对路径

  • 绝对路径

在实际开发中,路径都使用绝对路径,而不简单的使用相对路径。

猜你喜欢

转载自www.cnblogs.com/yfyyy/p/12431876.html