Servlet中的对象:
1.SerlveltContext对象代表应用
同一个web应用中,所有 Servlet共享一个ServletContext,可通过servletContext实现Servlet通信
servletContext获取方式:
方式一:this.getServletConfig().getServletContext();//config中维护了对conetxt对象的应用
方式二:this.getServletContext();
ServletContext的具体应用:
1.实现多个Servlet数据共享
this.getServletContext().setAttribute() this.getServletContext().getAttribute()
2.XML中可通过<context-param>设置应用初始化参数,参数自动封装到context对象中。
this.getServletConext().getInitParamter("url")来获取参数
3.实现servlet转发
例如:将结果转交给JSP
RequestDispather rd=this.getServletContxt().getRequestDispather("/1.jsp");
Rd.forward(request,response);
4.读取资源配置文件XML或properties
WEB开发路径都以/开头。
第一种方式:
ServletContext context=this.getServletContext();
InputStream in=context.getResourceAsStream("/WEB-INF/classes/db.properties");
Properties pro=new Properties();
Pro.load(in);
String url=pro.getProperty("url");
第二种方式:方便截取文件名path.substring(path.lastIndexOf("\\")+1);
ServletContext context=this.getServletContext();
String path=context.getRealPath("/WEB-INF/classes/db.properties");
InputStream in=new FileInputStream(path);
Properties pro=new Properties();
Pro.load(in);
String url=pro.getProperty("url");
其他方法:
context.getResource("/WEB-INF/classes/db.properties")//返回资源URL方式
Url url=context.getResource("/WEB-INF/classes/db.properties");
String path=url.getPath();//获得绝对路径
context.getResourcePaths("/")获取指定目录下的所有资源
读取不同位置的资源:
包下的资源:
context.getRealPath("/WEB-INF/ classes/cn/itcast/web/db.properties")
Webroot下的资源:
webROOT是应用目录
context.getRealPath("/db.propterties")
读取资源文件的程序不是servlet:
Classes目录下的文件都由类装载器装载
SRC下:StudentDao.class.getClassLoader().getResourceAsStream("db.properties");
包下:StudentDao.class.getClassLoader().getResourceAsStream("cn/itcast/web/db.properties");
采用类装载器注意问题:
1.装载的文件必须在类路径下就是SRC
2.装载的文件不能太大,否则会JAVA内存溢出(类文件是一一次性装载,即使修改资源也不会再装载)
3.用类装载器读取跟新后的资源文件,只能按传统方式得到绝对路径,然后再用流读取
Url url=this.StudentDao.class.getClassLoader().getResource("db.properties");
String path=url.getPath();
InputStream in=new FileInputSream(path);