【java web】servlet的原理浅分析以及servlet的生命周期方法总结

前言:

在学习servlet的时候,看了很多的资料,包括网上写的特别牛逼的文章,本人是真的看不懂,但是初学者,可以看下这篇博客(大神可以自己走开了)

1.什么是servlet

它的全称是server applet,说白了就是运行在服务器端的小程序,Servlet就是一个接口,定义了Java类被浏览器访问到(服务器tomcat识别)的规则。当然不止是tomcat,还有jetty.这里可以将tomcat当成一个容器,帮你new 对象,帮你执行方法。

2.小demo(主要是为了解释原理)

web.xml的配置

   <!--配置Servlet -->
    <servlet>
        <servlet-name>demo1</servlet-name>
        <servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>demo1</servlet-name>
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>

实现Servlet,Servlet接口中就是有下面的五个方法,我们是要实现的!这就是规则。

public class ServletDemo1 implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello servlet ");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
    }
}
3.执行原理

如下图:当浏览器给服务器发送请求的时候,是以URL的形式发送的,如下图中的http://localhost:8080/day13_tomcat/demo1
,此时服务器接收到这个url的时候,会对此url进行解析,获取访问的Servlet的资源路径。从这个url中我们能看出来,首先localhost:8080是本地的tomcat,day13_tomcat是配置的虚拟目录,对应项目,demo1是对应的资源,这个映射到web.xml,然后解析这个xml,对应的是 url-pattern标签,发现/demo1正好相符,于是通过servlet-name中的值demo1找到了servlet-class中的cn.itcast.web.servlet.servletDemo1,这是一个全类名,它反射到services方法!tomcat相当于是一个容器,帮你new对象,帮你调用方法。此时只要tomcat启动,我们的service就执行了。
在这里插入图片描述

4.Servlet中的生命周期方法:(对应上面的代码部分)
init方法:

被创建的时候,执行init方法,而且,只执行一次!说明一个Servlet在内存中只存在一个对象,Servlet是单例的,那么就可能存在线程的安全的问题,所以解决办法就是尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值.

可以配置执行Servlet的创建时机。
在标签下配置

  1. 第一次被访问时,创建
    的值为负数
  2. 在服务器启动时,创建
    的值为0或正整数
service方法:

每次访问Servlet时,Service方法都会被调用一次。用来提供服务,

destory方法:

被销毁:执行destroy方法,只执行一次。这个如果是强制关闭是不会执行的,只有正常的关闭才会执行,它是在关闭之前执行的,就好比临终遗言!一般用于释放资源

5.注解的方式配置

此时web.xml就不需要了,只需要在类上加上@WebServlet注解就好了!

@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {
6.servlet的体系结构

在这里插入图片描述
我们最常用的是HttpServlet

@WebServlet
public class ServletDemo2 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 {
        System.out.println("dopost");
    }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值