Servlet
概念:运行在服务器端的小程序
Servlet
接口:定义了java类被浏览器访问到的规则
使用步骤:
-
创建javaEE项目
-
定义一个类,实现Servlet接口
public class MyServlet implements Servlet
-
实现接口的抽象方法
-
配置Servlet,在
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_3_1.xsd" version="3.1"> <servlet> <!--Servlet实现类名--> <servlet-name>MyServlet</servlet-name> <!--全类名--> <servlet-class>ChenXing.MyServlet</servlet-class> </servlet> <servlet-mapping> <!--Servlet实现类名--> <servlet-name>MyServlet</servlet-name> <!--/Servlet实现类名--> <url-pattern>/MyServlet</url-pattern> </servlet-mapping> </web-app>
Servlet
的生命周期
-
被创建:执行
init()
方法,只能执行一次- 设置Servlet被创建的时间:(在
<servlet>
标签下设置)- 第一次访问时被创建:
<load-on-startup>
的值为负数 - 在服务器被启动时被创建:
<load-on-startup>
的值为0或正整数
- 第一次访问时被创建:
注意:
- 一个
Servlet
在内存只能存在一个对象 - 多个用户同时访问时,可能存在线程安全问题
- 解决:尽量不要在
Servlet
中定义成员变量,即使定义了成员变量,也不要修改值
- 设置Servlet被创建的时间:(在
-
提供服务:执行
Service()
方法,执行多次- 每次访问
Servlet
时,Service()
方法都会被调用一次
- 每次访问
-
被销毁:执行
destroy()
方法,只执行一次- 当服务器正常关闭时,用于释放资源
Servlet3.0:
好处:支持注解配置。不需要web.xml
使用步骤:
- 创建javaEE项目,选择
Servlet
的版本3.0以上,可以不创建web.xml
- 定义一个类,实现
Servlet
接口 - 实现接口中的抽象方法
- 在类上使用
@WebServlet
注解,进行配置@WebServlet("资源路径")
:资源路径是自定义的访问路径
实例代码
package ChenXing;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/ChenXing")
public class MyServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("开始!!!");
}
@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() {
System.out.println("服务器结束!");
}
}
Servlet
的体系结构
Servlet
接口 —— 接口
| 继承
GenericServlet
—— 抽象类
| 继承
HttpServlet
—— 抽象类
GenericServlet
抽象类:将Servlet
接口中其他的方法做了默认空实现,只能将Service()
方法作为抽象HttpServlet
抽象类:对http协议的一种封装,简化操作- 定义类继承
HttpServlet
- 复写
doGet()
或doPost()
方法
- 定义类继承
Servlet
相关配置
urlparttern:Servlet
访问路径- 一个
Servlet
可以定义多个访问路径:@WebServlet({"/路径1","/l路径2","/路径3"})
- 路径定义规则:
/xxx
:路径匹配"/xxx/xxx"
:多层路径,目录结构*.do
:扩展名匹配
- 一个