ServletContext&response-课堂笔记

来源:互联网 发布:java rmi exp 编辑:程序博客网 时间:2024/06/07 01:29

一、ServletContext
(一)简介
ServletContext:直译Servlet上下文。
ServletContext代表整个web应用。当服务器启动的时候,服务器软件会为每一个web应用创建一个ServletContext对象,这个对应里封装了这个web应用的一些配置信息,并且提供了一些功能。可以用来获取整个web应用的信息,或者获取web应用内所有资源的实际路径。
(二)怎样获取ServletContext
在Servlet里执行下面的代码:
ServletContext context = this.getServletContext();
(三)ServletContext的作用
1.可以获取全局的初始化参数
String paramValue = context.getInitParameter(String paramName);
2.获取web应用内所有资源的实际路径
String realPath = context.getRealPath(String 服务端路径);
3.ServletContext是一个域对象(重点)
域对象的生命周期:
何时创建:服务器启动
何时销毁:服务器关闭
作用范围:在整个web应用内
域对象必定有的三个方法:
setAttribute(String name, Object value);
getAttribute(String name);
removeAttribute(String name);
二、response
(一)简介
我们在创建Servlet的时候,必定要重写service方法或者doGet/doPost方法,而这些方法都有两个参数:一个代表http请求的request对象和一个代表http响应的response对象。
service方法的参数是ServletResponse,而doGet/doPost方法的参数是HttpServletResponse。
HttpServletResponse是ServletResponse的子接口,它的功能更强,应用更方便,实际开发中使用的也是HttpServletResponse。
(二)response运行原理
(三)response的API
1.设置响应行的API
设置响应状态码:
response.setStatus(int code);
2.设置响应头的API
设置响应头:
response.setHeader(String name, String value);
追加响应头:
response.addHeader(String name, String value);

响应头:refresh
response.setHeader(“refresh”,”秒数;url=要跳转的客户端地址”);
响应头:location(重定向功能)
response.sendRedirect(“客户端地址”);

重定向的特点:

1. 重定向的地址是客户端地址
2. 重定向有两次请求,第一次手动请求,第二次浏览器自动请求
3. 地址栏的地址会发生变化
3.设置响应体的API
设置响应体的内容,会被发送到客户端,显示到浏览器页面上
(1)字符型响应体设置
PrintWriter writer = response.getWriter();
writer.write(“”);

中文字符型响应体乱码:
乱码原因: response缓冲区默认是iso-8859-1字符集,不支持中文
解决方案:
//在获取输出流之前,先执行下面的代码:
//代码的作用:设置response缓冲区字符集是utf-8,并且指定浏览器使用utf-8解码
response.setContentType(“text/html;charset=utf-8”);
(2)字节型响应体设置
一般用来向客户端页面显示图片或者其它二进制数据文件
ServletOutputStream os = response.getOutputStream();
(3)文件下载
在把文件数据写入到输入流之前,要先执行下面的代码:
//1. 告诉客户端,传输给客户端的数据的MIME类型
response.setContentType(context.getMimeType(“文件名称”));
//2. 处理中文文件名称,先对文件名称进行编码处理,然后设置给Content-Disposition头
String clientFilename = this. encodeFilename(request, filename);
//3. 告诉客户端,传输给客户端的数据,要以附件的形式来处理,而不是直接打开
response.setHeader(“Content-Disoposition”,”attachment;filename=”+clientFilename);
//4. 使用输入流读取文件,写入到输入流,最后关闭流

文件下载时中文文件名称乱码的处理:
/**
* 自动根据不同浏览器对文件名称进行编码,避免文件下载时中文文件名称乱码
*
*/
public String encodeFilename(HttpServletRequest request, String filename){
String agent = request.getHeader(“User-Agent”);
if (agent.contains(“MSIE”)) {
// IE浏览器
filename = URLEncoder.encode(filename, “utf-8”);
filename = filename.replace(“+”, ” “);
} else if (agent.contains(“Firefox”)) {
// 火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();
filename = “=?utf-8?B?”+ base64Encoder.encode(filename.getBytes(“utf-8”)) + “?=”;
} else {
// 其它浏览器
filename = URLEncoder.encode(filename, “utf-8”);
}

return filename;

}

原创粉丝点击