application是javax.servlet.ServletContext接口的实例,实际上表示的是整个Servlet的上下文。
application对象的常用方法:
以上方法是application的特色方法,当然,除了以上的三个方法之外,对于属性的增加、取得和删除也有其应用的,setAttribute()、getAttribute()、removeAttribute()。
我们来一块学习表格中的三个方法。
取得绝对路径
取得一个项目的虚拟目录对应的绝对路径就要使用getRealPath()方法。一个例子看一下这个方法的使用和效果。
- application_01.jsp
- <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
- <html>
- <head>
- <title>web开发</title>
- </head>
- <body>
- <%
- String path=application.getRealPath("/");
- %>
- <h3>真实路径:<%=path %></h3>
- </body>
- </html>
运行一下可以发现真实路径是我们的项目的路径。但是在这个地方需要注意的是,application的这个操作本身是ServletContext接口的实例,但是在jsp中,还有一个很常用的方法的功能可以完全取得这个方法。那就是getServletContext()方法。下面一个程序看一下这个方法的使用。
- <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
- <html>
- <head>
- <title>web开发</title>
- </head>
- <body>
- <%
- String path=getServletContext().getRealPath("/");
- %>
- <h3>真实路径:<%=path %></h3>
- </body>
- </html>
运行一下可以发现,这个方法也能取得真实路径。实际上来说,在jsp中getServletContext()方法是比较常用的,各位都应该知道各个网站都有一个网站计数器吧,可以记录用户每次登陆的次数。那个功能的实现就依靠我们的getServletContext()方法。关于网站计数器的操作我们在近期内会讲到。
注意 关于getServletContext()方法,看代码的时候,可能有点的同学会问了,在正常情况下所有的方法都应该会有一个对象调用,为什么在这个代码中没有对象呢?就是说在应该会有一个对象调用getServletContext()这个方法,但是看以上代码中并没有调用而直接写上了这个方法。实际上如果非要在这个地方加上一个对象的话,那这个对象就可以使用this,this表示的是当前容器。将上面的代码改成如下:
- <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
- <html>
- <head>
- <title>web开发</title>
- </head>
- <body>
- <%
- String path=this.getServletContext().getRealPath("/");
- %>
- <h3>真实路径:<%=path %></h3>
- </body>
- </html>
运行一下并没有变化。this是可以省略的。可以说this.getServletContext()方法是个重点应用。
那么取得绝对路径的用处的是什么呢?这个可有大用处了,能取得绝对路径就意味着在jsp中可以进行文件操作了。有的同学问我文件怎么操作,在这儿一块以一个实例来看一下文件的操作。
如果想进行文件的操作首先一定需要通过File类找到一个指定的路径,这个路径最好是绝对路径。
- application_02.jsp
- <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
- <html>
- <head>
- <title>web开发</title>
- </head>
- <body>
- <form action="application_03.jsp">
- 输入文件名称:<input type="text" name="filename"><br>
- 输入文件内容:<textarea name="filecontent" cols="30" rows="3">
- </textarea><br>
- <input type="submit" values="保存">
- <input type="reset" values="重置">
- </form>
- </body>
- </html>
- application_03.jsp
- <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
- <%@ page import="java.io.*" %>
- <%@ page import="java.util.*"%>
- <html>
- <head>
- <title>web开发</title>
- </head>
- <body>
- <%
- //request.setCharacterEncoding("gbk");
- String name=new String(request.getParameter("filename").getBytes("ISO-8859-1"));
- // String name=request.getParameter("filename");
- String content=new String(request.getParameter("filecontent").getBytes("ISO-8859-1"));
- // String content=request.getParameter("filecontent");
- System.out.println(name);
- //要想操作文件必须有绝对路径,那么这个时候getRealPath();
- String fileName=this.getServletContext().getRealPath("/")+
- "note"+File.separator+name; //保存在note文件之中
- File file=new File(fileName); // 实例化File类对象
- if(!file.getParentFile().exists()){
- file.getParentFile().mkdir();//建立一个文件夹
- }
- PrintStream ps=null;
- ps=new PrintStream(new FileOutputStream(file));
- ps.println(content);
- ps.close();
- %>
- <%
- Scanner scan=new Scanner(new FileInputStream(file));
- scan.useDelimiter("\n");
- StringBuffer buf=new StringBuffer();
- while(scan.hasNext()){
- buf.append(scan.next()).append("<br>");
- }
- scan.close();
- %>
- <%=buf%>
- </body>
- </html>
运行一下application_02.jsp,提交内容,看浏览器的效果,显示的是提交的内容,那么文件在哪儿呢?看一下tomcat底下的webappls文件夹,然后找到程序的项目打开,看到有个note的文件夹对吗,打开文件夹,里面就不用我说了,是提交的内容,记得用记事本打开。
注意: 注意在application_03.jsp中接收参数的乱码处理操作。 注意包类的导入,文件当然用到java.io.*. 文件操作实际上是属性java SE的内容,不熟悉的同学可以再学一下关于文件Io的操作。
查看属性
在application中有一个方法可以取得全部的属性。
- application_04.jsp
- <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %>
- <%@ page import="java.util.*" %>
- <html>
- <head>
- <title>web开发</title>
- </head>
- <body>
- <%
- Enumeration enu=this.getServletContext().getAttributeNames();//取得全部的属性
- while(enu.hasMoreElements()){
- String name=(String)enu.nextElement();
- %>
- <h4><%=name%>
- <%=this.getServletContext().getAttribute(name)%>
- </h4>
- <%
- }
- %>
- </body>
- </html>
看一下运行结果,取得的全部属性到底是个什么东西,如下就是取得的全部属性:
可以发现所有的tomcat配置第三方的jar文件都是通过application属性设置到服务器上去的,所有在每次配置了一个新的开发包的时候,服务器必须重新启动。
注意事项: 还是强调一点,本文中的程序例子代码必须详细的看看,关于代码中一些东西我都没有讲,也不知道你们哪些方法会哪些方法不会。所有看代码的时候如果有看不懂的一定要去网上弄懂,在把握本文的重点之下学习知识。不要似是而非。毕竟代码才是程序的精髓。