Request和Response

什么是Request和Response

        Request是服务器对浏览器请求的封装,Response是服务器对服务器响应的封装

        Request是用来取出请求信息的,Response是添加要返回给浏览器的信息

        

二、使用response对象设置http响应协议中的信息

   响应首行

HTTP/1.1 200 OK
  • setStatus:设置正常的响应状态码 status code
  • setStatus:设置正常的响应状态码,状态码描述 status message,过时,因为正常状态下,状态码信息不会显示给用户,所以没有必要设置
  • sendError:设置错误的状态码
  • sendError:设置错误的状态码,包含错误信息

响应头

key:value
  • setHeader:设置一个键值对,值为string
  • setDateHeader:设置一个键值对,值为long,long常用于毫秒的表示
  • setIntHeader:设置一个键值对,值为int类型
  • setHeader:添加一个键值对,值为string
  • setDateHeader:添加一个键值对,值为long,long常用于毫秒的表示
  • setIntHeader:添加一个键值对,值为int类型  
  • add 和 set 区别在于,前者直接添加(key是可以重复的),后者会修改原来的,没有才会添加

几个常见的响应头:

ContentType:text/html;charset=utf-8
Refresh:3;url=http://path 3秒后跳转网页

响应空行

响应正文

需要发送的资源
  • response.getWriter():获取字符流
  • 父类方法getOutputSteam():获取输出字节流

重定向

方法一:

           1. 在响应头中添加302状态码,告诉浏览器需要进行重定向 

response.setStatus(302)

            2.在响应头中添加Location,指定重定向的位置 

response.setHeader("Location", ".....");

方法二:

response.setRedirect(".....")

通过访问Servlet向浏览器传递一个图片

// 获取图片输入流
InputStream is = getServletContext().getResourceAsStream("/WEB-INFO/mm.jpg");
// 获取浏览器的输出流
byte[] buffer = new byte[1024];
// 将图片篇输入流写出到浏览器中
int len = -1;
while((len = is.readBuffer(buffer)) != -1){
    os.write(buffer, 0, len);
    os.flush();
}

通过访问Servlet下载文件

ServletContext sc = getServletContext();
String mimeType = sc.getMimeType("下载的文件名称"); // 传入下载的文件名称,会根据名称的拓展名识别mime类型
response.setContentType(type);

通过request对象获取http请求协议中的内容

请求首行

请求方式 请求路径 协议/版本号
request.getMethod() 请求方式
request.getContextPath(),getServletPath()…获取请求路径
父类方法 request.getScheme() 获取请求协议

请求头

键值对
request.getHeader(String name)
request.getIntHeader(String name)
request.getDateHeader(String name)
request.getHeaderNames()
request.getHeaders(Sring name)一个key对应多个value

请求空行

请求正文(post才有)

但是以下方法,无论是get还是post请求都可以获得参数值
父类方法 String getParameter(String name)
Map<String, String[]> getParameterMap()
Enumeration getParameterNames()
String[] getParameterValues(String name)

解决响应和请求的乱码问题

处理get请求编码问题

解决方案:在conf/server.xml中URIEncoding="UTF-8" 69行
<Connector URIEncoding="UTF-8" 
    connectionTimeout="20000" 
    port="8888" 
    protocol="HTTP/1.1" 
    redirectPort="8443"/>

处理post请求编码问题

服务器响应时的数据,即服务器向浏览器传递的数据的编码格式由服务器决定:

编码:

getByte("编码表")                                字节流
response.setCharacterEncoding(编码表)            字符流

解码:

response.setHeader("ContentType","text/html;charset=utf-8")            设置响应消息头

客户端发送请求时的乱码解决: 
GET提交,参数在URL中,设置URL的解码配置,服务器默认使用IOS-8855-1拉丁码表解码URL,我们可以通过 tomcat/config/server.xml配置文件中:

<Connector 
     connectionTimeout="20000" 
     port="8080" 
     URIEncoding="UTF-8"  //添加属性
     protocol="HTTP/1.1" 
     redirectPort="8443"/>

POST提交

request.setCharacterEncoding("utf-8");
参考文章







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值