application对象是javax.servlet.ServletContext接口的实例化对象。是整个servlet的上下文,代表了整个web容器的操作。

常用方法:

1.java.lang.String getRealPath(java.lang.String path):得到虚拟目录对应的绝对路径;

2. java.util.Enumeration<java.lang.String> getAttributeNames():得到所有属性的名称

3. java.lang.String getContextPath():取得当前的虚拟路径名称

除了以上3个方法外,对属性的增加,取得和删除也有应用,setAttribute(),getAttribute(), removeAttribute()

  • 取得绝对路径

例子:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<% // http://localhost/mldn/
String path = application.getRealPath("/") ;
%>
<h3>真实路径:<%=path%></h3>
</body>
</html>

运行结果:

真实路径:D:\Workspace\

这个真实路径就是server.xml里配置的。

需要注意,application的操作本身是ServletContext接口的实例,但是在jsp中有个方法的功能可以完全与之对应,getServletContext();

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<% // http://localhost/mldn/
String path = this.getServletContext().getRealPath("/") ;
%>
<h3>真实路径:<%=path%></h3>
</body>
</html>

这两个操作的效果完全一样,在正常情况下,所有的方法不是由对象调用么?那为什么这里面没有对象。

如果非要加上一个对象的话,就需要用this表示。

一定要记住,this.getServletContext()非常重要!!!实际使用中替代application操作

因为取得绝对路径,就意味着jsp可以进行文件操作了。

如果要想进行文件操作,一个要通过一个File类找到一个指定的路径。这个路径最好是绝对路径,这个时候,getRealPath()方法就起作用了,因为所有的web目录都是活的。

input_content.htm:

<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<form action="input_content.jsp" method="post">
输入文件名称:<input type="text" name="filename"><br>
输入文件内容:<textarea name="filecontent" cols="30" rows="3"></textarea><br>
<input type="submit" value="保存">
<input type="reset" value="重置">
</form>
</body>
</html>

input_content.jsp:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
request.setCharacterEncoding("GBK") ; // 解决乱码问题
String name = request.getParameter("filename") ;
String content = request.getParameter("filecontent") ;
// 要想操作文件必须有绝对路径,那么这个时候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>

网站计数器功能:

1. 网站人数可能很多,需要要用BigInteger完成

2. 用户每次第一次访问的时候才需要计数操作。执行计算前必须使用isNew()判断

3. 更改,保存的时候需要进行同步操作

count.jsp;

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.math.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%!
BigInteger count = null ;
%>
<%! // 为了开发简便,将所有的操作定义在方法之中,所有的异常直接加入完整的try...catch处理
public BigInteger load(File file){
BigInteger count = null ; // 接收数据
try{
if(file.exists()){
Scanner scan = new Scanner(new FileInputStream(file)) ;
if(scan.hasNext()){
count = new BigInteger(scan.next()) ;
}
scan.close() ;
} else { // 应该保存一个新的,从0开始
count = new BigInteger("0") ;
save(file,count) ; // 保存一个新的文件
}
}catch(Exception e){
e.printStackTrace() ;
}
return count ;
}
public void save(File file,BigInteger count){
try{
PrintStream ps = null ;
ps = new PrintStream(new FileOutputStream(file)) ;
ps.println(count) ;
ps.close() ;
}catch(Exception e){
e.printStackTrace() ;
}
}
%>
<%
String fileName = this.getServletContext().getRealPath("/") + "count.txt"; // 这里面保存所有的计数的结果
File file = new File(fileName) ;
if(session.isNew()){
synchronized(this){
count = load(file) ; // 读取
count = count.add(new BigInteger("1")) ; // 再原本的基础上增加1。
save(file,count) ;
}
}
%>
<h2>您是第<%=count==null?0:count%>位访客!</h2>
</body>
</html>
  • 查看属性

application里也存在属性操作,有个方法可以取得全部属性:getAttributeNames()

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</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属性设置到服务器上去的,所以在每次配置一个新的开发包的时候,服务器必须重新启动。

总结:

1. application表示上下文的资源环境

2. 实际中可以使用this.getServletContext()方法来代替application的使用

3. 通过getRealPath()方法来取得一个虚拟目录对应的真实路径

