一】重点方法:
1》存取对象
void setAttribute(String name, Object object);//将object存入ServletContext对象中,并取名为name(方便取出,与Map类似)
Object getAttribute(String name);//获取name对应的对象
2》解析web.xml中<context-param>标签
String getInitParameter(String name);//获取name标签对应的标签值
Enumeration getInitParameterNames();//获取所有的标签名,可以用于遍历标签值
3》请求转发器(用于转发网页)
RequestDispatcher getRequestDispatcher(String path);//获取指向特定资源的一个转发器
void forward(ServletRequest request, ServletResponse response);//调用转发器指向的资源,并进行转发
二】总结:
1)在web应用中,由服务器创建的唯一的一个对象是ServletContext
2)ServletContext对象在每个Servlet对象中取得的都是相同的
3)ServletContext对象有存取方法:
void setAttribute(String name, Object object);//将object存入ServletContext对象中,并取名为name(方便取出,与Map类似)
Object getAttribute(String name);//获取name对应的对象
二、ServletContext对象有如下应用:
一】多个Servlet对象可以通过ServletContext对象共享数据
1》第一个Servlet对象:设置值
//取得客户端的请求参数
String username = request.getParameter("username");
//取得这个工程的唯一一个ServletContext对象
ServletContext sc = this.getServletContext();
//将信息存入ServletContext对象
sc.setAttribute("USERNAME", username);
2》第二个Servlet对象:取出值
//取得唯一一个ServletContext对象
ServletContext context = this.getServletContext();
//获取ServletContext对象内容
String username = (String) context.getAttribute("USERNAME");
response.getOutputStream().write(("用户名="+username).getBytes());
二】在web引用中,可以取得web应用的初始化参数
1》web.xml部分
<context-param>
<param-name>邮箱</param-name>
<param-value>434507250</param-value>
</context-param>
<context-param>
<param-name>电话号码</param-name>
<param-value>18381330428</param-value>
</context-param>
2》Servlet对象部分
ServletContext context = this.getServletContext();
String email = context.getInitParameter("邮箱");
String tel = context.getInitParameter("电话号码");
if(email!=null && tel!=null ){
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("邮箱:" +email + "<br />");
response.getWriter().write("电话号码" + tel + "<br />");
}
三】ServletContext能够实现转发功能,即307+location。
步骤:
1》获取一个ServletContext对象
2》获取一个定位到指定资源的转发器
3》利用转发器进行调度,并进行转发
code:
// 1,获取指向fail.html的定位器
RequestDispatcher rd = context.getRequestDispatcher("/success.html");
// 2,利用此定位器进行转发
rd.forward(request, response);
四】利用ServletContext对象读取资源文件--默认目录为:工程(应用)路径
重点方法:
InputStream getResourceAsStream("文件路径");
code:
ServletContext context = this.getServletContext();
InputStream is = context.getResourceAsStream("/doc/config.properties");// /代表的当前应用(工程)
Properties props = new Properties();
props.load(is);
System.out.println(props.getProperty("email"));
注意:
1》用传统方式读取文件的时候,是以相对于tomcat\bin的目录下访问的
2》如果以ServletContext方式读取资源文件(text/xml/properties),是相对于web服务器的当前web应用(工程)目录而言的
此时/:表示当前web应用(工程),即:day06
五】通过类加载器加载文件:默认目录为WEB-INF/classes/
注意:
1》类加载器只能加载IDE工具下src目录下的资源文件,其它目录无法加载。
2》默认的路径为WEB-INF/classes/目录,即:此时/表示:/WEB-INF/classess/目录
重点方法:
1》获得类加载器( Class对象的方法)
ClassLoader getClassLoader();
2》获取资源输入流
ClassLoader getResourceAsStream(String name);
步骤:
1》取得当前对象的字节码对象
Class clazz = this.getClass();
2》取得当前对象的类加载器
ClassLoader cl = clazz.getClassLoader();
3》通过类加载器加载资源
InputStream is = cl.getResourceAsStream("资源路径");
code:
//1,获取当前对象的字节码对象
Class clazz = this.getClass();
//2,返回当前对象的类加载器
ClassLoader cl = clazz.getClassLoader();
//3,根据类加载器获取输入流
InputStream is = cl.getResourceAsStream("/cn/itcast/web/Servlet/config.properties");
六】将资源文件在工程中的路径转换成真实路径
使用ServletContext()对象的String getRealPath("工程路径");方法;
code:
String path = this.getServletContext().getRealPath("/doc/abc.txt");
File file = new File(path);