Response对象
功能:
设置响应消息
设置响应行
格式:HTTP/1.1 200 ok
设置状态码:setStatus(int sc)
设置响应头
设置头:setHeader(String name,String value);
设置响应体
使用步骤:
获取输出流
字符输出流:PrintWriter getWriter()
字节输出流:ServletOutputStream getOutputStream()
使用输出流,将数据输出到客户端浏览器
案例:
重定向:
resp.setStatus(304); resp.setHeader("location","./demo2");
//上下一致
resp.sendRedirect("./demo2");
特点:
地址栏发生变化
重定向可以访问其他站点的资源
重定向是两次请求,不能用request对象共享域来传对象了
输出字符数据
步骤:
获取字符输出流
输出数据
获取打印流 PrintWriter pw=resp.getWriter();//获取的流的编码是IOS-8859-1 //设置流的默认编码 //告诉浏览器响应体应该使用的编码 pw.write("我爱你哦");
存在中文乱码的问题
告诉浏览器,服务器发送的消息体数据的编码,建议浏览器使用该编码解码
resp.setCharacterEncoding("utf-8");resp.setHeader("Content-type","text/html;charset=utf-8");//或者resp.setContentType("text/html;charset=utf-8");
- 输出字节数据到浏览器
步骤:
获取字节输出流
输出数据
resp.setCharacterEncoding("utf-8");
//注意也要确定编码
OutputStream os=resp.getOutputStream();
byte[] bytes="我爱赵菁啊啊啊啊啊爱死她了".getBytes("utf-8");
os.write(bytes);
验证码:
本质:图片
目的:放置恶意注册
ServletContext对象
概念:代表整个web应用,可以和web应用程序(服务器)进行通信(一直存在,知道服务器结束)
获取:(获取的是同一个SerletContext对象)
//通过request对象获取ServletContext context1=req.getServletContext();//通过httpServletServletContext context2= this.getServletContext();
功能:
1.获取MIME对象
- MiME类型:在互联网通信过程中定义的一种文件数据类型
- 格式:大类型/小类型 text/html img/jpeg
- 获取:String getMimeType(String file) //根据后缀名获取
ServletContext context=req.getServletContext();
String file="a.jpg";
String filename=context.getMimeType(file);
System.out.println(filename);
2.域对象:共享数据
context.setAttribute(String name,Object obj);context.getAttribute(String name);context.removeAttribute(String name);
3.获取文件的真实(服务器)路径
方法: String getRealPath(String path)// src目录下的资源
String path1= context.getRealPath("/WEB-INF/classes/a.txt");System.out.println(path1);
// webapp目录下
String path2= context.getRealPath("/b.txt");
System.out.println(path2); // WEB-INF目录下
tring path3= context.getRealPath("/WEB-INF/c.txt");
System.out.println(path3);
案例:文件下载
需求:
- 页面显示超链接
- 点击超链接弹出下载提示框
- 完成图片文件下载
使用响应头设置打开方式
*content-disposition: attachment;filename=xxx
注意:image要放在web目录下才能被拿到
String file= req.getParameter("filename");
resp.setHeader("content-disposition","attachment;filename="+file);
ServletContext context=this.getServletContext();
String path=context.getRealPath("/image/"+file);
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(path));
OutputStream os= resp.getOutputStream();
int len=0;
byte[] bytes=new byte[1024];
while((len=bis.read(bytes))!=-1){os.write(bytes,0,len);
}
bis.close();
String host=req.getRemoteHost();
System.out.println(host+"传输完毕");
存在问题:文件名的中文乱码
解决思路:
获取客户端使用的浏览器版本信息
根据不同的版本信息,设置filename的编码方式不同