ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Java WEB开发实战 之 第三部分:Servlet开发(3)【私塾在线原创】

Java WEB开发实战 之 第三部分:Servlet开发(3)【私塾在线原创】

原创 Linux操作系统 作者:啸傲1 时间:2012-02-29 14:43:06 0 删除 编辑
ServletContext对象是Web应用的运行时表示,可通过其实现Web应用中的资源共享,可访问ServletContext的范围是整个Web应用中的任意Servlet。
 
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的方法是 同一请求
 
 
 
 
有三种方式:
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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-29

  • 博文量
    11
  • 访问量
    4235