JSP内置对象--application对象(getRealPath(),getAttributeNames(),getContextPath())的更多相关文章

  1. JSP内置九个对象Request请求对象

    jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...

  2. JSP内置对象---application

    application 对象   服务器启动后,就产生了application 对象.当一个客户访问服务器上的一个JSP 页面时,JSP 引擎为该客户分配这个application 对象,  当客户在 ...

  3. JSP内置对象有哪些呢?

    内置对象 request request 对象是 javax.servlet.httpServletRequest类型的对象. 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的 ...

  4. jsp 内置对象(五)

    1.Request对象 该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以 获取用户提交的信息. 当Request对象获取客户提交的汉字字符时,会出现乱码问题,必 ...

  5. 菜鸟学Java(四)——JSP内置对象

    学习JavaWeb就离不开JSP,而学习JSP又不得不了解它常用的九个内置对象.今天来做一个简单介绍. request Request封装了用户提交的信息,通过调用Request相应的方法可以获取封装 ...

  6. JSP内置对象与servlet对应关系

    隐式对象 说明 out 转译后对应JspWriter对象,其内部关联一个PringWriter对象 request 转译后对应HttpServletRequest/ServletRequest对象 r ...

  7. JSP内置对象——application,page,pageContext,config,Exception

    application对象application对象实现了用户数据的共享,可存放全局变量.application开始于服务器的启动,终止于服务器的关闭.在用户的前后链接或不同用户之间的连接中,可以对a ...

  8. JavaWeb——JSP内置对象application,JSP属性范围

    application application语法 application对象 JSP属性范围 范围的分类 page request session application pagecontext延伸 ...

  9. 东软实训1 -jsp内置对象及其常用方法

    JSP 的内置对象及方法详细说明 一. request 对象 客户端的请求信息被封装在 request 对象中,通过它才能了解到客户的需 求,然后做出响应.它是 HttpServletRequest ...

  10. JavaWeb基础-Jsp内置对象

    request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应,它是HttpServlteRequest类的实例.Request对象具有请求域,即完成客户端 ...

随机推荐

  1. myeclipse中的类恢复之前的版本方法

    1.右键要恢复的文件,点击如下的选项. 2.界面中出现之前保存的版本,双击要查看的版本,可对比版本之间的不同之处.点击Replace,恢复版本.

  2. 10- python 网络爬虫分析

    Python 网络爬虫简单分析 import urllib2 response = urllib2.urlopen("http://www.baidu.com") print re ...

  3. win 8.1_64 安装usb 转串口驱动

    前几天交换机出问题了,想着通过配置口进去看看,用笔记本连接一看. 我去,系统居然自动安装的驱动居然无法使用. 没办法新买的笔记本没几天,也没去装usb转com口的驱动.反正系统可以自己去装嘛.(其实是 ...

  4. POJ 1062 昂贵的聘礼(dij+邻接矩阵)

    ( ̄▽ ̄)" #include<iostream> #include<cstdio> #include<cstring> #include<cstd ...

  5. git简单使用教程

    git 的基本使用指令 我们先来简单熟悉一下 git 的简单使用的指令, 作为最基本的 git 指令一定要熟悉 12345678910111213141516171819202122232425262 ...

  6. 遭遇mediumint上限

    Mediumint:The signed range is -8388608 to 8388607. The unsigned range is 0 to 16777215. home_notific ...

  7. MyEclipse运行到断点也跳过的问题

    如果是B/S开发也就是javaWeb开发的话,Tomcat 的启动模式要设置成Debug模式 还有下面是没运行时断点的样子: 运行的时候,断点会变成对钩,表示执行到它所在代码的时候会停下来:

  8. Inno Setup入门(九)——修改安装过程中的文字显示

    前面说到过可以使用不用的语言文件实现不同的显示方式,方便与国际接轨,事实上即使没有语言文件也可以实现修改.[Messages]段用于定义安装程序和卸载程序中显示的消息.一般不需要创建 [Message ...

  9. android把图片 视频 保存到相册

    //android把图片文件添加到相册 ContentResolver localContentResolver = getContentResolver(); ContentValues local ...

  10. ASP.NET网站限制访问频率

    最近做了一个免费发短信的小网站(http://freesms.cloudapp.net/),但发现最近有人破解了我的验证码,以每3秒/条的速度用我的短信服务来发他的广告.更换验证码程序和过滤关键字只是 ...