Servlet基础知识

一、Servlet概念及设计步骤

Servlet

Servlet 是遵循 Java Servlet 规范的 Java 类,由 Web服务器 端的 JVM 执行,被用来 扩展 Web服务器 的功能,是在 Web服务器 端的符合“请求-响应”访问模式的应用 程序 , 可以接收来自 Web 浏览器或其他 HTTP 客户 程序 的请求,并将响应结果返回给客户端。 Servlet 通常用于在服务器端完成访问数据库、调用 JavaBean 等业务性操作。
Servlet类的继承关系如下:

java.lang.Object 
 javax.servlet.GenericServlet 
 javax.servlet.http.HttpServlet 
 org.apache.jasper.runtime.HttpJspBase 

Servlet 的核心方法是 service()。每当一个客户请求一个 HttpServlet 对象,该对 象的 service()方法就要被调用,而且系统会自动传递给这个 service()方法一个 ServletRequest(请求对象,即 JSP 中的 request)和一个 ServletResponse(响应对象, 即 JSP 中的 response)作为参数。

缺省的 service()服务功能是调用与 HTTP 请求 方法相应的 doGet()或 doPost()方法。如果 HTTP 请求方法为 GET,则缺省情况下调用 doGet(),如果 HTTP 请求方法为 POST,则缺省情况下就调用 doPost()。由于 service() 方法会自动调用与请求方法相对应的 doGet()或 doPost()方法,所以,在实际编程中,不 需要覆写 service()方法,只需覆写相应的 doGet()和 doPost()方法。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7TCTvJkp-1654696579658)(D:\typora\Picture\image-20220511222302512.png)]

设计步骤

  • 使用向导创建 Servlet 模板
    1、创建 Servlet 类,该类继承自 javax.servlet.http.HttpServlet。
    2、覆写 doGet()和 doPost()方法。
    3、在 web.xml 文件中注册 Servlet,这一注册工作也可由 Servlet 创建向导自动完成。

  • 设置 web.xml 注册信息

    Servlet/JSP Class Name、Servlet/JSP Name、Servlet/JSP Mapping URL 等文本框 信息将由 Servlet 生成向导自动在配置文件 web.xml 中进行注册。

    Servlet/JSP Mapping URL 设置了访问此 Servlet 时的相对 URL 映射路径,它决定了 Servlet 的访问路径,必须以斜杠“/”起始,这个起始的斜杠“/”表示项目的根路径。 要注意的是,这里的 Mapping URL 地址不代表 Servlet 的实际存储路径,只是表示访问这 个 Servlet 时使用的相对路径。

    在使用 Servlet 时,必须确认该 Servlet 已经在服务器的配置文件 web.xml 中做了相 应配置。

    web.xml 文件中的这段代码定义了 Sevlet 的名称及其对应的 Servlet 类路径。 这段代码定义了访问这个 Servlet 的 URL 映射路径。

    可直接通过映射路径访问

  • 业务逻辑设计

    一 般只要重写其中的一个方法,如重写 doGet()方法,而 doPost()方法直接调用 doGet()即 可。除非 Servlet 对于 GET 请求和 POST 请求的处理方式不一致。

  • 使用 Servlet

    JSP 页面访问 Servlet 时采用的是相对地址,最终生成的目标 URL 必须与 Servlet 所 固有的访问路径一致。而 Servlet 所固有的访问路径由 web.xml 中的配置 项决定。

二、Servlet 的生命周期

Servlet 的生命周期从 Web 服务器启动运行时开始,以后会不断处理来自浏览器的访 问请求,并将响应结果通过 Web 服务器返回给客户端,直到 Web 服务器停止运行,Servlet 才会被清除。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-smF4wHcS-1654696609891)(D:\typora\Picture\image-20220511224651546.png)]

Servlet 的生命周期主要有加载和初始化阶段、Servlet 服务阶段和 Servlet 结束阶 段。

  • 加载和初始化阶段

    当 Web 服务器启动时,Servlet 容器首先到发布目录的 WEB-INF 下查找配置文件 web.xml。这个配置文件中有相关的 Servlet 的配置信息,主要是定义 Servlet 和定义 Servlet 的代表这个应用在 Tomcat 中的访问路径 url 请求映射。

  • Servlet 服务阶段

    Servlet 被初始化以后,该 Servlet 实例就处于能响应请求的就绪状态,可以被服务 器用来服务于客户端的请求并生成响应。当 Web 服务器接受到浏览器的访问请求后,Web 服务器会调用该实例service(ServletRequest request, ServletResponse response) 方法,request 对象和 response 对象由服务器创建并传给 Servlet 实例。

  • Servlet 结束阶段

    Servlet 实例是由 Servlet 容器创建的,所以实例的销毁也是由容器来完成的。当 Servlet 容器不再需要某个 Servlet 实例时,容器会调用该 Servlet 的 destroy()方法, 在这个方法内,Servlet 会释放掉所有在 init()方法内申请的资源,如数据库连接等。一 旦 destroy()方法被调用,容器就不会再向该实例发送任何请求。如果容器需要再使用该 Servlet,它必须创建新的实例。destroy()方法完成后,容器必须释放 Servlet 实例以便 它能够被垃圾回收。

