J2EE/JAVA——IO操作在Servlet中的应用

本文详细介绍了Java中的IO操作,包括字符流和字节流的使用,以及它们在Servlet中的具体应用。通过一个Servlet历史访问计数器的例子,展示了如何在Servlet的初始化和请求处理中进行文件读写。此外,还分析了Servlet在启动时如何通过IO流读取配置文件中的初始计数值,并在每次请求后更新并保存到文件中。
摘要由CSDN通过智能技术生成

1.什么是IO操作

IO操作,也就是Input与Output的缩写。在Java中的IO流操作字符流主要是借助于Writer、Reader字符流的抽象类,其子类FileWriter和FileReader可实现文件的读写操作,BufferedWriter和BufferedReader为字符操作提供缓冲功能。IO流中字节流主要是借助于InputStream和OutputStream字节流的抽象类,其子类FileInputStream和FileOutputStream可实现文件的读写操作,BufferedInputStream和BufferedOutputStream为字节流提供缓冲区功能。

2.IO操作在Servlet中的一个实例

下面通过一个Servlet历史使用次数累加器来演示IO操作在Servlet的使用。

Java源码:

public class LifeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	// 声明计数器,上下文对象,路径
	// 属性
	int count;
	ServletContext sc;
	String path;
    
	/**
	 * <li> 做一些准备工作
	 * <li> 1 获取上下文环境
	 * <li> 2从上下文对象获取文件路径
	 * <li> 3读取文件中的信息
	 */
	public void init() throws ServletException{
		count = 0;
		System.out.println("在init中完成计数器的初始化");
		sc = this.getServletContext();
		path = sc.getRealPath("WEB-INF/count.txt");

		try {
			InputStream is = LifeServlet.class.getResourceAsStream("countinpackage.txt");
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			String string;
			string = br.readLine();
			System.out.println(string);
			count = Integer.parseInt(string); //计数器完成初始化
			br.close();
			is.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
	
	/**
	 * <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 {
		// 设置输出类型和编码字符集
		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方法被执行了一次");
	}

}

HTML源码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>第一个Servlet页面,注意Servlet的生命周期</title>
</head>
<body>
<form method="post" action="lifeCycle">
	<input type="submit" value="激活一个Servlet" />
</form>
</body>
</html>

现在我们运行代码就可以得到:

可以看到第一次运行这个Servlet,出现已经访问了1001次。为什么会显示运行了1001次呢?

 因为在Servlet的init()函数中的count是通过使用getResourceAsStream()函数获得本包内中countinpackage.txt中的内容,再利用BufferedReader以iostream为参数构造函数和BufferedReader的readLine()方法将其转换为字符串形式,最后通过parseInt方法转变为数字形式,最后将值输出给count。

 打开对应文件,就可以看见文件的内容是1000次。

如果我们此时将其中的内容更改为100。

 

 再次运行就可以看到结果变为了101。

由此可见Servlet在进行操作前,在Init()函数中就使用了IO流操作的类与方法获取了数据再对其进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值