使用Servlet和JSP开发Java应用程序 ---- Servlet 介绍
1. Servlet 概念
什么是 Servlet
Servlet 是 Java 编写的服务器端程序
Servlet API 是一个可用于开发 Servlet 的类和接口的集合
Servlet 的工作原理
服务器端接收到请求后,服务器端先将请求发送给 Web 容器
Web 容器检查是否存在所请求的 Servlet 实例
如果存在 Servlet 实例,那么由 Servlet 处理客户端请求,并返回动态响应
如果不存在 Servlet 实例,那么创建并初始化 Servlet 实例,初始化完成后,再由 Servlet 处理客户端请求,返回动态响应
2. Servlet 类层次结构和生命周期方法
Servlet 类层次结构
Servlet 接口是 Servlet 类层次结构的根接口,所有的 Servlet 都需要直接或者间接地实现 Servlet 接口
Servlet 生命周期方法
javax.Servlet.Servlet 接口中定义了 Servlet 的生命周期方法:init()、service()、destroy()
Web 容器中按照以下的顺序调用 Servlet 的生命周期方法
- Web 容器创建一个或者多个 Servlet 类的实例
- Servlet 初始化时调用 init() 方法。Servlet 生命周期中只调用一次 init() 方法
- 调用 service() 方法,处理客户端请求
- service() 方法处理请求并向 Web 容器返回动态响应
- 如果有请求再次发生,重复3、4步骤
- Web 容器将 Servlet 实例删除前调用 destroy() 方法。Servlet 生命周期中只调用一次 destroy() 方法
3. 创建 Servlet
编写 Servlet
读取和处理客户端请求
我们可以通过 Servlet 接口提供的 getParament() 方法获取请求参数的值
String getParament(String arg);
获取用户发送的用户名
String userName = String getParament("name");
向客户端发送响应
我们向客户端发送数据需要获取 java.io.PrintWrite 对象
使用 Servlet 接口提供的 getWriter() 方法来获取 PrintWriter 对象
PrintWriter out = response.getWriter();
发送的内容可以是字符串类型的数据,也可以是 html 页面类型的数据
编译并封装 Servlet(注册 Servlet)
方法一:web.xml文件
web.xml 文件在 WEB-INF 文件下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" 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_3_1.xsd">
<servlet>
<description>登录请求</description>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.qdu.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
web.xml 各类属性
- version:指定架构的版本
- xmlns:指定部署描述符架构的命名空间
- xsi:指定架构的位置
< Servlet > 标记包含服务器的信息
- < servlet-name >:显示 Servlet 的名称
- < url-pattern >:通过其访问 Servlet
- < servlet-class >:Servlet 类的名称
方法二:@WebServlet("/url")
在编写 Servlet 前,添加 @WebServlet("/url") 用于实现 Servlet 的注册
urlPatterns 和 value 属性功能等效,都用于指定 servlet 的 url 模式
@WebServlet(name = "studentInfoServlet", value = "/sis")
@WebServlet(name = "studentInfoServlet", urlPatterns = "/sis")
也可以不指定 servlet 的 name ,默认名是类名,但是首字母小写
@WebServlet(value = "/sis")
@WebServlet(urlPatterns = "/sis")
如果只需要指定url模式可以指定多个,如果有多个,以字符串数组的形式给出就可以
@WebServlet(value = "/sis")
@WebServlet(value = {"/sis","/aaa","/bbb"})
urlPatterns 和 value 可以省略
@WebServlet("/sis")
将 Servlet 部署为 Java EE 应用程序
在访问应用程序前,应该先将其部署到 Web 应用服务器,如 Tomcat 或 Glassfish 等
通过浏览器访问 Servlet
我们可以直接通过地址栏输入 Servlet 的 url 来进行访问