三、ServletAPI 层次结构

  • java.serclet 包

image-20220511224950589

interface Servlet:定义了所有 Servlet 必须实现的方法;

interface ServletResponse:此接口定义了由 Servlet 用于向客户端发送的响 应;

interface ServletRequest:定义了用于向 Servlet 容器传递客户请求的信息;

interface ServletContext:定义了 Servlet 与其运行环境通信的一系列方法;

Interface ServletConfig:此接口由 Servlet 引擎用在 Servlet 初始化时,向 Servlet 传递信息;

class GernericServlet:此类实现了 Servlet 接口,定义了一个通用的、与协 议无关的 Servlet;

class ServletInputStream:此类定义了一个输入流,用于由 Servlet 从中读取 客户请求的二进制数据;

class ServletOutputStream:此类定义了一个输出流,用于由 Servlet 向客户 端发送二进制数据。

  • java.servlet.http 包

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OFY1I3uP-1654696551873)(D:\typora\Picture\image-20220511225048826.png)]

    interface HttpServletRequest:继承了 ServletRequest 接口,为 HTTPServlet 提供请求信息。

    interface HttpServletResponse:继承了 ServletResponse 接口,为 HTTPServlet 输出响应信息提供支持。

    interface HttpSession:为维护 HTTP 用户的会话状态提供支持。

    interface HttpSessionBindingListener:使得某对象在加入一个会话或从会话 中删除时能够得到通知。

    interface HttpSessionContext:由 Servlet 2.1 定义,该对象在新版本已不 被支持。

    class Cookie:用在 Servlet 中使用 Cookie 技术

    class HttpServlet:定义了一个抽象类,继承 GenericServlet 抽象类,应被 HTTPServlet 继承。

    class HttpSessionBindingEvent : 定 义 了 一 种 对 象 , 当 某 一 个 实 现 了 HttpSessionBindingListener 接口的对象被加入会话或从会话中删除时,会收 到该类对象的一个句柄

    class HttpUtils:提供了一系列便于编写 HTTPServlet 的方法

四、主要 Servlet API 介绍

Javax.servlet.http 包是 javax.servlet 包的扩展,Servlet 主要应用于 HTTP 方面 编程,因此 javax.servlet.http 包内的很多类、接口都是在 javax.servlet 包相对应的 接口的基础上添加对 HTTP/1.1 协议的支持而成的。HttpServlet 类是其中最主要的类。

HttpServlet 类

HttpServlet 类是 Servlet 容器中最重要的一个类,其主要功能是处理 Servlet 请求 和回应处理结果。

HttpServlet 容器响应 Web 客户请求流程如下:
(1)Web 客户向 Servlet 容器发出 Http 请求;
(2)Servlet 容器解析 Web 客户的 Http 请求;
(3)Servlet 容器创建 HttpServletRequest 对象,在这个对象中封装 Http 请求信 息;
(4)Servlet 容器创建一个 HttpServletResponse 对象;
(5)Servlet 容器调用 HttpServlet 的 service 方法,把 HttpServletRequest 和 HttpServletResponse 对象作为 service 方法的参数传给 HttpServlet 对象;
(6)HttpServlet 调用 HttpServletRequest 的有关方法,获取 HTTP 请求信息; (7)HttpServlet 调用 HttpServletResponse 的有关方法,生成响应数据;
(8)Servlet 容器把 HttpServlet 的响应结果传给 Web 客户。

同时要覆盖 HttpServlet 的部分方法,如覆盖 doGet()或 doPost()方法。

public void doGet(HttpServletRequest request,HttpServletResponse response) 
 throws ServletException,IOException { ……} 
public void doPost(HttpServletRequest request,HttpServletResponse response) 
 throws ServletException,IOException { ……}

HttpServlet 类的主要 方法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B1O8x02i-1654696551874)(D:\typora\Picture\image-20220511225433758.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJwJmDTf-1654696551874)(D:\typora\Picture\image-20220511225502421.png)]

