J2EEJAVA——IO *** 作在Servlet中的应用

J2EEJAVA——IO *** 作在Servlet中的应用,第1张

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;
    
	/**
	 * 
  • 做一些准备工作 *
  • 1 获取上下文环境 *
  • 2从上下文对象获取文件路径 *
  • 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(); } } /** *
  • 销毁 */ public void destroy() { System.out.println("Servlet已经释放"); } /** * @see HttpServlet#HttpServlet() */ public LifeServlet() { super(); // TODO Auto-generated constructor stub } /** *
  • 处理输出到响应中的信息 */ 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源码:

    
    
    
    
    第一个Servlet页面,注意Servlet的生命周期
    
    
    

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

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

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

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

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

     

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

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

    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://outofmemory.cn/langs/790909.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-05
    下一篇 2022-05-05

    发表评论

    登录后才能评论

    评论列表(0条)

    保存