idea单独编写一个Servlet类并手动部署到tomcat,验证servlet生命周期

环境:

开发环境:IDEA 2023

Tomcat: tomcat9.0.75

pom依赖:

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>

servlet处理逻辑,可以验证一下servlet的生命周期

实例化对象:调用无参构造方法

初始化: 调用init方法

提供服务: 调用service,在service内部去根据请求类型走doGet还是doPost

销毁: 调用destroy方法

public class HelloWorldServlet extends HttpServlet {

    public HelloWorldServlet() {
        System.out.println("new Servlet obj");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("init Servlet");
    }

    @Override
    public void destroy() {
        System.out.println("destroy Servlet");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("This is doGet.");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("This is doPost.");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method = req.getMethod();
        if (method.equalsIgnoreCase("GET"))
            doGet(req, resp);
        else
            doPost(req, resp);
    }
}

因为是单独写的一个Servlet,要部署在tomcat里,就需要编译成class文件

将servlet-api.jar拷贝在HelloWorldServlet.java所在的目录下,如图所示:

然后在该路径下执行命令,会将java文件编译成class文件

javac -classpath .\javax.servlet-api-4.0.1.jar .\HelloWorldServlet.java

 如果代码中还引入了其他包的代码,编译出现找不到文件的错误,可以参考

https://blog.csdn.net/gao_zhennan/article/details/118612051

编译完之后会生成class文件。

部署服务器tomcat

tomcat部署web项目是在tomcat安装目录下 apache-tomcat-9.0.75\webapps\ROOT\WEB-INF下,需要手动创建classes目录,然后依次创建servlet包目录,然后将class文件拷贝过来

编辑apache-tomcat-9.0.75\webapps\ROOT\WEB-INF目录下的web.xml文件

增加servlet映射,要放在<web-app>标签里

  <servlet>
        <servlet-name>HelloWorld</servlet-name>
        <servlet-class>com.pyy.servlet.HelloWorldServlet</servlet-class>
   </servlet>

   <servlet-mapping>
        <servlet-name>HelloWorld</servlet-name>
        <url-pattern>/hello</url-pattern>
   </servlet-mapping>

至此tomcat配置servlet完成

启动tomcat,在apache-tomcat-9.0.75\bin目录下的shell里执行.\startup.bat脚本启动tomcat服务器

postman测试:

 

 

 

查看tomcat日志输出,可以看到在首次调用hello请求发送GET请求时,先调用了无参构造方法进行实例化,然后调用init方法进行初始化,再调用doGet方法打印输出, 然后调用post请求,直接调用doPost方法输出内容。

所以说Servlet初始化一次,然后无数次对外提供service服务。

 

销毁方法因为调用tomcat的 .\shutdown.bat脚本,会快速关闭tomcat终端输出,看不到destroy方法的输出结果。结果是关闭tomcat服务器会清理servlet,会调用一次servlet的destroy方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值