设置响应数据
- void setStatus(int sc)//设置响应状态码
- void setHeader(String name,String value)//设置响应头键值对
resp.setContentType("text/html;charset=utf-8"");这个更常用
- PrinterWriter getWriter()//获取字符输出流
//防止乱码
response.setContentType("text/html; charset=utf-8");
PrintWriter writer = response.getWriter();
writer.write( s: "aaa"); I
顺便说一下write和print的区别
write():仅支持输出字符类型数据,字符、字符数组、字符串等
print():可以将各种类型(包括Object)的数据通过默认编码转换成bytes字节形式,这些字节都通过write(int c)方法被输出
- ServletOutputStream getOutPutStream()//获取字节输出流,I/O这块太久没用,没太明白
//1.读取文件
FileInputstream fis = new FileInputstream( name: "d://a.jpg");
//2.获取response字节输出流
ServletOutputStream os=response.getOutputStream();
//3.完成流的copy
/* byte[] buff = new byte[1024];int len = 0;
while ((len = fis.read(buff ) )!= -1){
os.write(buff ,0 , len);
}*/
//封装好的方法,取代上面注释的
IoUtils.copy(fis ,os);
重定向
路径要加上应用程序上下文,这个路径不知道是不是跟表单提交时的action写法一致
//重定向
//1.设置响应状态码302
response.setstatus(302);
//2.设置响应头 Location
response.setHeader( name: "Location",value: " /request-demo/esp2");
//简单的写法
response.sendRedirect("path");
重定向特点
- 浏览器地址栏路径发生变化
- 可以重定向到任意位置的资源(服务器内部、外部均可)
- 产生两次请求,不能在多个资源使用request共享数据
路径问题
明确路径谁使用?
- 浏览器使用:需要加虚拟目录(项目访问路径)
- 服务端使用:不需要加虚拟目录
基本上除了转发不需要加虚拟目录,其他情况都要加
动态获取虚拟目录,降低耦合性
//动态获取虚拟目录
String contextPath = request.getcontextPath();