目录
Servlet思维导图编辑
1.什么是Servlet
2.Servelt概述
3.Servlet-Quickstart Your Project
3.1创建一个Web项目,导入Servlet依赖
3.1.1 选择Servlet导入依赖
3.1.2 导入Servlet依赖
3.2 在Web项目,定义类,实现Servlet接口,并重写其方法
3.2.1 Servlet 方法介绍
4. Servlet 执行流程
5. Servlet 生命周期
6. Servlet 生命周期
6.1 HttpServlet 原理
6.2 HttpServlet 使用步骤
7.Servlet urlPattern配置
7.1.一个Servlet,可以配置多个 urlPattern
7.2 urlPattern 配置规则
【摘自百度百科】
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。
Servlet:Java提供的一门动态web资源开发技术
Servlet 是JavaEE 规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet
Defines methods that all servlets must implement.
A servlet is a small Java program that runs within a Web server. Servlets receive and respond to requests from Web clients, usually across HTTP, the HyperText Transfer Protocol.To implement this interface, you can write a generic servlet that extends javax.servlet.GenericServlet or an HTTP servlet that extends javax.servlet.http.HttpServlet.
定义所有servlet必须实现的方法。
servlet是一个在Web服务器中运行的小型Java程序。Servlet通常通过HTTP(超文本传输协议)接收和响应来自Web客户端的请求。
为了实现这个接口,您可以编写一个扩展javax.servlet.GenericServlet的通用servlet,或者编写一个延伸javax.servlets.HTTP.HttpServlet的HttpServlet。
前置知识:JavaEE 、Maven、Tomcat
3.1.1 选择Servlet导入依赖
可以先去Maven厂库,查询Servlet的依赖
Mevam厂库官网:https://mvnrepository.com/
发现,Servlet的依赖,目前 Servlet依赖版本的3.0.1 、3.1.0、4.0.1的使用次数最多,我们就在这3个版本选择其中一个即可
3.1.2 导入Servlet依赖
以导入Servlet 3.1.0的版本为例
javax.servlet javax.servlet-api 3.1.0 provided
以Serlvet的service()方法为例
初始化方法,在Servlet被创建时执行,只执行一次
void init(ServletConfig config)
提供服务方法, 每次Servlet被访问,都会调用该方法
void service(ServletRequest req, ServletResponse res)
销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet
void destroy()
获取ServletConfig对象
ServletConfig getServletConfig()
获取Servlet信息
String getServletInfo()
Servlet 生命周期:对象的生命周期指一个对象从被创建到被销毁的整个过程
Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,
分为4个阶段: 加载和实例化 、初始化、请求处理、服务终止
1.加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象
2.初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次
3.请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理。
4.服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收
开发B/S架构的web项目,都是针对HTTP协议,所以我们自定义Servlet,会继承HttpServlet
6.1 HttpServlet 原理
HTTP的请求方式包括DELETE,GET,OPTIONS,POST,PUT和TRACE,在HttpServlet类中分别提供了相应的服务方法,它们是,doDelete(),doGet(),doOptions(),doPost(), doPut()和doTrace().
HttpServlet容器响应Web客户请求流程如下:
1)Web客户向Servlet容器发出Http请求;
2)Servlet容器解析Web客户的Http请求;
3)Servlet容器创建一个HttpServletRequest对象(继承于ServletRequest),在这个对象中封装Http请求信息;
4)Servlet容器创建一个HttpServletResponse对象;
5)Servlet容器调用HttpServlet的service方法,把HttpServletRequest和HttpServletResponse对象作为service方法的参数传给HttpServlet对象;
6)HttpServlet调用HttpServletRequest的有关方法,获取HTTP请求信息;
7)HttpServlet调用HttpServletResponse的有关方法,生成响应数据;
8)Servlet容器把HttpServlet的响应结果传给Web客户。HTTP 协议中,GET 和 POST 请求方式的数据格式不一样,将来要想在Servlet中处理请求参数,得在service方法中判断请求方式,并且根据请求方式的不同,分别进行处理
6.2 HttpServlet 使用步骤
1. 继承HttpServlet
2.重写doGet和doPost方法
Servlet 要想被访问,必须配置其访问路径(urlPattern)
源码分析
7.1.一个Servlet,可以配置多个 urlPattern
//一个Servlet,可以配置多个 urlPattern @WebServlet(urlPatterns={"/HttpServletDemo5","/HttpServletDemo6","/HttpServletDemo7"} ) public class HttpServletDemo5 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("/HttpServletDemo5 , /HttpServletDemo6"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
7.2 urlPattern 配置规则
/** * 精确匹配 * 访问路径:http://localhost:8080/JavaWeb_Servlet_Demo/HttpServletDemo5 */ @WebServlet("/HttpServletDemo5") /** * 目录匹配 * 访问路径:http://localhost:8080/JavaWeb_Servlet_Demo/HttpServletDemo5 * http://localhost:8080/JavaWeb_Servlet_Demo/HttpServletDemo6 * http://localhost:8080/JavaWeb_Servlet_Demo/HttpServletDemo7 */ @WebServlet("JavaWeb_Servlet_Demo/*") /** * 扩展名匹配 * 访问路径:http://localhost:8080/JavaWeb_Servlet_Demo/aaa.do * http://localhost:8080/JavaWeb_Servlet_Demo/bbb.do * http://localhost:8080/JavaWeb_Servlet_Demo/ccc.do */ @WebServlet("*.do") /** * 任意匹配 * 访问路径:http://localhost:8080/JavaWeb_Servlet_Demo/abc * http://localhost:8080/JavaWeb_Servlet_Demo/qwe * http://localhost:8080/JavaWeb_Servlet_Demo/zxc * * / 和 /* 区别: * 当项目中的Servlet配置了“/”,会覆盖掉tomcat中的DefaultServlet,当其他的 url-pattern都匹配不上时都会走这个Servlet * 当项目中配置了“/*”,意味着匹配任意访问路径 */ @WebServlet("/*") @WebServlet("/") /** * 优先级: * 精确路径 > 目录路径 > 扩展名路径 > /* > / */
感谢关注
未完,待更新