一、servlet是什么?
Servlet是JavaEE的三大规范(接口)之一从另一个角度来说,它也是JavaWeb的三大组件之一。JavaWeb三大组件分别是servlet程序、Filter过滤器、Listener监听器。
它本质上是一个运行在服务器上的一个小程序,它的主要功能是接收用户发来的请求,并之后对其进行响应,把处理后的结果返回给用户。
在JavaEE平台上,处理TCP连接,解析HTTP协议这些底层工作统统扔给现成的Web服务器去做,我们只需要把自己的应用程序跑在Web服务器上。为了实现这一目的,JavaEE提供了Servlet API,我们使用Servlet API编写自己的Servlet来处理HTTP请求,Web服务器实现 Servlet API接口,实现底层功能。下图就是对servlet的一个简单的解释。
下面使用代码详细介绍servlet的实现过程,使用servlet的最简单的一个方式就是重写Servlet类中的service()方法,Servlet的service()方法的两个参数ServletRequest和ServletResponse正是对请求和响应的封装,Servlet接受请求后,可以进行响应的处理:例如:
@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse)
throws ServletException, IOException {
System.out.println("Hello Servlet 被访问了");
}
这个时候我们的请求就会被service()方法处理,servletRequest中的数据就是我们将要处理的数据,而servletResponse是处理后的结果,只是此时我们没有对实际数据进行处理。
初步了解了servlet的基本概念之后,下面介绍一下servlet的上下文对象(ServletContext)
二、ServletContext的几个作用:
1)、读取全局配置参数
2)、管理当前工程目录下的资源文件
服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。
下面我们先对资源的管理进行一个介绍:
servletContext 之所以可以获取服务的资源,因为它是一个域对象,而域对象可以在服务器的内存上创建存储空间,用于在不同动态资源(servlet)之间传递与共享数据。下面是所有域对象中的几个公共方法
1、往域对象里面添加数据,添加时以key-value形式添加
setAttribute(name,value);name是String类型,value是Object类型;
2、根据指定的key读取域对象里面的数据
getAttribute(name);
3、根据指定的key从域对象里面删除数据
removeAttribute(name);
下面是一个使用上下文存储和获取数据的案例
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//存储数据
// getServletContext()方法用于获取上下文对象,获取该对象之后才能使用对象中的set..()方法
getServletContext().setAttribute("username", "admin");
//获取数据, 此时方法的结果是(admin)
getServletContext().getAttribute("username")
}
再来了解一下servletContext怎么获取配置:
1.我们现在去配置文件中添加我自己想要的配置(此处我们使用全局配置,即所有的servlet都可以使用)
<context-param>
<param-name>配置名称</param-name>
<param-value>配置对应的值</param-value>
</context-param>
2.之后我们就可以使用方法根据配置的名称来获取我们所添加的配置
getServletContext().getInitParameter(配置名称);//根据指定的参数名获取配置的值
三、servlet的生命周期
Servlet依托于Servlet容器运行,它包含三个方法,他们分别在特定的时机被Servlet容器所调用:
- init(),当Servlet第一次被容器加载进入内存后调用,用于载入一些特定的资源和配置。
- service(),一旦有对应请求地址的HTTP请求访问,该方法就会被调用,它会根据HTTP请求中的method信息将请求分发至相应的方法(例如:doGet(), doPost())进行处理,service()方法一般不需要开发者重写。
- destroy(),Servlet被销毁时调用,一般用来释放、清理资源。
以上就是我对servlet的理解,如果有错,很高兴接受您的指正,如果您有自己见解,欢迎在评论区留言讨论
本文暂时没有评论,来添加一个吧(●'◡'●)