ServletContext详解(1)

首先看看Servlet核心类图,看看ServletContext在其中的地位


1,什么是ServletContext?

当Servlet容器启动时,会为每个javaweb应用创建一个ServletContext对象的实例,SertvletContext属于全局对象(在应用被服务器加载时创建).每一个javaweb应用都有唯一的一个ServletContext对象.它代表着当前应用.

2,如何 得到ServletContext对象?

方式一:(api:The ServletContext object is contained within the ServletConfig object.由服务器创建,可通过ServletConfig对象中类方法getServletContext()获取)

利用inti方法中的config形参

ServletConfig config;

public void init(ServletConfig config){

this.config=config;

}

ServletContext sc=config.getServletContext();

方式二:直接获取

getServletContext();

3.有什么用?

3.1.Servlet对象可以通过ServletContext来实现通信,因此ServletContext对象也被称为Context域对象(就是说其内部维护了一个 Map<String,Object>)

例:

        Object getAttribute(String name):根据名称获取绑定的对象
Enumeration getAttributeNames() :获取ServletContext域中的所有名称
void removeAttribute(String name):根据名称移除对象
void setAttribute(String name,Object value):添加或修改对象。
  

以上方法可以实现多个Servlet之间数据的共享 

3.2获取web应用的初始化参数(全局参数)-----全局参数配置方法:在web.xml根元素下添加<context-param>

<param-name>****</param-name>

<param-value>****</param-value>

</context-param>

通过String    sc.getInitParamerter(String name);

                     Enumeration    sc.getInitParameterNames() 获取

3.3实现Servlet的转发

(过后再谈)

3.4利用ServletContext对象读取资源文件

3.4.1文件的下载(ServletContext在这里的作用就是获取文件的真实路径)

        代码如下:

private void xiazai(HttpServletResponse response)
throws FileNotFoundException, IOException {
//得到要下载文件
ServletContext sc=getServletContext();
String path=sc.getRealPath("/j.png");//读取应用中任何文件。只能在Web环境下用
System.out.println(path);
//构建输入流
FileInputStream in =new FileInputStream(path);
//通知客户端以下载的方式打开
response.setHeader("Content-Disposition", "attachment;filename=j.png");
response.setHeader("Content-type", "application/octet-stream");
//得到shu出流
ServletOutputStream out=response.getOutputStream();
int len=-1;
byte[] b=new byte[1024];
while((len=in.read(b))!=-1){
out.write(b, 0, len);
}
in.close();
out.close();
}

//下载中文名的文件
private void xiazai2(HttpServletResponse response)
throws FileNotFoundException, IOException {
//得到要下载文件
ServletContext sc=getServletContext();
String path=sc.getRealPath("/美女.png");
String filename=path.substring(path.lastIndexOf("\\")+1);
System.out.println(path);
//构建输入流
FileInputStream in =new FileInputStream(path);
//通知客户端以下载的方式打开
response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));//一定要URL编码
response.setHeader("Content-type", "application/octet-stream");
//得到shu出流
ServletOutputStream out=response.getOutputStream();
int len=-1;
byte[] b=new byte[1024];
while((len=in.read(b))!=-1){
out.write(b, 0, len);
}
in.close();
out.close();
}











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值