• 一篇文章讲清Servlet原理


    1.servlet是什么?

            servlet我们可以从英文看出来,全名server  applet,服务端的一个小程序。我们一般将servelt分为两方面,一种是狭义上的servlet,另一种就是广义上的servelt。

            狭义上的servlet:其实就是java中定义好的一个接口。

            广义上的servelet:是实现servlet的类。

    2.自己创建一个servelt

            我们可以通过自己写一个servlet来证明。

            ①狭义上的servelt

            实现Servlet接口,里面有一个周期,初始化只会一开始执行一次,销毁是在最后执行一次(tomcat关闭或者内存正好回收),重要的是service方法。

    1. @WebServlet("/myServlet")
    2. public class MyServlet implements Servlet{
    3. @Override
    4. public void destroy() { //销毁
    5. }
    6. @Override
    7. public ServletConfig getServletConfig() { //servlet上下文,一个容器
    8. return null;
    9. }
    10. @Override
    11. public String getServletInfo() { //获得是基本信息,字符串格式
    12. return null;
    13. }
    14. @Override
    15. public void init(ServletConfig arg0) throws ServletException {//初始化
    16. }
    17. @Override
    18. public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
    19. }
    20. }

    简单说一下@WebServelt:

            我们通常的写法是@WebServlet("/myServlet") ,这是一个简化写法。其中完整写法是 @WebServlet(urlPatterns= {"/myServlet","/my"},name="sdf") ,而简化写法相当于@WebServlet(value = "/myServlet"),这个必须是只有一个属性,例如只有value,并且value中只有一个值的时候就可以省略 。但是比如我们定义一个loadOnStartup(loadOnStartup的意思就是tomcat加载的时候就已经初始化了,不需要等到第一次访问的时候才进行初始化)。@WebServlet(value="/myServlet",loadOnStartup=1) ,value就不可以省略,因为他有两个属性值。

            xml中映射地址

    1. <servlet>
    2. <servlet-name>MyServeltservlet-name>
    3. <servlet-class>com.servlet.MyServeltservlet-class>
    4. <load-on-startup>1load-on-startup>
    5. servlet>
    6. <servlet-mapping>
    7. <servlet-name>MyServeltservlet-name>
    8. <url-pattern>/myServleturl-pattern>
    9. servlet-mapping>

    ②广义上的servlet

            我们根据这张图进行分析。

    作为一把手肯定就是servlet接口了,所有的都是以这个为基础向下延伸简化的。

    1.二把手 GenericServlet,其他方法都做了,只留一个service方法,如果想要用到初始化或其他方法,就只能换为原先接口servlet。

    深入源码看一下,它是一个抽象类,实现了servlet接口。

     GenericServlet中只是实现了重要的service方法,比servlet简化了许多。

    1. @WebServlet(value="/myServlet",loadOnStartup=1)
    2. public class MyServletClass extends GenericServlet{
    3. @Override
    4. public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    5. // TODO Auto-generated method stub
    6. }
    7. }

    2.三把手HttpServlet,这才是我们比较常用的,他的意思是将请求方式分类,匹配http请求,将service拆分成多个按照请求方式的方法(将主要方法service分成一个个的小方法)。常用的doGet,doPost方法。HttpServlet类不用实现任何方法,更加简单,方便。

    1. @WebServlet(value="/myServlet",loadOnStartup=1)
    2. public class MyServletHttp extends HttpServlet{
    3. }

  • 相关阅读:
    技术干货|什么是大模型?超大模型?Foundation Model?
    市面主流的Web大前端框架以及特性
    神经网络模型压缩综述
    石头科技: 决胜百亿扫地机器人“价值高地”
    java中springBoot+oss基础使用
    一种可信万兆加密分流认证装置研究
    旋转接头安装使用注意事项
    手写 Promise(2)实例方法与静态方法的实现
    java毕业设计基于BS架构的疫情包联信息管理系统的设计与实现mybatis+源码+调试部署+系统+数据库+lw
    一文读懂物联网中无线通信主要技术
  • 原文地址:https://blog.csdn.net/weixin_53170971/article/details/125909925