Servlet
文章目录
- Servlet
- @[toc]
- Servlet快速入门
- Servlet执行流程
- Servlet生命周期
- Servlet体系结构
- Servlet urlpattern配置
- XML配置方式编写Servlet
Servlet快速入门

1.创建Web项目,导入Servlet坐标
<dependencies>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
dependencies>
2.定义一个类,实现Servlet接口,并重写Servlet接口中的所有方法,并在service方法中输入一句话
package com.tiyc.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Servlet hello world~");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
3.配置:在类上使用@WebServlet注解,配置该Servlet的访问路径
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {
4.访问:启动Tomcat,浏览器输入URL访问该Servlet
http://localhost:8080/tomcat-demo02/demo1
Servlet执行流程
1.客户端发送请求给服务器。
2.服务器开始接受,先判断该请求的servlet实例是否存在,如果不存在先装载一个servlet类并创建实例。如果存在则直接调用该servlet的service方法,之后进行判断是调用doGet方法还是doPost方法。
3.servlet创建实例后,调用init方法进行初始化。之后调用servce方法,判断是调用doGet方法还是doPost方法。
4.最后判断服务是否关闭,如果关闭则调用destroy方法。
注:
Servlet由谁创建?Servlet方法由谁调用?
- Servlet有Web服务器创建,Servlet方法由web服务器调用。
服务器怎么知道Servlet中一定有service方法?
- 因为我们自定义的Servlet,必须实现Servlet接口并复写其方法,而Servlet接口中有service方法。
Servlet生命周期
- 对象的生命周期指:一个对象从被创建到被销毁的整个过程。
Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为四个阶段:
-
加载与实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象
@WebServlet(urlPatterns = "/demo",loadOnStartup = 1);

-
初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如:加载配置文件,创建连接等初始化工作。该方法只调用一次。
-
请求处理:每次请求Servlet时,Servlet容器都会调用Servlet 的service()方法对请求进行处理。
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Servlet hello world~");
}
-
服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例destroy()方法完成资源的释放。当descroy()方法调用之后容器会释放这个Servlet实例,该实例会随后被Java的垃圾收集器所回收
@Override
public void destroy() {
System.out.println("我是销毁方法:destroy()....");
}

Servlet方法介绍
-
初始化方法,在Servlet被创建时执行,只执行一次
void init(ServletConfig config)
-
提供服务方法,每次Servlet被访问,都会调用该方法
void service(ServletRequest req,ServletResponse res)
-
销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet
void destroy()
-
获取ServletConfig()对象
ServletConfig getServletConfig()
-
获取Servlet信息
String getServletInfo()
Servlet体系结构

@WebServlet("/demo4")
public class ServletDemo4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get.....");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post.....");
}
}

思考
1.HttpServlet中为什么要根据请求方式的不同,调用不同方法?
2.如何调用?
答:
模拟HttpServlet写个MyHttpServlet
public class MyHttpServlet 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 {
HttpServletRequest request = (HttpServletRequest) servletRequest;
String method = request.getMethod();
if ("GET".equals(method)){
doGet(servletRequest,servletResponse);
}else if("POST".equals(method)){
doPost(servletRequest,servletResponse);
}
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
protected void doGet(ServletRequest servletRequest, ServletResponse servletResponse) {
}
protected void doPost(ServletRequest servletRequest, ServletResponse servletResponse) {
}
}
继承MyHttpServlet的效果:

总结
1.HttpServlet的使用步骤
- 继承HttpServlet
- 重写doGet()和doPost()方法
2.HttpServlet原理
- 获取请求方式,并根据不同的请求方式,调用不同的doXxx方法
Servlet urlpattern配置
urlPattern配置规则
注:范围越小越精确,优先级越高。
1.精准匹配
2.目录匹配
3.扩展名匹配
4.任意匹配
XML配置方式编写Servlet

3.运行结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传