栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ServletContext中getRealPath()读取文件、观察servlet运行过程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ServletContext中getRealPath()读取文件、观察servlet运行过程

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;



@WebServlet("/LifeServlet")
public class LifeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	// 声明计数器,上下文对象,路径
	int count;
	ServletContext sc;
	String path;
    
	
	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");
	}
	
	
	public void destroy() {
		System.out.println("Servlet已经释放");
	}
    
    public LifeServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	
	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方法被执行了一次");
	}

	
	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方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/821125.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号