Request(请求) & Response(响应)
- Request:获取请求数据
- Response:设置响应数据
一、Request继承体系
- Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中
- 使用request对象,查阅JavaEE API文档的HttpServletRequest接口
二、Request获取请求数据
-
请求数据分三部分
-
请求参数获取方式:
1.Get方式:String getQueryString()
2.Post方式:BufferedReader getReader()
麻烦
考虑提供统一方法
-
请求参数中文乱码
Post:设置输入流的编码request.setCharacterEncoding("UTF-8");
Get:new String(username.getBytes("ISO-8859-1"),"UTF-8");
tomcat 8 之后不用写
三、Request请求转发
- 请求转发
一种在服务器内部的资源跳转方式 - 实现方式:
req.getRequestDispatcher("资源B路径‘’).forward(req,resp)
- 特点:
1.浏览器地址栏路径不发生变化
2.只能转发到当前服务器的内部资源
3.一次请求,可以在转发的资源中使用request共享数据
四、Response设置响应数据功能
- 响应数据分三部分
五、Response完成重定向
- 重定向:一种资源跳转的方式
- 实现方式
// //重定向
// //1.设置响应状态码 302
// response.setStatus(302);
// //2.设置响应头
// response.setHeader("Location","/tomcat-app2/resp2");
//简化方式
response.sendRedirect("/tomcat-app2/resp2");
- 路径问题
明确路径谁使用
浏览器使用–>加虚拟目录(重定向、表单等)
服务端使用–>不需要加虚拟目录(转发)
六、Response响应字符数据
//1.获取字符输出流
response.setContentType("text/html;charset=utf-8"); //中文乱码问题
PrintWriter writer = response.getWriter();
//content-type
//response.setHeader("content-type","text/html");
writer.write("你好");
writer.write("<h1>aaa</h1>");
//细节:流不需要关闭
七、Response响应字节数据
//1.读取文件
FileInputStream fls = new FileInputStream("d://a.jpg");
//2.获取response字节输出流
ServletOutputStream os = response.getOutputStream();
//3.完成流的复制
// byte[] buff = new byte[1024];
// int len = 0;
// while((len = fls.read(buff))!=-1){
// os.write(buff,0,len);
// }
// fls.close();
IOUtils.copy(fls,os);
}