java servlet深入理解_深入理解Servlet

深入理解Servlet

什么是Servlet

在Java web中Servlet是一种用来处理请求和发送响应的组件。

image54.png

Servlet和Tomcat的关系

Tomcat 是Web应用服务器,是一个Servlet/JSP容器。 Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户。而Servlet是一种运行在支持Java语言的服务器上的组件,Servlet最常见的用途是扩展Java Web服务器功能,提供非常安全的,可移植的,易于使用的CGI替代品。

image55.png

在整个请求和响应的过程中:

Tomcat将http请求文本接收并解析,然后封装成HttpServletRequest类型的request对象,所有的HTTP头数据读可以通过request对象调用对应的方法查询到。

Tomcat同时会要响应的信息封装为HttpServletResponse类型的response对象,通过设置response属性就可以控制要输出到浏览器的内容,然后将response交给tomcat,tomcat就会将其变成响应文本的格式发送给浏览器

Java Servlet API 是Servlet容器(tomcat)和servlet之间的接口,它定义了serlvet的各种方法,还定义了Servlet容器传送给Servlet的对象类,其中最重要的就是ServletRequest和ServletResponse。所以说我们在编写servlet时,需要实现Servlet接口,按照其规范进行操作。

Servlet生命周期

通过跟踪源码会发现,Servlet的根是一个接口,代码如下:

public interface Servlet {

void init(ServletConfig var1) throws ServletException;

ServletConfig getServletConfig();

void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

String getServletInfo();

void destroy();

}

这个接口定义了Servlet最重要的方法,service方法用于处理请求和响应,在它前后分别是init初始化方法和destroy回收资源方法。

image56.png

Servlet中的几个重点对象

1. ServletConfig

public interface ServletConfig {

String getServletName();/获取servlet的名称,也就是我们在web.xml中配置的servlet-name

ServletContext getServletContext();//获取ServletContext对象,关于ServletContext的内容在下面介绍

String getInitParameter(String var1);//获取在servlet中初始化参数的值。这里注意与全局初始化参数的区分。这个获取的只是在该servlet下的初始化参数

Enumeration getInitParameterNames();//获取在Servlet中所有初始化参数的名字,也就是key值,可以通过key值,来找到各个初始化参数的value值。

}

ServletConfig接口中定义了如上几个方法,用于操作web.xml中的内容。

2. ServletContext

tomcat为每个web项目都创建一个ServletContext实例,tomcat在启动时创建,服务器关闭时销毁,在一个web项目中共享数据,管理web项目资源,为整个web配置公共信息等,通俗点讲,就是一个web项目,就存在一个ServletContext实例,每个Servlet读可以访问到它。因此,它封装了一些公共资源的访问。

web项目中共享数据

getAttribute(String name)

setAttribute(String name, Object obj)

removeAttribute(String name)

整个web项目初始化参数 (这个就是全局初始化参数,每个Servlet中都能获取到该初始化值)

getInitPatameter(String name)

getInitParameterNames()

获取web项目资源

getServletContext().getRealPath("/WEB-INF/web.xml")

getServletContext().getResourceAsStream("/WEB-INF/web.xml")

指定路径下的所有内容

getServletContext().getResourcePaths("/WEB-INF")

3. request

request就是将请求文本封装而成的对象,所以通过request能获得请求文本中的所有内容,请求头、请求体、请求行。

4. response

response和request相反,response定义了返回给客户端的数据。

你可能感兴趣的:(java,servlet深入理解)