response
response响应过程
在发送一个请求时,会找到服务器引擎(tomcat),引擎会找到对应的web应用并创建request对象和reponse对象,并且创建request对象和response对象,找到应用后会执行应用web.xml在根据url-patten的内容创建servlet对象.吧request和response对象传入到方法中,拿到response对象后自己可以往响应中写入一些自己给客户端的内容,写的内容是存到一个response缓冲区中,当方法执行结束之后,tomcat就会从response缓冲区当中读取数据
设置响应行reponse.setState(int code)
默认是200
添加响应头response.addHeader("name","123123")
设置date类型response.addDateHeader("my-Date",new Date().getTime());
设置int类型的值为int类型的头信息response.addIntHeader("qqq",1);
- setHeader(name, value):如果Header中没有定义则添加,如果已定义则用新的value覆盖原用value值。
- addHeader(name, value):如果Header中没有定义则添加,如果已定义则保持原有value不改变。
重定向
response.setStatus(302);//设置状态码
response.setHeader("location","/qqq");//设置重定向地址
也可以只写一行
response.setHeader("refresh","10;url=/admin/index");//过10秒之后去转发
响应体
设置响应体
response.getWriter().write("!@3");
//写文件
File file = new File(url);
HttpHeaders headers=new HttpHeaders();
//告诉浏览器以附件的形式打开,并且设置文件名的编码,防止乱码
//通过ServletContext获取文件名对应的mime类型
String mimeType = request.getSession().getServletContext().getMimeType(filename);
response.setContentType(mimeType);//这么写的话可以直接解析图片或者mp4之类的文件
response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(filename,"UTF-8"));//加上这行就能实现下载
try(
InputStream is = new FileInputStream(file);
ServletOutputStream os = response.getOutputStream();//写在这里,执行结束会自动关闭输入输出流
){
int read = 0;
byte[] bytes = new byte[2048];
while ((read = is.read(bytes)) != -1)
os.write(bytes, 0, read);
}
以上俩个只能选一种
设置编码
浏览器默认使用的是iso8859编码,不支持中文,可以设置
response.setCharacterEncoding("UTF-8");//设置缓冲区当中的编码
response.setHeader("Content-Type","text/html;charset=UTF-8");//设置编码,
Request
Request 和 Response 对象起到了服务器与客户机之间的信息传递作用。Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏览器。
请求行
获取
request.getMethod();//获取请求方式
request.getRequestURI();//获取从更目录之后的请求路径
request.getRequestURL();//获取带上域名的请求完整路径
request.getQueryString();//获取字符串格式的请求参数
请求头
获取
//枚举集合
Enumeration<String> headerNames = request.getHeaderNames();//获取全部请求头的名称
while (headerNames.hasMoreElements()){
System.out.println(headerNames.nextElement());
}
request.getHeader("cookie")//获取指定请求头的指定内容
request.getHeader("referer")//获取浏览器的上一个界面
referer
用a标签,或者表单提交js跳转等,是有referer的
但是如果是直接访问的,收藏夹,或者在浏览器当中直接输地址是没有referer的
获取请求参数
System.out.println(request.getParameter("name"));//获取一个name值
request.getRemoteAddr();//获取ip地址
String[] names = request.getParameterValues("name");//获取多个值的name,比如复选框
Enumeration<String> parameterNames = request.getParameterNames();
//遍历获取所有的参数名称
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()){
System.out.println(parameterNames.nextElement());
}
//获取全部的请求参数
Map<String,String[]> parameterMap = request.getParameterMap();
请求转发
RequestDispatcher disp = request.getRequestDispatcher("/admin/user/userlist");
disp.forward(request,response);//springmvc中不能这样处理用:return "forward:/hello";