• 一篇文章讲清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. }

  • 相关阅读:
    【论文精读2】R-MVSNet
    智慧茶园:茶厂茶园监管可视化视频管理系统解决方案
    如何防止API接口被未授权的客户端调用?
    发布自定义node包,实现自定义脚本命令
    Mybatis出现空指针异常解决方法
    SQL 序列生成器
    Delphi绘图功能[2] —— 窗体的绘图属性、圆弧类图形、获取Canvas对象(ClientRect解析)
    图解计算机的存储器金字塔
    使用.NET简单实现一个Redis的高性能克隆版(一)
    文盘Rust -- 生命周期问题引发的 static hashmap 锁 | 京东云技术团队
  • 原文地址:https://blog.csdn.net/weixin_53170971/article/details/125909925