jsp内置对象【06】application对象详解

 

application是javax.servlet.ServletContext接口的实例,实际上表示的是整个Servlet的上下文。

application对象的常用方法:

 

以上方法是application的特色方法,当然,除了以上的三个方法之外,对于属性的增加、取得和删除也有其应用的,setAttribute()、getAttribute()、removeAttribute()。

我们来一块学习表格中的三个方法。

取得绝对路径

取得一个项目的虚拟目录对应的绝对路径就要使用getRealPath()方法。一个例子看一下这个方法的使用和效果。

  
  
  
  
  1. application_01.jsp  
  2. <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> 
  3. <html> 
  4. <head> 
  5. <title>web开发</title> 
  6. </head> 
  7. <body> 
  8. <%   
  9.    String path=application.getRealPath("/");  
  10. %> 
  11. <h3>真实路径:<%=path %></h3> 
  12. </body> 
  13. </html> 

运行一下可以发现真实路径是我们的项目的路径。但是在这个地方需要注意的是,application的这个操作本身是ServletContext接口的实例,但是在jsp中,还有一个很常用的方法的功能可以完全取得这个方法。那就是getServletContext()方法。下面一个程序看一下这个方法的使用。

  
  
  
  
  1. <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> 
  2. <html> 
  3. <head> 
  4. <title>web开发</title> 
  5. </head> 
  6. <body> 
  7. <%   
  8.    String path=getServletContext().getRealPath("/");  
  9. %> 
  10. <h3>真实路径:<%=path %></h3> 
  11. </body> 
  12. </html> 

运行一下可以发现,这个方法也能取得真实路径。实际上来说,在jsp中getServletContext()方法是比较常用的,各位都应该知道各个网站都有一个网站计数器吧,可以记录用户每次登陆的次数。那个功能的实现就依靠我们的getServletContext()方法。关于网站计数器的操作我们在近期内会讲到。

注意 关于getServletContext()方法,看代码的时候,可能有点的同学会问了,在正常情况下所有的方法都应该会有一个对象调用,为什么在这个代码中没有对象呢?就是说在应该会有一个对象调用getServletContext()这个方法,但是看以上代码中并没有调用而直接写上了这个方法。实际上如果非要在这个地方加上一个对象的话,那这个对象就可以使用this,this表示的是当前容器。将上面的代码改成如下

  
  
  
  
  1. <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> 
  2. <html> 
  3. <head> 
  4. <title>web开发</title> 
  5. </head> 
  6. <body> 
  7. <%   
  8.    String path=this.getServletContext().getRealPath("/");  
  9. %> 
  10. <h3>真实路径:<%=path %></h3> 
  11. </body> 
  12. </html> 

运行一下并没有变化。this是可以省略的。可以说this.getServletContext()方法是个重点应用。

 那么取得绝对路径的用处的是什么呢?这个可有大用处了,能取得绝对路径就意味着在jsp中可以进行文件操作了。有的同学问我文件怎么操作,在这儿一块以一个实例来看一下文件的操作。

如果想进行文件的操作首先一定需要通过File类找到一个指定的路径,这个路径最好是绝对路径

  
  
  
  
  1. application_02.jsp    
  2. <%@ page language="java" contentType="text/html" pageEncoding="gbk" %> 
  3. <html> 
  4. <head> 
  5. <title>web开发</title> 
  6. </head> 
  7. <body> 
  8. <form action="application_03.jsp"> 
  9.     输入文件名称:<input type="text" name="filename"><br> 
  10.     输入文件内容:<textarea name="filecontent" cols="30" rows="3"> 
  11.            </textarea><br> 
  12.   <input type="submit" values="保存"> 
  13.   <input type="reset" values="重置">      
  14. </form> 
  15. </body> 
  16. </html> 
  
  
  
  
  1. application_03.jsp  
  2. <%@ page language="java" contentType="text/html" pageEncoding="gbk" %> 
  3. <%@ page import="java.io.*" %> 
  4. <%@ page import="java.util.*"%> 
  5. <html> 
  6. <head> 
  7. <title>web开发</title> 
  8. </head> 
  9. <body> 
  10. <%   
  11.      //request.setCharacterEncoding("gbk");  
  12.      String name=new String(request.getParameter("filename").getBytes("ISO-8859-1"));  
  13.      // String name=request.getParameter("filename");  
  14.      String content=new String(request.getParameter("filecontent").getBytes("ISO-8859-1"));  
  15.      // String content=request.getParameter("filecontent");  
  16.      System.out.println(name);  
  17.      //要想操作文件必须有绝对路径,那么这个时候getRealPath();  
  18.      String fileName=this.getServletContext().getRealPath("/")+  
  19.      "note"+File.separator+name; //保存在note文件之中  
  20.      File file=new File(fileName); // 实例化File类对象  
  21.      if(!file.getParentFile().exists()){  
  22.         file.getParentFile().mkdir();//建立一个文件夹   
  23.      }  
  24.      PrintStream ps=null;  
  25.      ps=new PrintStream(new FileOutputStream(file));  
  26.      ps.println(content);  
  27.      ps.close();  
  28. %> 
  29. <%  
  30.    Scanner scan=new Scanner(new FileInputStream(file));  
  31.     scan.useDelimiter("\n");  
  32.    StringBuffer buf=new StringBuffer();  
  33.    while(scan.hasNext()){  
  34.        buf.append(scan.next()).append("<br>");  
  35.    }  
  36.    scan.close();  
  37. %> 
  38. <%=buf%> 
  39. </body> 
  40. </html> 

运行一下application_02.jsp,提交内容,看浏览器的效果,显示的是提交的内容,那么文件在哪儿呢?看一下tomcat底下的webappls文件夹,然后找到程序的项目打开,看到有个note的文件夹对吗,打开文件夹,里面就不用我说了,是提交的内容,记得用记事本打开。

 注意:  注意在application_03.jsp中接收参数的乱码处理操作。 注意包类的导入,文件当然用到java.io.*.    文件操作实际上是属性java SE的内容,不熟悉的同学可以再学一下关于文件Io的操作。

 查看属性

 在application中有一个方法可以取得全部的属性。

  
  
  
  
  1. application_04.jsp  
  2. <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> 
  3. <%@ page import="java.util.*" %> 
  4. <html> 
  5. <head> 
  6. <title>web开发</title> 
  7. </head> 
  8. <body> 
  9. <%   
  10.   Enumeration enu=this.getServletContext().getAttributeNames();//取得全部的属性  
  11.   while(enu.hasMoreElements()){  
  12.       String name=(String)enu.nextElement();  
  13. %> 
  14. <h4><%=name%> 
  15.   <%=this.getServletContext().getAttribute(name)%> 
  16.  </h4> 
  17. <%      
  18.   }  
  19. %> 
  20. </body> 
  21. </html> 

 看一下运行结果,取得的全部属性到底是个什么东西,如下就是取得的全部属性:

 可以发现所有的tomcat配置第三方的jar文件都是通过application属性设置到服务器上去的,所有在每次配置了一个新的开发包的时候,服务器必须重新启动。

注意事项:  还是强调一点,本文中的程序例子代码必须详细的看看,关于代码中一些东西我都没有讲,也不知道你们哪些方法会哪些方法不会。所有看代码的时候如果有看不懂的一定要去网上弄懂,在把握本文的重点之下学习知识。不要似是而非。毕竟代码才是程序的精髓。 

 

 

你可能感兴趣的:(application,jsp内置对象)