Servlet具体实现

1.1 Servlet基本概念

1.1.1 什么是Servlet

本质上就是一个Java类,运行在Tomcat中,由Tomcat来调用。作用:生成一个网页,输出到浏览器。

1.1.2 Servlet与Java程序区别

  • Servlet本质上就是一个Java类
  • 所有的Servlet必须要实现javax.servlet.Servlet接口
  • 运行在Tomcat容器中,用于接收浏览器的请求,并且做出响应。

1.2 实现Servlet

1.2.1 Servlet2.5的方式开发

创建一个类继承于HttpServlet类,它已经实现了Servlet接口。
重写doGet或doPost方法,用来处理浏览器发送的get或post请求。
配置web/WEB-INF/web.xml文件,配置servlet的访问地址。
  1. 编写一个普通类,实现Servlet接口,直接继承HttpServlet。
package cn.guardwhy;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class HelloServletDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.设置响应内容的类型和编码
        response.setContentType("text/html;charset=utf-8");
        // 2.得到打印流
        PrintWriter out = response.getWriter();
        // 3.向浏览器输出文本
        out.print("<h3>Hello, Servlet!!!<h3>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // super.doPost(req, resp);
    }

}

2.编写Servlet的映射

<?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-->
    <servlet>
        <!--servlet的名字-->
        <servlet-name>demo01</servlet-name>
        <!--配置servlet的类全名-->
        <servlet-class>cn.guardwhy.HelloServletDemo01</servlet-class>
    </servlet>
    <!--配置访问地址-->
    <servlet-mapping>
        <servlet-name>demo01</servlet-name>
        <!--访问地址,必须以/开头 /相当于是web这个根目录 -->
        <url-pattern>/demo01</url-pattern>
    </servlet-mapping>
</web-app>

1.2.2 访问流程

1.2.3 Servlet3.0的方式开发

  1. 创建Servlet类,使用注解@WebServlet,无需配置web.xml。
@WebServlet注解 说明
name Servlet的名字,相当于<servlet-name>
urlPatterns 配置访问地址,相当于<url-pattern>
可以配置多个访问地址
value 就是访问地址,与urlPatterns是一样的。
如果只有一个value属性设置,value的名字可以省略

2.编写一个普通类,实现Servlet接口

package cn.guardwhy;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/demo02")
public class HelloServletDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.设置响应内容的类型和编码
        response.setContentType("text/html;charset=utf-8");
        // 2.得到打印流
        PrintWriter out = response.getWriter();
        // 3.向浏览器输出文本
        out.print("<h3>Hello, Servlet 3.0<h3>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // super.doPost(req, resp);
    }
}

执行结果

1.3 Servlet继承和实现

1.3.1 Servlet接口

基本概念

javax.servlet.Servlet接口用于定义所有servlet必须实现的方法。

常用的方法

方法声明 作用
void init(ServletConfig config) 由servlet容器调用,以向servlet指示servlet正在被放入服务中
void service(ServletRequest req, ServletResponse res) 由servlet容器调用,以允许servlet响应请求
void destroy() 在Servlet销毁的时候执行,服务器关闭的时候执行。
ServletConfig getServletConfig( ) 返回ServletConfig对象,该对象包含此servlet的初始化和启动参数。
String getServletInfo() 返回有关servlet的信息,如作者、版本和版权

1.3.2 GenericServlet类

基本概念

  • javax.servlet.GenericServlet类主要用于定义一个通用的、与协议无关的servlet,该类实现了Servlet接口。
  • 若编写通用servlet,只需重写service抽象方法即可。

常用的方法

方法声明 作用
abstract void service(ServletRequest req,ServletResponse res) 由servlet容器调用允许servlet响应请求。

1.3.3 HttpServlet类

基本概念

  • javax.servlet.http.HttpServlet类是个抽象类并继承了GenericServlet类。
  • 用于创建适用于网站的HTTP Servlet,该类的子类必须至少重写一个方法。

常用的方法

方法声明 作用
void doGet(HttpServletRequest req,HttpServletResponse resp) 处理客户端的GET请求
void doPost(HttpServletRequest req,HttpServletResponse resp) 处理客户端的POST请求
void destroy() 删除实例时释放资源
void init() 进行初始化操作
void service(HttpServletRequest req,HttpServletResponse resp) 根据请求决定调用doGet还是doPost方法

1.4 Servlet的生命周期

  • 构造方法只被调用一次,当第一次请求Servlet时调用构造方法来创建Servlet的实例。
  • init方法只被调用一次,当创建好Servlet实例后立即调用该方法实现Servlet的初始化。
  • service方法被多次调用,每当有请求时都会调用service方法来用于请求的响应。
  • destroy方法只被调用一次,当该Servlet实例所在的Web应用被卸载前调用该方法来释放当前占用的资源。

1.5 Servlet的原理

Servlet是由Web服务器调用,web服务器在收到浏览器请求之后实现以下步骤

posted @ 2021-10-28 18:30  guardwhy  阅读(113)  评论(0)    收藏  举报