说一下Servlet里面得request和response

当一个servlet被调用的时候,我们一般继承带协议的httpServlet,大方向上是下图这样

在这里面request和response起了什么作用呢?

来细究一下。

request:
1.封装了客户端所有的请求数据:

请求行,请求头,请求体(get没体)

2.而当涉及到http协议时,我们还可以利用request获取协议的信息:

获取客户端ip:request.getRemoteAddr()

获取请求方式:request.getMethod()

 获取http请求头:

String getHeader(String name) ,适用于单值头

int getIntHeader(String name),适用于单值int类型的请求头

long getDateHeader(String name) ,适用于单值毫秒型的请求头

Enumeration<String> getHeaders(String name) 适用于多只请求头

获取请求url

getRequestURL():获取请求url,等于不包含参数的整个请求路径

getScheme():获取请求协议

getServerName():获取服务器名

getServerPort():获取服务器端口号

getContextPath():获取项目名

getServletPath():获取Servlet路径

getRequestURI():获取请求URI,等于项目名加Servlet路径

getQueryString():获取请求参数

3.获取请求参数,请求参数有一个值或多个值的。

String getParameter(String name) 获取单值参数

String[] getParameterValues(String name) 获取多值参数

Enumeration<String> getParameterNames() 获取所有参数名

Map<String,String[]> getParameterMap() 获取所有参数,key为参数名,value为参数值

4.请求转发和请求包含

  需要使用

   RequestDispatcher rd=request.getRequestDispatcher(''/MyServlet'');

请求转发:rd.forward(request,response);

请求包含:rd.include(request,response):

有时候一个客户端要求分给A和B两个Servlet干同一件事,但是A和B都做不了,A是怎么做的呢,他和C说,我把这件事给你做,我设置设置响应头,你把响应体给我写了,你别告诉头,然后C做完了把响应体返回给A,A就拿着去交差了,这就是请求转发;而B呢,他会和C说,我自己做不了这件事,你和我一起做吧,我把响应头和响应体分分,你写一些我写一些,两者一起做完了,B拿着去交差了,这就是请求包含。

 

 

5.request域

在同一个请求内使用request.setAttribute(),request.getAttribute()来传值,前一个存,后一个取。

response

涉及到http协议时,

1.可以通过response发送状态码:200(成功),404(资源未找到),302(转发重定向,会伴着一个URL一起发送回去),304(浏览器有缓存),500(服务器端错误)

response.sendErr(int sc)

response.sendErr(int sc,String ms)

response.setStatus(int sc)

2.响应头

response.setHeader(String name,String value)

response.addHeader(String name,String value)

response.setIntHeader(String name,int value)

response.addIntHeader(String name,int value)

response.setDateHeader(String name,long value)

response.addDateHeader(String name,long value)

3.respone的两个流

ServletOutputStream:用来向客户端发送字节数据

PrintWriter:用来向客户端发送字符数据,需要设置编码

4.重定向

respone.sendRedirect("地址") 重定向

相当于

  response.setHeader("Location","地址");

 response.setStatus(302);

原文地址:https://www.cnblogs.com/wxw7blog/p/7780198.html