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的访问地址。
- 编写一个普通类,实现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的方式开发
- 创建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服务器在收到浏览器请求之后实现以下步骤

浙公网安备 33010602011771号