深入HttpServlet与ServletContext

2020-08-08  本文已影响0人  knowlege_picker

在很多时候我们并不需要知道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能干什么

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阅读推荐

上一篇下一篇

猜你喜欢

热点阅读