Request和Response

    Servlet是运行在服务器上的java小程序,也是服务器上的资源,浏览器可以通过http协议进行请求,服务器处理后响应给浏览器。在这个过程中涉及到了请求和响应两个过程,浏览器和服务器是如何进行传输数据的,request接受请求参数,response响应给浏览器。下面我们来具体看看request和response吧。

在servlet中生命周期service方法:将request用来封装http的请求信息,response封装响应信息。

protected void service(HttpServletRequest req, HttpServletResponse resp)

通过抓包工具fiddler4可以将请求和响应的信息进行拦截,这是请求和响应的相关信息。


【Request】

包括请求行、请求头、请求体

请求行:请求方式 请求路径 协议版本

                //1.1 获得请求方式 *************
		String method = request.getMethod();
		//1.2 可以获得项目名
		String contextPath = request.getContextPath();
		//1.3 可以获得远程主机的ip (地址)
		String ip = request.getRemoteAddr();
		//2.1获得协议
		String scheme = request.getScheme();
		//2.2获得域名
		String servetName = request.getServerName();
		//2.3 获得访问资源的名称
		String servletPath= request.getServletPath();
		//2.4 获得参数 键值对 
		String queryStr= request.getQueryString();
		//2.5 url 统一资源定位符
		//uri 描述符  相对路径
		System.out.println("url:" + request.getRequestURL());
		System.out.println("uri:" + request.getRequestURI());
		//2.6 端口号
		int serverPort = request.getServerPort();
		//3.1 获得协议版本
		String protocol = request.getProtocol();

请求头:向服务器传递附加消息

                Enumeration<String> e = request.getHeaderNames();//迭代器的前身
		while (e.hasMoreElements()) {
			String string = e.nextElement();
			System.out.println(string + " @@ " +request.getHeader(string) );
		

请求体:get请求没有请求体,post请求有,可以获得用户请求的参数。

                //获得一个参数
		String username = request.getParameter("username");
		//获得一组参数
		String [] hobby = request.getParameterValues("hobby");
		//获得所有参数
		Map<String, String[]> parameterMap = request.getParameterMap();
		for(String key : parameterMap.keySet()){
			System.out.println("key:" + key +" @@ "+ "value : " + Arrays.toString(parameterMap.get(key)));
		}
解决请求参数中文乱码问题

    在浏览器发出请求提交html页面时,难免会输入中文,这样就会造成乱码,因为html我们设置的是utf-8格式,通过http协议传输是iso-8859-1的编码,就会造成乱码。

post提交:

request.setCharacterEncoding("utf-8");
get提交:

name=new String(name.getBytes("iso8856-1"),"utf-8");
请求转发

    在servlet中,如果当前web资源不想处理请求时,可以通过forward()将当前请求传递给其他的web资源进行处理,这种方式叫做请求转发。

request.getRequestDispatcher("/Error.jsp").forward(request, response);


【response】

包含响应行、响应头、响应体

响应行:向浏览器响应消息时,发送状态码。

response.setStatus(302); 
response.sendError(404,"this is good error");

响应头:

//响应给浏览器的格式
response.setHeader("content-type", "text/html;charset=utf-8");
response.setContentType( "text/html;charset=utf-8");
//设置下载格式
response.setHeader("content-disposition", "attachment;filename=" + filename); 
//刷新
response.setHeader("refresh", "5;url=https://www.baidu.com/");
response.getWriter().print(new Date().toLocaleString());
//location 重定向 (重新改变方向)response.setStatus(302);response.setHeader("location", "/ee49_day14/TwoServlet");
//等效赋值 状态码 location
response.sendRedirect("/ee49_day14/TwoServlet?a=123&b=456");
响应体:一般都是java编写的源码,传递大量的数据,通过IO流进行传递。字符流和字节流不能同时使用。
response.getWriter().print("b");
response.getOutputStream().print(1);

中文乱码

response.setHeader("content-type", "text/html;charset=utf-8");
response.setContentType( "text/html;charset=utf-8");

请求转发VS重定向

请求转发VS重定向
1、重定向的地址栏会发生改变,而请求转发不会变化;
2、重定向两次请求两次响应,转发一次请求一次响应;
3、重定向路径需要加项目名,转发不需要;
4、重定向可以调整到任意网站,不能传输数据。而转发只能在服务器内部进行;


   

    小结:这就是request和response的相关知识,目前为止,http协议,request,response,servlet,tomcat的理论知识都学习了,那么对web开发也就有了一定的了解,在以后开发也就容易了,我们在项目开发的路上越走越近啊偷笑


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值