请求,响应对象:request和response
流程:
1.服务器接收请求后,先创建request和response对象,把请求数据封装到request对象中
2.服务器调用Servlet的service()方法并把这两个对象传递给service()方法
3.在service()中通过request对象获取请求数据,使用response对象向客户端完成响应
4.每次请求服务器都会创建新的request和response对象 每个请求有自己独自的request和response对象response响应对象:HttpServletResponse
ServletResponse-->与协议无关的类型
HttpServletResponse-->与http协议相关的类型
response对象的功能分为以下四种:
1.设置响应头信息
2.发送状态码
3.设置响应正文
4.重定向
---------------------------------------------------------------------------------------------------------------
响应头Header设置:Content-Type、Refresh、Location等等 键值对
setHeader(String name, String value): 适用于单值的响应头
addHeader(String name, String value): 适用于多值的响应头
response.addHeader("aaa", "A");
response.addHeader("aaa", "AA");
setIntHeader(String name, int value): 适用于单值的int类型的响应头
addIntHeader(String name, int value): 适用于多值的int类型的响应头
setDateHeader(String name, long value):适用于单值的毫秒类型的响应头
----------------------------------------------------------------------------------------------------------------
状态码发送:
sendError(int sc) 发送错误状态码,例如404、500
sendError(int sc, String msg) 发送错误状态码+错误信息
setStatus(int sc) 发送成功的状态码
-----------------------------------------------------------------
响应体(正文):通常是html、也可以是图片!
response的两个流:
ServletOutputStream 向客户端发送字节数据
ServletOutputStream out = resopnse.getOutputStream();
PrintWriter 向客户端发送字符数据,需要设置编码。
PrintWriter writer = response.getWriter();
两个流不能同时使用
-----------------------------------------------------------------
重定向:设置302,设置Location
sendRedirect(String location)方法
response.setHeader("Location","路径") +
response.setError(302)
定时刷新:Refresh
response.setHeader("Refresh","时间;URL=路径")
===================================================================
request请求对象:HttpServletRequest
request对象封装了客户端所有的请求数据!
{ 请求行,请求头,空行,请求体(GET没体)}
请求数据就是为了获取数据的!
获取常用信息
request.getRemoteAddr() 获取客户端IP
request.getMethod() 获取请求方式,POST/GET
获取请求头
request.getHeader(String name) 单值头
request.getIntHeader(String name) 单值int类型
request.getDateHeader(String name) 单值毫秒类型
request.getHeaders(String name) 多值请求头
获取请求
request.getScheme(); 获取协议,http
request.getServerName(); 获取服务器名,localhost
request.getServerPort(); 获取服务器端口 8080
request.getContextPath(); 获取项目名
request.getServletPath(); 获取Servlet路径,
request.getQueryString(); 获取参数部分,即问号后面的部分。 u se username=xxx&password=yyy
request.getRequestURI(); 获取请求URI=项目名+Servlet路径。
request.getRequestURL(); 获取请求URL=不包含参数的整个请求路径。
请求参数:由客户端发送给服务器的! 可能在请求体中(POST), 也可能在URL之后(GET)
获取请求参数
String getParameter(String name): 获取指定名称的单值请求参数值
String[] getParameterValues(String name): 获取指定名称的多值请求参数
Enumeration<String> getParameterNames():获取所有请求参数名称
Map<String,String[]> getParameterMap(): 获取所有请求参数,key+value
-------------------------------------------------------------------------------------------------------------------
请求转发和请求包含
一个请求需要多个Servlet协作,一个请求跨多个Servlet共同完成
请求转发:由下一个Servlet完成响应体!当前Servlet可以设置响应头!(留头不留体)
请求包含:由两个Servlet共同未完成响应体!(都留)
无论是请求转发还是请求包含,都在一个请求范围内!
---> 使用同一个request和response使用request获取RequestDispatcher对象,方法参数是被转发或包含Servlet的Servlet路径
RequestDispatcher rd = request.getRequestDispatcher("/MyServlet");//路径
请求转发:rd.forward(request,response);
请求包含:rd.include(request,response);
请求转发与重定向区别
请求转发是一个请求一次响应,重定向是两次请求两次响应
请求转发地址栏不变化,重定向会显示后一个请求的地址
请求转发只能转发到本项目其他Servlet,重定向还可以定向到其他项目(范围更大)
请求转发是服务器端行为,只需给出转发的Servlet路径,而重定向需要给出request URI,即包含项目名!
-------------------------------------------------------------------------------------------------------
request域
Servlet中三大域对象:request、session、application,都有如下三个方法:
void setAttribute(String name, Object value)
Object getAttribute(String name)
void removeAttribute(String name)
同一请求范围内使用request.setAttribute()、request.getAttribute()来传值
前一个Servlet调用setAttribute()保存值
后一个Servlet调用getAttribute()获取值
同一范围内只能使用请求转发和包含(一个请求),不能使用重定向(两个请求)
==================================================================
编码:
字符编码 请求编码 响应编码 URL编码
乱码原因:
1.浏览器对来自服务器的数据的编码和解码方式不一致
eg:浏览器gbk解码,发来的数据utf-8编码
2.不支持中文的编码后本来是乱码,浏览器解码乱码,更成乱码!
eg:服务器iso-xx编码中文数据=乱码,浏览器用gbk==解码乱码==》!!乱码
字符编码:iso-8859-1(不支持中文)、gb2312、gbk、gb18030(系统默认编码,中国国标码)响应编码:
第一步:response.setCharaceterEncoding()设置编码格式
或者:response.setHeader("Content-Type", "text/html;charset=编码格式")
第二步:response.getWriter()服务器再发送字符
解释:服务器设置响应头给浏览器告知编码格式,浏览器就会才行对应解码方式请求编码:浏览器给服务器发送的参数的编码方式
客户端首先向服务器请求页面(表单或者超链接)时,服务器响应编码是啥,客户端请求编码就是啥
请求编码处理分为两种:GET和POST
GET 请求参数不在请求体中 反解码成字节,再编码
POST 请求参数在请求体中 获取参数前调用request.setCharacterEncoding("utf-8")URL编码:客户端与服务器之间传递参数用的一种方式
客户端get请求使用中文没有URL编码,可能会丢失字节
使用表单,表单提交数据直接采用URL编码,服务器自动解码
URL编码需要先指定一种字符编码,把字符串解码后,得到byte[],然后把小于0的字节+256,再转换成16进制。前面再添加一个%。最后我们需要把链接中的中文参数,使用url来编码
* POST请求默认就使用URL编码!tomcat会自动使用URL解码!
* URL编码:String username = URLEncoder.encode(username, "utf-8");
* URL解码:String username = URLDecoder.decode(username, "utf-8");
==================================================================
java response 内容 java中response方法
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java response执行指定页面 java中response方法
1.response ServletResponse -- 通用的response提供了一个响应应该具有最基本的属性和方法 | |-HttpServletRespon
java response执行指定页面 html 响应头 默认编码