目录
application内置对象
简介
application保存的对象主要是保存servlet上下文,也就是说利用application所保存的属性保存在服务器之中,application内置对象对应的类型是:javax.sevlet.ServletContext。application中最重要的方法:
public String getRealPath(String path) ;
范例:使用getRealPath
<%@ page pageEncoding="UTF-8"%>
<%
String path = application.getRealPath("/");
%>
<%= path %>
此时取得的就是“<Context path="/ren" docBase="d:\myweb"/>”,真实的项目目录;需要注意的是getRealPath()接收的路径可能不存在,就像字符串一样只是指明了操作的路径,但是并没有操作。
在真实的开发之中往往不使用application,而是使用this.getServletContext()的方法来代替application对象。
文件操作
既然已经取得了磁盘操作路径就可以进行IO流的操作了,以文件的读写操作为例,需要使用Scanner、PrintStream(PtintWriter);
范例:文件读写操作
input.jsp
<%@ page pageEncoding="UTF-8"%>
<form action="input_do.jsp" method="POST">
文件名称:<input type="text" name="filename" id="filename" value="ren.txt"> <br>
文件内容:<textarea name="note" id="note" cols="30" rows="10"></textarea> <br>
<input type="submit" value="创建文件">
</form>
input_do.jsp 写入文件
<%@ page pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>
<%
String filename = request.getParameter("filename") ;
String note = request.getParameter("note") ;
String filePath = this.getServletContext().getRealPath("/myfile/txt/") + filename;
File file = new File(filePath) ;
if (!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
PrintWriter pw = new PrintWriter(new FileOutputStream(file));
pw.println(note);
pw.close() ;
%>
<a href="read_file.jsp?filename=<%=filename%>">read_file</a>
read_file.jsp
<%@ page pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%
String filename = request.getParameter("filename") ;
String filePath = this.getServletContext().getRealPath("/myfile/txt/") + filename;
Scanner scan = new Scanner(new File(filePath)) ;
scan.useDelimiter("\n");
while(scan.hasNext()){
%>
<%= scan.next()%><br>
<%
}
scan.close() ;
%>
以上功能可以实现网站fang'wen计数器,网站计数器需要考虑刷新不会增加计数,解决使用session.isNew()方法,同步问题使用是sychronized。还需要考虑访问速度的问题。