【Servlet 基础】
引入:
要想用户通过浏览器实现访问动态资源,得到不同的结果需要在服务器的动态资源部分,编写具有逻辑性的 Java 代码,Java 代码封装在 Java 类中,浏览器实际访问找到的是这种封装的 Java 类,这种 Java 类不是自己运行的,依赖于服务器才能运行,没有主方法(main 方法),相当于是 Tomcat 执行它
这时这个 Java 类就需要遵守一定的规则(在 Java 中就可以理解为接口,这个接口就是 Servlet),才能被 Tomcat 所识别并执行
一、 Servlet 概述
概念:全称为:server applet,是运行在服务器端的小程序
Servlet 就是一个接口,定义了 Java 类被浏览器访问到(Tomcat 识别)的规则
将来我们可以自定义一个类,实现 Servlet 接口,复写方法,进行使用
1. 版本对应
- Servlet 、JDK 、Tomcat 各版本对应的关系
查看 Tomcat 官网
- Servlet 、JSP 、EL 表达式显示的是最佳版本
(使用版本一定要保持一致,否则代码无法运行)
2. 快速入门
- 创建 JavaEE 项目 参照此文章创建 Web 项目内容
- 定义一个类,实现 Servlet 接口
- 实现接口中的抽象方法
- 配置 Servlet
- 定义一个类,实现 Servlet 接口,实现接口中的抽象方法,在此只实现一个提供服务的接口
import javax.servlet.*;
import java.io.IOException;
public class ServletTest01 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
// 提供服务的接口
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Hello , Servlet !");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
- 配置 Servlet,在
webapp/WEB-INF/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 -->
<servlet>
<servlet-name>test01</servlet-name>
<servlet-class>com.example.tomcat_test.ServletTest01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test01</servlet-name>
<url-pattern>/test01</url-pattern> <!-- 在原有设定的路径下添加访问路径,注意斜杠 -->
</servlet-mapping>
</web-app>
- 在浏览器中输入:
http://localhost:8080/tomcat_test/test01
(依照自己设定的访问路径进行访问),访问的页面结果为空白,但是 IDEA 控制台输出结果(页面刷新一次,提供服务的方法会被调用一次) - 查看当前默认页(
index.jsp
)的访问路径: 运行 → 编辑配置 → 部署
(可以进行自定义设置,最好与项目名称保持一致),如下图中的:应用程序上下文 处
二、 Servlet 详解
1. Servlet 执行原理
实体分为三个部分:
- 编写的实现 Servlet 接口的类
web.xml
配置文件- 浏览器
执行部分:
- 浏览器部分:
- 通过: