转自
https://blog.csdn.net/tong_xinglong/article/details/12972819
如果说DOM是javascript与HTML的桥梁,那么servlet就是前端与后端的桥梁,HttpServletRequest和HttpServletResponse就是之间的信使。
请求与响应相关的类和接口非常多,下表是主要的与请求和相应接口相关的类以及接口。
主要的与请求和相应接口相关的类及接口
在上面给出的类和接口中,最主要的是HttpServletRequest和HttpServletResponse接口,下面将详细介绍这两个接口。
1.HttpServletRequest
HttpServletRequest接口最常用的方法就是获得请求中的参数,这些参数一般是客户端表单中的数据。同时,HttpServletRequest接口可以获取由客户端传送的名称,也可以获取产生请求并且接收请求的服务器端主机名及IP地址,还可以获取客户端正在使用的通信协议等信息。下表是接口HttpServletRequest的常用方法。
说明:HttpServletRequest接口提供了很多的方法。
接口HttpServletRequest的常用方法
2.HttpServletResponse
在Servlet中,当服务器响应客户端的一个请求时,就要用到HttpServletResponse接口。设置响应的类型可以使用setContentType()方法。发送字符数据,可以使用getWriter()返回一个对象。下表是接口HttpServletResponse的常用方法。
接口HttpServletResponse的常用方法
—
以下转自
https://www.cnblogs.com/liuyandeng/p/5336649.html
3. 由来
Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象。从客户端取数据找HttpServletRequest,向服务器发送数据找HttpServletResponse。
3.1 HttpServletRequest
公共接口类HttpServletRequest继承自ServletRequest。客户端浏览器发出的请求被封装成为一个HttpServletRequest对象。所有的信息包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统都包含在其内。
一个 HTTP 请求包含以下三部分:
- a.请求地址(URL)
- b.请求头(Request headers)
- c.实体数据(Entity body)
出现乱码的原因和解决: 查看原文
3.2 HttpServletResponse
HttpServletResponse继承了ServletResponse接口,并提供了与Http协议有关的方法,这些方法的主要功能是设置HTTP状态码和管理Cookie。HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法.
HttpServletResponse对象可以向客户端发送三种类型的数据:
- a.响应头(Response headers)
- b.状态码(Protocol—Status code—Description)
- c.实体数据(Entity body )
4. ServletRequest与ServletResponse
4.1 ServletRequest
代表一个HTTP请求,请求在内存中是一个对象,这个对象是一个容器,可以存放请求参数和属性。
请求对象何时被创建,当通过URL访问一个JSP或者Servlet的时候,也就是当调用Servlet的service()、doPut()、doPost()、doXxx()方法时候的时候,执行Servlet的web服务器就自动创建一个ServletRequest和ServletResponse的对象,传递给服务方法作为参数。
请求对象 由 Servlet容器自动产生,这个对象中自动封装了请求中get和post方式提交的参数,以及请求容器中的属性值,还有http头等等。当Servlet或者JSP得到这个请求对象的时候,就知道这个请求时从哪里发出的,请求什么资源,带什么参数等等。通过请求对象,可以获得Session对象和客户端的Cookie。请求需要指定URL,浏览器根据URL生成HTTP请求并发送给服务器。
4.2 ServletResponse
ServletResponse也是由容器自动创建的,代表Servlet对客户端请求的响应,响应的内容一般是HTML,而HTML仅仅是响应内容的一部分。请求中如果还包含其他资源会依次获取,如页面中含有图片,会进行第二个http请求用来获得图片内容。
相应对象有以下功能:
- 1、向客户端写入Cookie
- 2、重写URL
- 3、获取输出流对象,向客户端写入文本或者二进制数据
- 4、设置响应客户端浏览器的字符编码类型
- 5、设置客户端浏览器的MIME类型。
5. 一个简单的 servlet 容器
Servlet 接口需要实现下面的 5 个方法:
public void init(ServletConfig config) throws ServletException
public void service(ServletRequest request, ServletResponse response) throws ServletException,
java.io.IOException
public void destroy()
public ServletConfig getServletConfig()
public java.lang.String getServletInfo()
-
在某个 servlet 类被实例化之后,init 方法由 servlet 容器调用。servlet 容器只调用该方法一次,调用后则可以执行服务方法了。在 servlet 接收任何请求之前,必须是经过正确初始化的。
-
当一个客户端请求到达后,servlet 容器就调用相应的 servlet 的 service 方法,并将 Request 和 Response对象作为参数传入。在 servlet 实例的生命周期内,service 方法会被多次调用。
-
在将 servlet 实例从服务中移除前,会调用 servlet 实例的 destroy 方法。一般情况下,在服务器关闭前,会发生上述情况,servlet 容器会释放内存。只有当 servlet 实例的 service 方法中所有的线程都退出或执行超时后,才会调用 destroy 方法。当容器调用了 destroy 方法后,就不会再调用 service 方法了。
下面从 servlet 容器的角度观察 servlet 的开发。在一个全功能 servlet 容器中,对 servlet 的每个 HTTP 请求来说,容器要做下面几件事:
- 1.当第一次调用 servlet 时,要载入 servlet 类,调用 init 方法(仅此一次);
- 2.针对每个 request 请求,创建一个 Request 对象和一个 Resposne 对象;
- 3.调用相应的 servlet 的 service 方法,将 Request 对象和 Response 对象作为参数传入;
- 4.当关闭 servlet 时,调用 destroy 方法,并卸载该 servlet 类。
输出缓冲区的介绍
(1)Servlet程序输出的HTTP消息的响应正文首先被写入到Servlet引擎提供的一个输出缓冲区中,直到输出缓冲区被填满或者Servlet程序已经写入了所有的响应内容,缓冲区中的内容才会被Servlet引擎发送到客户端。
(2)使用输出缓冲区后,Servlet引擎就可以将响应状态行、各响应头和响应正文严格按照HTTP消息的位置顺序进行调整后再输出到客户端。
(3)如果在提交响应到客户端时,输出缓冲区中已经装入了所有的响应内容,Servlet引擎将计算响应正文部分的大小并自动设置Content-Length头字段。
(4)如果在提交响应到客户端时,输出缓冲区中装入的内容只是全部响应内容的一部分,Servlet引擎将使用HTTP1.1的chunked编码方式(通过设置Transfer-Encoding头字段来指定)传输响应内容。
输出缓冲区的有关方法
System.out.println(response.getBufferSize()); //读取缓存区的大小
response.setBufferSize(1024); //设置缓冲区的的大小,会小与你设置的值
System.out.println(response.getBufferSize());
int len=response.getBufferSize(); //填满缓冲区
for(int i =0;i<len;i++){
System.out.println("w");
}