您现在的位置:首页 >> 前端 >> 内容

ServletContext介绍和使用

时间:2017/10/12 9:22:00 点击:

  核心提示:一、ServletContext(一)简介ServletContext:直译Servlet上下文。ServletContext代表整个web应用。当服务器启动的时候,服务器软件会为每一个web应用创建...

一、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;

}

Tags:SE ER RV VL 
作者:网络 来源:vampireDXQ