ServletContext对象是Web应用的运行时表示,可通过其实现Web应用中的资源共享,可访问ServletContext的范围是整个Web应用中的任意Servlet。
![](http://sishuok.com/forum/upload/2012/2/22/7216b9c834f22518cd964fba95ab80a6__%E6%9C%AA%E5%91%BD%E5%90%8D.jpg)
![](http://sishuok.com/forum/upload/2012/2/22/eed84d2df288f3075befdafba8ae7eff__%E6%9C%AA%E5%91%BD%E5%90%8D.jpg)
ServletContext具体的功能如下:
只读访问上下文初始化参数
读写访问应用级属性
只读访问应用级文件资源
写访问应用级日志文件
java代码:
ServletContext接口:
getInitParameter(name:String) : String
getInitParameterNames() : Enumeration
getAttribute(name:String) : Object
setAttribute(name:String, value:Object)
getAttributeNames() : Enumeration
getResource(path) : URL
getResourceAsStream(path) : InputStream
log(message:String)
log(message:String, Throwable:excp)
用于上下文初始化参数的部署描述符:
java代码:
catalogFileName/WEB-INF/catalog.txt
在Servlet中如何访问呢
java代码:
ServletContext context = this.getServletContext();
String catalogFileName = context.getInitParameter(“catalogFileName”);
和Servlet初始化参数进行比较,差别在于?
在于可访问的范围不同
使用getResourceAsStream 方法:返回InputStream对象
在Servlet中如何访问呢
java代码:
ServletContext context = this.getServletContext();
String catalogFileName = context.getInitParameter(“catalogFileName”);
InputStream is = null;
BufferedReader catReader = null;
try {
is = context.getResourceAsStream(catalogFileName);
catReader = new BufferedReader(new InputStreamReader(is));
//后续就按照流式读文件操作了
……
使用getResourceAsStream 方法:返回InputStream对象
在Servlet中如何访问呢
java代码:
ServletContext context = this.getServletContext();
String catalogFileName = context.getInitParameter(“catalogFileName”);
InputStream is = null;
BufferedReader catReader = null;
try {
is = context.getResourceAsStream(catalogFileName);
catReader = new BufferedReader(new InputStreamReader(is));
//后续就按照流式读文件操作了
……
“/”开头的路径,“/”的含义?
一种表示当前Web应用的根,也就是当前Web应用上下文的地方;
另一种表示当前Web服务器的应用集合的根,比如Tomcat的webapps的位置
如何区分?
主要是看使用路径的功能,如果能够访问到本应用之外,那么这个开头的“/”就表示当前Web服务器的应用集合的根;
如果不能能够访问到本应用之外,那么这个开头的“/”就表示当前Web应用上下文的地方
n建议在进行Web应用开发的时候,尽量不要使用相对路径,尽量使用绝对路径
nServletContext对象只提供对日志文件的写访问
log(String)方法将一个消息写到日志文件中
log(String,Throwable)将一个消息和异常或错误的栈跟踪写到日志文件中
在Servlet中如何访问呢
ServletContext context = this.getServletContext();
context.log(“日志信息”);
n在实际开发中日志记录的信息
一般记录例外和错误信息,至少要记录:地点、参数、具体的错误或例外信息
ServletContext对象提供对所有servlet共享属性的读写访问
java代码:
getAttribute方法
setAttribute 方法
removeAttribute方法
n在Servlet中如何访问呢
ServletContext context = this.getServletContext();
在代码中设置应用范围属性:
context.setAttribute(“catalog”, catalog);
在代码中获取属性:
ProductList catalog = (ProductList) context.getAttribute(“catalog”);
示例:在线人数统计,按照IP进行统计。
要注意:这是线程不安全的。
从一个Servlet去访问另外一个Servlet有两种办法:
1:重定向的方法
response.sendRedirect(“/webapp/yourServletUrl”);
2:使用RequestDispatcher
java代码:
RequestDispatcher dispatcher = request.getRequestDispatcher(“/yourServletUrl ");
try {
dispatcher.forward(request, response);
} catch (Exception err) {
err.printStackTrace();
}
这两种方法的根本区别在于:重定向的方法是一个
全新的请求,而RequestDispatcher的方法是
同一请求
![](http://sishuok.com/forum/upload/2012/2/22/3228b4f80550471adf8dd8115f099740__1.jpg)
![](http://sishuok.com/forum/upload/2012/2/22/2d4e1e147056db8684e9e7058dc99295__2.jpg)
有三种方式:
1:使用Request对象的getRequestDispatcher(String path)方法获取。
其中的path可以是相对路径,也可以是绝对路径,但不能越出当前Web上下文
2:使用ServletContext对象的的getRequestDispatcher(String path)方法获取
其中的path必须以“/”开头,路径相对于当前的Web上下文
3:使用ServletContext对象的的getNamedDispatcher(String name)方法获取
其中的名称是在web.xml中配置的
有三种方式:
1:使用Request对象的getRequestDispatcher(String path)方法获取。
其中的path可以是相对路径,也可以是绝对路径,但不能越出当前Web上下文
2:使用ServletContext对象的的getRequestDispatcher(String path)方法获取
其中的path必须以“/”开头,路径相对于当前的Web上下文
3:使用ServletContext对象的的getNamedDispatcher(String name)方法获取
其中的名称是在web.xml中配置的
与ServletContextListener接口类似,还有ServletRequestListener和HttpSessionListener,他们都是实现相应的接口,然后在web.xml中进行监听器注册的配置即可。这里了解一下
如果同时配置了这三种Listener,那么它们的运行顺序是:
1:容器启动时会先调用ServletContextListener的contextInitialized方法。
2:当客户端有请求到来,会先调用ServletRequestListener的requestInitialized方法,然后再调用HttpSessionListener的sessionCreated方法。
3:如果一个页面链接了多个文件,也就是一个页面会触发多个请求的情况,则会再次触发ServletRequestListener的requestInitialized方法。
视频配套PPT,视频地址【
Java WEB开发实战视频课程 】
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26715443/viewspace-717363/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26715443/viewspace-717363/