我是靠谱客的博主 幸福水池,最近开发中收集的这篇文章主要介绍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坐标依赖

  <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

1.2定义类实现Servlet接口

创建ServletDemo1类并实现Servlet接口

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即入门成功

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代码演示

**
 * 测试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

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

代码如下:

image-20220826182411685


/**
 * 测试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配置

Servlet要想被访问,必须配置其访问路径(urlPattern)

5.1配置多个访问路径

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


5.2配置规则

image-20220826154126553

注意: /和/*区别:

​ 当我们的项目中Servlet配置了"/",会覆盖tomcat中的默认DefaultServlet,当其他的url-pattern都匹配不上时都会走这个Servlet,静态网页就不会显示

​ 当我们的项目中配置了"/*",意味着匹配任意访问路径

5.3代码演示

5.3.1配置多个访问路径

/**
 *  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配置规则

①精准匹配

/**
 *  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 {

    }
}

②目录匹配

/**
 *  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 {

    }
}

④任意匹配

/**
 *  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类


/**
 * 基于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配置文件

<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.总结

在编写程序的时候直接实现HttpServlet类,然后重写doGet和doPost方法,然后在类上使用注解@WebServlet(urlPatterns="/",loadOnStartup=-1)

模板如下:

@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. Servlet 快速入门2. Servlet 执行流程3. Servlet 生命周期4. Servlet 体系结构5. Servlet urlPattern配置6. Xml 配置方式编写Servlet7.总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部