我是靠谱客的博主 幸福水池,这篇文章主要介绍Servlet详细教程1. Servlet 快速入门2. Servlet 执行流程3. Servlet 生命周期4. Servlet 体系结构5. Servlet urlPattern配置6. Xml 配置方式编写Servlet7.总结,现在分享给大家,希望可以做个参考。

文章目录

  • 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

image-20220826121244056

在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
25
public 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配置:在类上使用注解

image-20220826121013978

1.4启动tomcat访问程序

在浏览器输入以下网址,在控制台输出helloWorld即入门成功

复制代码
1
2
http://localhost:8080/servlet_demo_war_exploded/demo1

控制台输出信息:

image-20220826121153662


注意:

​ 不会创建maven项目可以详见tomcat从入门到入坑这篇文章,手把手教你如何创建maven项目,

链接:https://blog.csdn.net/qq_52699757/article/details/126532387?spm=1001.2014.3001.5501

2. Servlet 执行流程

image-20220826125115135

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 体系结构

image-20220826131017248

复制代码
1
2
由于直接继承Servlet需要实现里面的所有方法,每次写代码都需要判断服务器是get请求还是post请求,使得程序繁琐,所以我们在写程序的时候不再实现Servlet方法,直接继承HttpServlet类,来重写里面的doGet方法和doPost方法

代码如下:

image-20220826182411685

复制代码
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
2
Servlet要想被访问,必须配置其访问路径(urlPattern)

5.1配置多个访问路径

@WebServlet(urlPattern={“/demo1”,“/demo2”})


5.2配置规则

image-20220826154126553

注意: /和/*区别:

​ 当我们的项目中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

image-20220826193226511

最后

以上就是幸福水池最近收集整理的关于Servlet详细教程1. Servlet 快速入门2. Servlet 执行流程3. Servlet 生命周期4. Servlet 体系结构5. Servlet urlPattern配置6. Xml 配置方式编写Servlet7.总结的全部内容,更多相关Servlet详细教程1.内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(84)

评论列表共有 0 条评论

立即
投稿
返回
顶部