请求和响应

一、HttpServletRequest和HttpServletResponse

HttpServletRequest用于封装HTTP请求消息,简称request对象
HttpServletResponse用于封装HTTP响应消息,简称response对象

二、HttpServletResponse对象
1.HttpServletResponse是一个接口,它的父接口是ServletResponse,在开发中通常使用HttpServletResponse
2.响应信息分为三部分:响应行、响应头、响应正文(响应体)
3.发送状态码的相关方法:
(1)setStatus(int status)方法
(2)setError(int sc)方法
在这里插入图片描述
3. 发送响应消息头相关的方法:
响应消息头的数据格式:key-value的形式,有的是一个key,一个value,有的是一个key,多个value

(1).设置响应消息头:

一个key ,一个value
setHeader(String key,String value);
比如:setHeader(“aa”,“AA”);
如果:setHeader(“aa”,“AA”);
setHeader(“aa”,“BB”);
最终的结果:aa这个头对应的值就是BB
一个key,对应多个value
addHeader(String key,String value);

(2).最终的结果:aa这个头对应的值AA和BB
4.发送响应体相关的方法:

第一个方法:getOutputStream(),通过response向浏览器返回图片、视频等二进制数据的文件,当然也可以向浏览器、
返回文本数据。

第二个方法:getWriter(),通常response向浏览器返回文本数据,不能向浏览器返回图片、视频等二进制文件。

解决中文输出的乱码问题
第一种方式:字节流向浏览器输出中文,会不会乱码:可能会出现乱码。
出现乱码的原因:服务器端的编码格式和浏览器的编码格式不一致引起的。

2.处理乱码:服务器端的编码和浏览器端的编码保持一致。

3.让浏览器端的编码也是utf-8
response.setHeader(“Content-Type”, “text/html;charset=utf-8”);
4.让服务器端的中文编码格式是utf-8
out.write(data.getBytes(“utf-8”));
处理字节流的中文乱码问题两种方式:
第一种:response.setHeader(“Content-Type”, “text/html;charset=utf-8”);

第二种:response.setContentType(“text/html;charset=utf-8”);

第二种方式:字符流向浏览器输出中文,会不会乱码:肯定乱码。
乱码的形式:?? ,这个问号就表示中文的编码格式是采用iso-8859-1编码的,这种编码格式不支持中文。

处理原则:让浏览器和服务器的编码保持一致:
1.处理字符流的中文乱码问题

2.处理服务器的编码,让这个编码支持中文
response.setCharacterEncoding(“utf-8”);

3.处理器浏览器端的编码:
response.setHeader(“Content-Type”, “text/html;charset=utf-8”);
String data=“中国”;

4.获取字符流
PrintWriter pw = response.getWriter();
pw.print(data);
处理字符流的中文乱码问题:
第一种方式:response.setCharacterEncoding(“utf-8”);
response.setHeader(“Content-Type”, “text/html;charset=utf-8”);

第二种方式:response.setContentType(“text/html;charset=utf-8”);

四、HttpServletRequest请求对象

(1).HttpServletRequest它是一个接口,它的父接口ServletRequest,在开发中,常用的是带协议的请求对象。
请求消息:请求行,请求头,请求参数。

HttpServletRequest请求对象

1.获取请求行消息的相关方法:
常用的请求行方法:
1.获取请求提交的方式: getMethod();
2.获取请求的协议: getProtocol();
3.获取项目名称:getContextPath();
4.获取servlet路径:getServletPath();
5.获取请求路径: getRequsetURI(),getRequestURL();
uri对应的值:/项目名称/servlet路径
url对应的值:http://localhost:8080/uri

2.获取请求消息头相关的方法

  1. 根据消息头,获取值: String value = getHeader(消息头的名称);
  2. 获取所有的消息头: Enumeration er = getHeaderNames();
    根据Referer请求消息头,做一个防盗链的案例:
    难点:怎么判断这个发起的下载请求是从别的网站上发起的?
    解决方法:根据Referer请求头对应的值,是否包含了服务器的名称
    如果包含,就说明是从本网站下载的,否则就不是。
    3.获取请求参数相关的方法:

1.根据name属性值,获取用户输入的值:String value = getParameter(name属性对应的值);
2.根据name属性值,获取用户选择的值:String[] vaules = getParameterValues(name属性对应的值);
3.没有参数,获取所有值:Map<String ,String[]> map = getParameterMap();

4.解决请求参数的中文乱码问题:
中文乱码处理分两种情况:
第一种情况:处理get方式提交的中文乱码
使用的String的构造方法解决中文乱码:new String(字节数组,编码格式);
代码:String newvalue = new String(value.getBytes(“ISO8859-1”),“utf-8”);
第二种情况:处理post请求的中文乱码问题:
post提交,会把参数首先提交到request对象的缓冲区中,缓冲区默认编码是ISO8859-1,不支持中文
处理方法:把request缓冲区的编码给设置成支持中文的码表格式。
代码:request.setCharacterEncoding(“utf-8”);

5.通过Requset对象传递数据
什么域对象:在一定的范围内,可以存值和取值。
request域对象:在一次请求中,可以存值和取值。

存值: setAttribute(String key,Object obj);
取值:Object obj = getAttribute(String key);
移除: removeAttribute(String key);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值