Response设置响应数据、javaweb路径问题

设置响应数据

  • 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();

猜你喜欢

转载自blog.csdn.net/m0_48385518/article/details/124254158