HttpServletRequest 接口

ServletRequest 接口主要有以下一些方法:

  • public Enumeration getAttributeNames() 该方法可以获取当前 HTTP 请求过 程中所有请求变量的名字。
  • public String getCharacterEncoding() 该方法用于获取客户端请求的字符编 码。
  • public String getContentType() 该方法用于获取 HTTP 请求的类型,返回值 是 MIME 类型的字符串,如 text/html。
  • public void setAttribute(String name, Object o) 该方法用于设定当前 HTTP 请求过程请求变量的值,第一个参数是请求变量的名称,第二个参数是请求变量的值,如果已经存在同名的请求变量,它的值将会被覆盖掉。
  • public Object getAttribute(String name) 该方法用于获取当前请求变量的 值,参数是请求变量的名称。
  • public ServletInputStream getInputStream() 该方法可以获取客户端的输入 流。
  • public String getParameter(String name) 该方法可以获取客户端通过 HTTP POST/GET 方式传递过来的参数的值,getParameter 方法的参数是客户端所传递 参数的名称,这些名称在 HTML 文件标记中使用 name 属性指定。
  • public String[] getParameterValues(String name) 如果客户端传递过来的 参数中,某个参数有多个值(如复选框),可通过该方法获得一个字符串数组。
  • public String getRemoteAddr() 该方法返回当前会话中客户端的 IP 地址。
  • public String getScheme() 该方法用于获取客户端发送请求的模式,返回值可 以是 HTTP、HTTPS、TFP 等。
  • public String getServerName() 该方法用于获取服务器的名称。
  • public int getServerPort() 该方法用于获取服务器响应请求的端口号。
  • HttpServletRequest 接口自然继承了 ServletRequest 接口中的所有方法。
    在 HttpServletRequest 接口在 ServletRequest 接口基础上增加了以下一些方 法:
  • public Cookie[] getCookies() 该方法可以获取当前会话过程中所有的存在 Cookie 对象,返回值是一个 Cookie 类型的数组。
  • public String getHeader(String name) 该方法可以获取特定的 HTTP Header 的值。
  • public String getMethod() 该方法返回客户端发送 HTTP 请求所有的方式,返 回值一般是 GET 或 POST 等。
  • public String getServletPath() 该方法获得当前 Servlet 程序的真实路径。

HttpServletResponse 接口

HttpServletResponse 接口继承自 ServletResponse 接口,ServletResponse 接口可 以发送 MIME 编码数据到客户端,服务器在 Servlet 程序初始化以后,会创建 ServletResponse 接口对象,作为参数传递给 service()方法。

主要方法:

  • public String getCharacterEncoding() 该方法可以获取向客户端发送数据的 MIME 编码类型,如 text/html 等。
  • public ServletOutputStream getOutputStream() 该方法返回 ServletOutputStream 对象,此对象可用于向客户端输出二进制数据。
  • public PrintWriter getWriter() 该方法可以打印各种数据类型到客户端。
  • public void setContentType( String type) 该方法指定向客户端发送内容的 类型,例句:setContentType(“text/html”);
  • HttpServletResponse 接口在 ServletResponse 接口基础上增加了以下一些方 法:
  • public void addcookie(Cookie cookie) 该方法的作用是添加一个 Cookie 对象到当前会话中。
  • public void sendRedirect(String location) 该方法的作用是使当前的页面重 定向到另一 URL。

ServletContext 接口

每个 Web 应用只有一个 Servletcontext 实例(Servlet 的环境对象),通过此接口实 例可以访问 Web 应用的所有资源,也可以用于不同的 Servlet 间的数据共享,但不能与其 它 Web 应用交换信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PQMigm1T-1654696551874)(D:\typora\Picture\image-20220511225932179.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mimv0DjA-1654696551875)(D:\typora\Picture\image-20220511225940765.png)]

HttpSession 接口

这个接口被 Servlet 引擎用来建立浏览 器客户端和 HTTP 会话两者之间的连接。这种连接一般会在多个请求中持续一段给定的时 间。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HEY71239-1654696551875)(D:\typora\Picture\image-20220511230010379.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MowuFViF-1654696551875)(D:\typora\Picture\image-20220511230018191.png)]

ServletConfig 类

在 Servlet 的初始化中,使用的参数就是 ServletConfig。init()方法将保存这个对 象,以便能够用方法 getServletConfig()返回。每一个 ServletConfig 对象对应着一个 唯一的 Servlet。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7tGq2WIF-1654696551876)(D:\typora\Picture\image-20220511230040424.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

czijin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值