程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-05(1)

Request 与 Response

发布于2021-06-12 13:18     阅读(885)     评论(0)     点赞(16)     收藏(5)


我们为什么需要Request 与 Response?

  在浏览器与应用服务器交互的过程中,数据传输是非常多的,除了用户会录入大量的表单外,还会有一些根据HTTP协议而自带的数据。这些数据如果每一个都作为一个参数来传递的话,那也太多了,而且对应自定义的数据传递也不友好。这时,我们想到面向对象思想,使用对象的形势将数据打包,Request 与 Response则是在Servlet中使用的请求数据对象与响应数据对象。

在这里插入图片描述

Request介绍

  当Web容器收到浏览器发送的请求时,会将遵循HTTP协议的请求报文(《HTTP协议》),封装为一个Request对象,HTTP请求的头、行、体信息,均会包含在这个对象里。然后将Request对象发送给具体的Servlet实现类,所以我们在编写Servlet实现类时,可以直接接收Request对象,并取出其中所需数据即可。

  获取请求头数据、获取请求行数据、获取用户数据的示例如下:

  具体开发过程中关注用户数据更多一些,getParameter()方法用的字段名为JSP输入标签的name名。对于GET与POST方法,均是通过getParameter()来获取数据。

public class RequestServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//获取请求头数据
				//获取请求方式
					String method = req.getMethod();
					System.out.println(method);
				//获取请求URL
					StringBuffer url=req.getRequestURL();
					System.out.println(url);
					//获取URI
					String uri=req.getRequestURI();
					System.out.println(uri);
				//获取协议
					String h=req.getScheme();
					System.out.println(h);
		//获取请求行数据
					//获取指定的请求行信息
					String value=req.getHeader("aaa");
					System.out.println(value);
					//获取所有的请求行的键的枚举
					Enumeration e = req.getHeaderNames();
					while(e.hasMoreElements()){
						String name=(String) e.nextElement();
						String value2=req.getHeader(name);
						System.out.println(name+":"+value2);
					}
		//获取用户数据
					//如果要获取的请求数据不存在,不会报错,返回null。
					String name=req.getParameter("uname");
					String pwd=req.getParameter("pwd");
					System.out.println(name+":"+pwd);
					//String fav=req.getParameter("fav");
					String[] favs=req.getParameterValues("fav");
					if(favs!=null){
						for(String fav:favs){
							System.out.println(fav);
						}
					}
					//获取所有的用户请求数据的键的枚举集合---req.getParameterNames()	
	}
}

Response介绍

  Web容器在调用Servlet实现类时,也会同时传一个空的Response对象,以便Servlet做返回使用。

  与Request对应,Response对象主要是用来设置响应内容的,包括:设置响应状态行、设置响应头、设置响应实体。

  Response设置示例如下:

public class ResponseServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
			//获取请求信息并处理请求,此处省略
				
			//处理响应结果
				//设置响应头
					resp.setHeader("mouse", "small yellow duck");//已有的响应头
					resp.addHeader("key", "value");//新增响应头
				//设置响应编码格式
					//设置编码格式,解决响应数据中文乱码问题
					resp.setContentType("text/html;charset=utf-8");
				//设置响应状态码
					//resp.sendError(404, "this Method is not supported");
				//设置响应实体
					resp.getWriter().write("<b>今晚的月色真美,风也温柔</b>");
	}
}

  Response也可以使用如下方式处理中文乱码问题:

response.setCharacterEncoding("utf-8");    //设置 HttpServletResponse使用utf-8编码
response.setHeader("Content-Type", "text/html;charset=utf-8");    //通知浏览器使用utf-8解码

原文链接:https://blog.csdn.net/HhmFighting/article/details/117754469



所属网站分类: 技术文章 > 博客

作者:小胖子爱java

链接:http://www.javaheidong.com/blog/article/222020/49e87101b9ef650d4c87/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

16 0
收藏该文
已收藏

评论内容:(最多支持255个字符)