application对象

本章目标
掌握application对象的主要操作;
掌握application和getServletContext()方法的联系;
可以通过application完成一个网站计数器的操作;

 

application对象
application对象是javax.servlet.ServletContext接口的实例化对象,从单词上翻译表示的是整个Servlet的上下文,ServletContext代表了整个容器的操作

 

取得虚拟目录对应的绝对路径

<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>测试getRealPath()方法</title>
</head>
<body>
<%
	String path=application.getRealPath("/");
 %>
 <h3>真实路径:<%=path %></h3>
</body>
</html>

 效果图:

 

使用 getServletContext() 方法

<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>使用 getServletContext() 方法</title>
</head>
<body>
<%
	String path=this.getServletContext().getRealPath("/");
 %>
 <h3>真实路径:<%=path %></h3>
</body>
</html>

效果图:

 

注意
对于application对象而言,在WEB中也可以使用getServletContext()方法进行替代。
String path = this.getServletContext().getRealPath("/") ; 

 

文件操作 ——  输入表单

<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>输入文件名称及内容</title>
</head>
<body>
<form action="demo3Post.jsp" method="post">
	输入文件名称:<input type="text" name="filename"><br />
	输入文件内容:<textarea rows="3" cols="30" name="filecontent"></textarea><br/>
	<input type="submit" value="保存">
	<input type="reset" value="重置">
</form>
</body>
</html>

效果图:

 

文件操作 —— 保存内容

<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="java.io.*" %><%-- 由于要使用IO操作,必须导入java.io包 --%>
<%@ page import="java.util.*"%><%-- Scanner在java.util包中定义 --%>
<html>
<head>
<title>接收内容并保存文件及内容</title>
</head>
<body>
<%
	request.setCharacterEncoding("utf-8");//解决中文乱码
	String name=request.getParameter("filename");//接收保存的文件名称
	String content=request.getParameter("filecontent");//接收保存的文件内容
	String fileName=this.getServletContext().getRealPath("/")+"note"+File.separator+name;//拼凑文件名称
	File file=new File(fileName);//实例化File类对象
	if(!file.getParentFile().exists()){//判断父文件夹是否存在
		file.getParentFile().mkdir();//创建文件夹
	}
	PrintStream ps=null;//定义打印流对象
	ps=new PrintStream(new FileOutputStream(file));//准备向文件中保存
	ps.print(content);//输出内容
	ps.close();//关闭输出流
 %>
 <%
 	Scanner scan=new Scanner(new FileInputStream(file));//使用Scanner读取文件
 	scan.useDelimiter("\n");//设置读取分割符
 	StringBuffer buf=new StringBuffer();//要将所有内容都读取进来
 	while(scan.hasNext()){//取出所有数据
 		buf.append(scan.next()).append("<br/>");//保存在StringBuffer类中
 	}
 	scan.close();//关闭输入流
  %>
  <%=buf %>
</body>
</html>

 效果图:

 

案例讲解:网站计数器
在一些站点中,读者经常会看见网站计数器这样的操作,那么这种操作现在就完全可以利用已经学习过的知识完成,但是在进行代码的开发之前,读者必须注意以下三个问题:
1、  网站的来访人数可能会有很多,有可能超过20位整数,所以必须使用大整数类 —— BigInteger完成;
2、  用户每次在第一次访问的时候才需要进行计数的操作,在执行计算之前必须使用isNew()判断;
3、  在进行更改、保存的时候需要进行同步操作。

 

查看application范围的属性

<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%><%-- Scanner在java.util包中定义 --%>
<html>
<head>
<title>列出全部的属性名称及内容</title>
</head>
<body>
<%// 得到全部的属性名称
	Enumeration enu = this.getServletContext().getAttributeNames();
	while (enu.hasMoreElements()) { // 循环输出
		String name = (String) enu.nextElement(); // 得到属性名称
%>
	<h4><%=name%>--&gt;<%=this.getServletContext().getAttribute(name)%></h4>
<%
	}
%>
</body>
</html>

效果图:

 

小结
application表示的是整个上下文的资源环境;
在实际中可以通过this.getServletContext()方法来代替application的使用;
通过getRealPath()方法可以取得一个虚拟目录对应的真实路径。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值