美文网首页
深入HttpServlet与ServletContext

深入HttpServlet与ServletContext

作者: knowlege_picker | 来源:发表于2020-08-08 07:21 被阅读0次

    在很多时候我们并不需要知道HttpServlet这个类是怎么构建的,只要知道它把你需要的东西给你封装好了,你只要去重写就好了。

    在宏观上来,servlet是这样子工作的:写好一个servlet,抛给tomcat,tomcat调用servlet的方法(doget、dopost),执行重写的逻辑(往页面上返回处理结果)就大功告成了。

    你可以这样子去理解,但我不建议你仅仅满足于此。你应该打开HelloServlet的源码看一下,而不是把它作为一个黑盒来使用。举个例子:一个人想要看电视,而这个人一点都不懂技术,那他的做法是买一个,按下开关就能看电视了;对于生产线的工人,他要看电视,他的做法是组装一台电视,只需要知道一点接口的知识,简单又便宜;对于一个工程师来说,它的做法是设计出一台价格合适、性能高、私人订制的电视。如果你的目标是成为一名工程师,那么你就需要达到第三种的水平,即了解原理。我能保证了解原理后,你能在这个领域游刃有余!

    HttpServlet

    介绍

    1. Servlet是Sun公司开发的一门用于开发动态Web的语言

    2. 我们把实现了Servlet接口Java的程序叫做Servlet

    3. HttpServlet在实现Servlet接口的基础上,重写了GenericServlet的里的抽象方法Service,

      实现了针对不同的Http请求,自动判断选择调用不同的处理方法,省去了判断请求方法的这一步,

      对HTTP协议的封装,简化了操作,HttpServlet由此得名

    类之间的继承关系

    HelloServlet.png

    实现步骤:

    1. 定义类继承HttpServlet

    2. 复写doGet();dopost();方法

    实现流程:

    HTTPServlet实现流程.jpg

    ServletContext

    ServletContext是什么

    Web容器在启动时,它会为每个web程序创建一个对应的ServletContext对象,它代表了当前的web应用

    ServletContext翻译过来是上下文的意思,是在所用Servlet之上的一个对象,为所有的Servlet共享

    “上下文”可以理解为环境,这个环境中可能会包含很多的信息,例如变量、数据等信息。

    它们的关系如下图: ServletContext.jpg

    ServletContext能干什么

    • 共享数据

      我在这个Servlet中保存的数据,可以在另外一个servlet中拿到

    • 获取初始化参数

    • 请求转发

      测试用例如下:

    demo1:存取数据
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
    {
     ServletContext servletContext = this.getServletContext();
     String name = "hwx";
     servletContext.setAttribute("name",name);
    }
    ​
    demo2:获取初始化参数
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
    {
     res.setContentType("text/html");
     res.setCharacterEncoding("utf-8");
    ​
     PrintWriter writer = res.getWriter();
     writer.print("name:"+this.getServletContext().getAttribute("name"));
     writer.print("url:"+this.getServletContext().getInitParameter("url"));
    }
    ​
    demo3:请求转发
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
    {
     ServletContext servletContext = this.getServletContext();
     RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/index");
     requestDispatcher.forward(req,res);
    }
    ​
    web.xml:
    <webapp>
     <context-param>
     <param-name>url</param-name>
     <param-value>www.baidu.com</param-value>
     </context-param>
    </webapp>
    
    

    HttpServlet阅读推荐

    相关文章

      网友评论

          本文标题:深入HttpServlet与ServletContext

          本文链接:https://www.haomeiwen.com/subject/dvoarktx.html