JavaWeb中的HttpServletRequest与HttpServletResponse

本文详细介绍了HttpServletRequest对象在Tomcat服务器中的作用,包括请求的生命周期、参数获取、域属性操作以及请求的其他信息。此外,还探讨了HTTP请求中文乱码的原因及解决方案,并对比了请求转发和重定向的区别。最后,讲解了如何处理响应中文乱码问题,确保数据正确传输。
摘要由CSDN通过智能技术生成

HttpServletRequest:客户端请求到达Tomcat服务器后,Tomcat对请求进行了封装,存放到HttpServletRequest的实现类RequsetFade的对象中.
(一请求)
请求的生命周期:
HttpServletRequest实例对象是客户端请求发送到服务器后,服务器进行接卸,同时创建HttpServletRequest的实现类RequsetFade的对象,将请求的数据放到其中,请求对象是服务器创建的.
当服务器向客户端发送响应结束后,HttpServletRequest实例对象被销毁.

请求参数的获取:
参数是以键值对的形式存放的,key为字符串类型,value为字符串数组类型
//获取指定名称的参数值
request.getParameter(getServletName())
//获取所有参数名称
request.getParameterNames()
//获取指定名称的所有值
request.getParameterValues(getServletName())

请求的域属性:
在request中存在域属性空间,用于存放有名称的数据,该数据只在当前request请求中可以访问.

	//域属性空间存放数据
	request.setAttribute("address", "中国");
	
	//请求转发到other 转发后请求生命周期并未结束
	RequestDispatcher rd= request.getRequestDispatcher("/otherservlet");
	rd.forward(request, response);
	//在otherservlet中获取域属性中的数据
	String aa =(String)request.getAttribute("address");
   //删除指定域属性
   request.removeAttribute("address");

请求的其他信息:

//获取请求的url
request.getRequestURL();
//获取请求的uri,url去除协议/ip/端口部分
request.getRequestURI();
//获取当前web的根路径
request.getContextPath();
//获取客户端地址
request.getRemoteAddr();
//获取url-pattern中的精确部分
request.getServletPath();
//获取url-pattern中的非精确部分
request.getPathInfo();

请求中文乱码:
乱码原因:
Http协议传输底层使用的是TCP传输协议,是基于字节流的通信协议.
客户端通过浏览器提交一个包含UTF-8编码格式的中文请求时,浏览器会通过字节流传给服务器,Tomcat接收到之后并不知道客户端的编码格式,会按照ISO8859-1编码格式进行编码所以会出现乱码.
其中Tomcat9以上服务器对GET请求的中文乱码已经解决.
乱码处理:
//后台代码设置post请求的中文编码格式
request.setCharacterEncoding(“UTF-8”);
//get请求中文乱码处理,编辑Tomcat服务器的server.xml配置文件,
节点 添加URIEncoding=’“UTF-8”,缺点需重启服务器
//请求中文乱码处理二,首先获取参数值,按照ISO8859-1编码解析,然后转换为UTF-8编码格式

(二响应)
Web服务器接收到http请求或,需要从客户单获取相关请求信息,需要从httpservletRequest中获取;若需要向客户端发送数据,则需要通过httpservletRestponse对象完成.

servletresponse接口有一个方法getWriter(),用于获取一个输出流对象,printWriter,该输出流对象专门用于向客户端浏览器输出字符数据的,成为标准输出流.当请求-响应结束后,printwriter对象会被服务销毁.

响应中文乱码:

//设置响应的MIME类型
response.setContentType("text/html;charset=UTF-8");
response.getWriter().append("Served at: ").append(request.getContextPath());

注意需要在printwriter对象创建前设置MIME类型

请求转发与重定向:
在这里插入图片描述
请求转发:一次请求,服务器内部跳转-响应;
请求重定向:一次请求-响应-重定向-请求-响应…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++业余爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值