1.getRealPath()
getServletContext()中的方法getRealPath()其作用是获取项目运行目录的路径。
该方法继承自父类HttpServlet
//声明上下文对象
ServletContext sc;
//获得ServletContext对象
sc = this.getServletContext();
//测试一:获取项目中文件的绝对路径
String path = sc.getRealPath("WEB-INF/count.txt");
//测试二:获取项目在服务器的绝对路径
String path = sc.getRealPath("/");
//在控制台输出路径
System.out.println(path);
测试一运行结果:
![]()
测试二运行结果:
![]()
简单总结为:
servletContext.getRealPath(""); -->列: E:\apache-tomcat项目名
servletContext.getRealPath("/"); -->列: E:\apache-tomcat\项目名\
servletContext.getRealPath("/文件名"); -->列: E:\apache-tomcat\项目名\文件名
2.利用上下文对象获取服务器上的文件里的数据实例以及观察servle运行过程
源代码:
package servlet;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author fhzheng
* <li>演示Servlet的生命周期
*/
@WebServlet("/LifeServlet")
public class LifeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 声明计数器,上下文对象,路径
int count;
ServletContext sc;
String path;
/**
* <li> 做一些准备工作
* <li> 1获取上下文环境
* <li> 2从上下文对象获取文件路径
* <li> 3读取文件中的信息
* <li>
* <li> 注意,首次读取时,因为没有文件,可能会有异常Null
* <li> 然后用不同的浏览器来访问时,就可以看到共享的计数了
*/
public void init() throws ServletException{
//count = 0;
System.out.println("在init中完成计数器的初始化begin");
sc = this.getServletContext();
path = sc.getRealPath("WEB-INF/count.txt");
System.out.println(path);
try {
InputStream is = LifeServlet.class.getResourceAsStream("count.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String string = br.readLine();
System.out.println("读到的字符串是:"+string);
count = Integer.parseInt(string);
br.close();
is.close();
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
System.out.println("在init中完成计数器的初始化end");
}
/**
* <li> 销毁
*/
public void destroy() {
System.out.println("Servlet已经释放");
}
/**
* @see HttpServlet#HttpServlet()
*/
public LifeServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* <li> 处理输出到响应中的信息
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// 设置输出类型和编码字符集
response.setContentType("text/html;charset=utf-8");
// 获取out对象
PrintWriter out = response.getWriter();
// 计数器自增1
count++;
// 插旗
out.println("这个Servlet历史上已经被访问了"+count+"次了!");
// 写到文件的组合动作
// 1 获取输出流对象
OutputStream fw = new FileOutputStream(path);
// 2 得到写缓存
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fw));
// 3 准备好数据格式:字符串,由整数转换得到
String string = String.valueOf(count);
// 4 写回到文件
bw.write(string);
// 5 关闭文件相关资源
bw.close();
fw.close();
System.out.println("该Servlet的doGet方法被执行了一次");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
System.out.println("该Servlet的doPost方法被执行了一次");
}
}
注:访问index.html文件后使用dopost方法调用源代码。
1.启动servlet
1)console输出:
可以看到调用init初始化完成,doget和dopost方法也成功调用。
2)网页显示:

2.刷新网页
1)console输出:

由于已经初始化完成,所以不调用init方法
2)网页显示:

3.换用浏览器
由于使用ServletContext中getRealPath()方法读取访问次数所在文件count.txt,即利用上下文对象获取服务器上的文件里的数据,所以用不同的浏览器来访问时,就可以看到共享的计数
谷歌浏览器网页显示:

4.关闭服务

成功调用destroy方法。
本文介绍了ServletContext的getRealPath()方法,用于获取项目运行目录的路径,并通过实例展示了如何利用该方法读取服务器上的文件数据。同时,文章详细描述了Servlet的运行过程,包括启动、刷新、不同浏览器访问以及服务关闭时的方法调用情况。
5032

被折叠的 条评论
为什么被折叠?



