文章目录
- 1. Servlet 快速入门
- 1.0Servlet介绍
- 1.1创建项目导入依赖
- 1.2定义类实现Servlet接口
- 1.3配置:在类上使用注解
- 1.4启动tomcat访问程序
- 2. Servlet 执行流程
- 3. Servlet 生命周期
- 3.1生命周期概念
- 3.2生命周期具体流程
- 3.3代码演示
- 4. Servlet 体系结构
- 5. Servlet urlPattern配置
- 5.1配置多个访问路径
- 5.2配置规则
- 5.3代码演示
- 5.3.1配置多个访问路径
- 5.3.2配置规则
- 6. Xml 配置方式编写Servlet
- 6.1编写Servlet类
- 6.2在web.xml配置该Servlet
- 7.总结
1. Servlet 快速入门
1.0Servlet介绍
servlet就是一个java应用程序,实现了servletAPI规范的java应用程序就是一个servlet,主要是用来处理来自web浏览器或者其他HTTP客户端的请求,常常跟我们的业务程序或者我们的数据对接,相当于一个中间层的作用,动态地生成内容给服务器;要部署和运行servlet,需要使用web容器(servlet容器),web容器本质上就是与servlet交互的web服务器组件,web容器负责管理servlet的生命周期,将URL映射到特定的servlet(具体在web.xml中配置)并确保URL请求者具有正确的权限。
1.1创建项目导入依赖
Servlet快速入门只需要四部就可以轻松入门,下面是步骤的一些说明,具体代码详见下面四步
①创建web项目,导入Servlet依赖坐标;
②定义一个类实现Servlet接口,并重写接口中所有方法,并在service方法中输入一句话
③在类上使用@WebServlet注解,配置Servlet访问路径
④启动tomcat,浏览器出入URL访问Servlet
在maven项目pom.xml文件中导入javax.servlet-api坐标依赖
1
2
3
4
5
6
7<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
1.2定义类实现Servlet接口
创建ServletDemo1类并实现Servlet接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25public class ServletDemo1 implements Servlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("helloWord1"); } @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
1.3配置:在类上使用注解
1.4启动tomcat访问程序
在浏览器输入以下网址,在控制台输出helloWorld即入门成功
1
2http://localhost:8080/servlet_demo_war_exploded/demo1
控制台输出信息:
注意:
不会创建maven项目可以详见tomcat从入门到入坑这篇文章,手把手教你如何创建maven项目,
链接:https://blog.csdn.net/qq_52699757/article/details/126532387?spm=1001.2014.3001.5501
2. Servlet 执行流程
3. Servlet 生命周期
3.1生命周期概念
对象的生命周期指一个对象从被创建到销毁的过程。
3.2生命周期具体流程
Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为四个阶段
1.加载和实例化
默认情况下,当servlet第一次被访问时,由容器创建Servlet对象,当然也可以自己修改默认配置,如果想让服务器在启动时就创建Servlet对象,只需要在注解里面加入loadOnStartup=0或正整数即可,数字越小优先级越高,即**@WebServlet(urlPatterns=“/demo”,loadOnStartup=1)**
2.初始化
在Servlet实例化后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件,创建连接等初始化的工作,该方法只调用一次。
3.请求处理
每次请求Servlet时,Servlet容器都会调用Servlet的service方法对请求进行处理
4.服务终止
当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放,在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后就会被Java的垃圾收集器所回收
3.3代码演示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50** * 测试Servlet生命周期 */ @WebServlet("/demo2") public class ServletDemo2 implements Servlet { /** * 初始化方法 * 1.调用时机:默认情况下,Servlet被第一次访问。 * 2.调用次数:1次 * @param servletConfig * @throws ServletException */ @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init....."); } /** * 提供服务 * 1.调用时机:每一次Servlet被访问的时候 * 2.调用次数:多次 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("helloWord1"); } /** * 销毁 * 1.调用时机:内存释放或者服务器关闭的时候,Servlet对象会被销毁 * 2.调用次数:1次 */ @Override public void destroy() { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } }
4. Servlet 体系结构
1
2由于直接继承Servlet需要实现里面的所有方法,每次写代码都需要判断服务器是get请求还是post请求,使得程序繁琐,所以我们在写程序的时候不再实现Servlet方法,直接继承HttpServlet类,来重写里面的doGet方法和doPost方法
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17/** * 测试HttpServlet生命周期 */ @WebServlet("/demo3") public class ServletDemo3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet........."); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
5. Servlet urlPattern配置
1
2Servlet要想被访问,必须配置其访问路径(urlPattern)
5.1配置多个访问路径
@WebServlet(urlPattern={“/demo1”,“/demo2”})
5.2配置规则
注意: /和/*区别:
当我们的项目中Servlet配置了"/",会覆盖tomcat中的默认DefaultServlet,当其他的url-pattern都匹配不上时都会走这个Servlet,静态网页就不会显示
当我们的项目中配置了"/*",意味着匹配任意访问路径
5.3代码演示
5.3.1配置多个访问路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27/** * Servlet urlPattern配置 * 1.配置多个访问路径 * 在浏览器访问 * http://localhost:8080/servlet_demo_war_exploded/demo4 或 * http://localhost:8080/servlet_demo_war_exploded/demo5 都能访问成功 * 2.配置规则(在后面讲) * ①精准匹配 * ②目录匹配 * ③扩展名匹配 * ④任意匹配 */ // @WebServlet(urlPatterns = {"/demo4","/demo5"}) public class ServletDemo4 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("demo4AndDemo5"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
5.3.2配置规则
①精准匹配
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24/** * 2.配置规则 * ①精准匹配 * 配置路径:@WebServlet("/user/select") * 访问路径:http://localhost:8080/servlet_demo_war_exploded/user/select * ②目录匹配 * ③扩展名匹配 * ④任意匹配 */ @WebServlet("/user/select") public class ServletDemo5 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("精准匹配......."); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
②目录匹配
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34/** * 2.配置规则 * ①精准匹配 * 配置路径:@WebServlet("/user/select") * 访问路径:http://localhost:8080/servlet_demo_war_exploded/user/select * ②目录匹配 * 配置路径:@WebServlet("/user/*") * * 访问路径:http://localhost:8080/servlet_demo_war_exploded/user/aaa * http://localhost:8080/servlet_demo_war_exploded/user/bbb * *表示可以是任意字符 * 思考:当精准匹配和目录匹配路径一样的时候,例如:当我们输入http://localhost:8080/servlet_demo_war_exploded/user/select这个网址的时候他会匹配哪一个Servlet * 答案:会匹配精准匹配的Servlet,因为精准匹配的优先级高 * ③扩展名匹配 * 配置路径:@WebServlet("*.do") * 访问路径:http://localhost:8080/servlet_demo_war_exploded/aaa.do * http://localhost:8080/servlet_demo_war_exploded/bbb.do * 注意:*前面不可以有/,否则会报错 * ④任意匹配 */ @WebServlet("*.do") public class ServletDemo7 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("扩展名匹配........"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
④任意匹配
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39/** * 2.配置规则 * ①精准匹配 * 配置路径:@WebServlet("/user/select") * 访问路径:http://localhost:8080/servlet_demo_war_exploded/user/select * ②目录匹配 * 配置路径:@WebServlet("/user/*") * * 访问路径:http://localhost:8080/servlet_demo_war_exploded/user/aaa * http://localhost:8080/servlet_demo_war_exploded/user/bbb * *表示可以是任意字符 * 思考:当精准匹配和目录匹配路径一样的时候,例如:当我们输入http://localhost:8080/servlet_demo_war_exploded/user/select这个网址的时候他会匹配哪一个Servlet * 答案:会匹配精准匹配的Servlet,因为精准匹配的优先级高 * ③扩展名匹配 * 配置路径:@WebServlet("*.do") * 访问路径:http://localhost:8080/servlet_demo_war_exploded/aaa.do * http://localhost:8080/servlet_demo_war_exploded/bbb.do * 注意:*前面不可以有/,否则会报错 * ④任意匹配 * 配置路径: @WebServlet("/") * @WebServlet("/*") * 访问路径:http://localhost:8080/servlet_demo_war_exploded/hehe * http://localhost:8080/servlet_demo_war_exploded/haha * 注意:在写程序的时候尽量不要使用任意匹配路径,”/*“优先级大于”/“ */ @WebServlet("/") public class ServletDemo8 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("任意匹配........"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
6. Xml 配置方式编写Servlet
Servlet从3.0版本后开始支持使用注解配置,3.0版本只支持XML配置文件的配置防护,具体实现步骤也不复杂,首先是编写Servlet类,然后在web.xml中配置该Servlet就可完成Servlet的XML配置,具体演示见下方代码
6.1编写Servlet类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18/** * 基于web.xml配置该Servlet */ public class ServletDemo9 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("demo9......."); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
6.2在web.xml配置该Servlet
web.xml配置文件
1
2
3
4
5
6
7
8
9
10
11
12<web-app> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>demo9</servlet-name> <servlet-class>com.tz.servlet.ServletDemo9</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo9</servlet-name> <url-pattern>/demo9</url-pattern> </servlet-mapping> </web-app>
7.总结
1
2在编写程序的时候直接实现HttpServlet类,然后重写doGet和doPost方法,然后在类上使用注解@WebServlet(urlPatterns="/",loadOnStartup=-1)
模板如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14@WebServlet(urlPatterns="/demo",loadOnStartup=-1) public class ServletDemo3 extends HttpServlet { //重写doGet方法 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //写实现方法 } //重写doPost方法 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //写实现方法 } }
注意:源代码已经上传到码云上,需要的自行下载
地址: https://gitee.com/tzmoxi/project-collection.git
最后
以上就是幸福水池最近收集整理的关于Servlet详细教程1. Servlet 快速入门2. Servlet 执行流程3. Servlet 生命周期4. Servlet 体系结构5. Servlet urlPattern配置6. Xml 配置方式编写Servlet7.总结的全部内容,更多相关Servlet详细教程1.内容请搜索靠谱客的其他文章。
发表评论 取消回复