一】重点方法: 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);
新闻热点
疑难解答