您的位置:首页 > 编程语言 > Java开发

JavaWeb学习笔记(7)——ServletConfig和ServletContext对象

2015-03-20 18:14 471 查看
/*

ServletConfig对象

 ·在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。

 ·Servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,

 并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。

ServletContext对象

一、原理简介:

 ·WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。

 ·ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。

 ·由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

二、应用:

1、多个Servlet通过ServletContext对象实现数据共享。
2、获取WEB应用的初始化参数。
3、实现Servlet的转发。
4、利用ServletContext对象读取资源文件。

 ·得到文件路径

 ·读取资源文件的三种方式

 ·properties文件(属性文件)

*/
//多个servlet通过servletContext实现数据共享

public class ServletContextDemo1 extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {

  

  String data = "abcddffdf";

  

  ServletContext context = this.getServletConfig().getServletContext();

  context.setAttribute("data", data);  //map

  
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {
  doGet(request, response);

 }
}

public class ServletContextDemo2 extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {
  ServletContext context = this.getServletContext();

  String data = (String) context.getAttribute("data");

  System.out.println(data);

 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {
  doGet(request, response);

 }
}
//获取整个web站点的初始化参数

public void doGet(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {

  

  ServletContext context = this.getServletContext();

  String url = context.getInitParameter("url");

  System.out.println(url);

 }
/*

用servletContext实现请求转发:mvc

注意:

 ·转发之前的所有写入都无效

 ·转发之前,response不能提交,否则转发的时候服务器会抛:Cannot forward after response has been committed

*/

public void doGet(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {

  

  response.getOutputStream().write("111".getBytes());
  ServletContext context = this.getServletContext();

  RequestDispatcher rd = context.getRequestDispatcher("/servlet/ServletDemo2");

  rd.forward(request, response);

  

  response.getOutputStream().write("222".getBytes());
 }

 

//读取资源文件的三种方式

 

//使用servletContext读取资源文件

public class ServletContextDemo1 extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {
  /*

    做web工程时,不建议采用传统方式读取文件数据

   FileInputStream in = new FileInputStream("db.properties");

   System.out.println(in);

   */
  test1(response);

 }
 private void test1(HttpServletResponse response) throws IOException {
  // 获取web资源的绝对路径后,再用传统方式得到该资源的文件流

  String path = this.getServletContext().getRealPath(

    "/WEB-INF/classes/db.properties");

  FileInputStream in = new FileInputStream(path);

  Properties prop = new Properties();

  prop.load(in);
  // 该方法的好处是可以得到资源的名称

  String filename = path.substring(path.lastIndexOf("\\")+1);
  String password = prop.getProperty("password");

  System.out.println(filename + " " + password);

 }
 private void test2(HttpServletResponse response) throws IOException {
  // 直接得到该资源文件以流的形式返回

  InputStream in = this.getServletContext().getResourceAsStream(

    "/WEB-INF/classes/db.properties");

  Properties prop = new Properties();

  prop.load(in);
  String password = prop.getProperty("password");

  System.out.println(password);

 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {

  doGet(request, response);

 }

}
//用类装载器读取资源文件

public class ServletContextDemo2 extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {
  //获取到装载当前类的类装载器

  ClassLoader loader = ServletContextDemo2.class.getClassLoader();
  //读取指定目录下的文件资源

  //通过类装载器读取资源文件的注意事项:不适合装载大文件,否则会导致jvm内存溢出

  InputStream in = loader.getResourceAsStream("he/junhua/Servlet/db.properties");

  Properties prop = new Properties();

  prop.load(in);

  

  System.out.println(prop.getProperty("driver"));

  

  

 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {

  doGet(request, response);

 }
}
//在Servlet外读取资源文件

public class ServletContextDemo3 extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {
  Dao dao = new Dao();

  dao.run();

  

 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {

  doGet(request, response);

 }
}

public class Dao {
 public void run() throws IOException {
  URL url = Dao.class.getClassLoader().getResource("db2.properties");

  String path = url.getPath();

  

  FileInputStream in = new FileInputStream(path);

  

  Properties prop = new Properties();

  prop.load(in);
  System.out.println(prop.size());

  System.out.println(prop.getProperty("username"));
  prop.setProperty("username", "xxx");

  FileOutputStream out = new FileOutputStream(path);
  prop.store(out, "");  
  System.out.println(prop.getProperty("username"));

  

  out.close();

  in.close();

 }

}

//一个简单的应用:读取PranavMistry_2009I_480.mp4,并拷贝到e:\根目录下

public class ServletContextDemo5 extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {

  

  ServletContext context =  this.getServletContext();

  

  //得到文件名

  String path = context.getRealPath("/1.jpg");

  String filename = path.substring(path.lastIndexOf("\\")+1);

  

  //得到资源文件读的流,并写入指定目录

  InputStream in = context.getResourceAsStream("/1.jpg");

  byte buffer[]
b280
= new byte[1024];

  int len = 0;

  

  FileOutputStream out = new FileOutputStream("E:\\temp\\"+filename);

  while((len=in.read(buffer))>0){

   out.write(buffer,0,len);

  }

  

  out.close();

  in.close();

 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {

  doGet(request, response);

 }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: