ServletContext域对象和资源路径读取问题

域对象共享资源代码体现


package com.shunfei;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CountTime extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.统计浏览器的访问次数  得到一次请求我就计数一次 
		//得到一个servletContext 对象  他是一个域对象,被共享的
		  ServletContext sc = this.getServletContext();
		  response.setContentType("text/html;charset=utf-8");
		 //先获取他属性的值,如果是第一次访问就是null,我就计数一次
		 Integer time = (Integer) sc.getAttribute("time");
		 if(time==null) {//set 回去
			 sc.setAttribute("time", 1);
			 response.getWriter().write("第"+1+"次访问");
		 }else{//不是第一次请求我就计数次数+1,再赋值回去
			 
			 sc.setAttribute("time", time+1);
			 if(time==4) {//清空重新计数
				 sc.setAttribute("time", null);
			 }
			 response.getWriter().write("第"+time+"次访问");
		 }
		// response.getWriter().write("第"+sc.getAttribute("time")+"次访问");
	}

}

资源读取

主要使用getRealPath()方法它的作用是获取工程中资源文件绝对的磁盘路径。

需求:web工程中创建4txt文件,创建一个servlet,servlet中读取四个txt文件的内容。

       1..txt  src目录      /WEB-INF/classes/1.txt

    2.txt WebRoot目录

       3.txtWEB-INF目录

       4.txt放在工程的根目录下。

 

重要点:getRealPath(“/”)这代表的是一个绝对路径,它指向的是当前工程在tomcat下的绝对磁盘路径。

 

 

1.      1.txt是放置在src下,src下的内容最后会被部署到tomcat/webapps/工程/WEB-INF/classes下。

2.      2.txt是放置在myeclipse下的WebRoot下,也就是直接放置在tomcat下的自己的工程下

3.      3.txt它是放置在WEB-INF下,它就会放置在tomcat/工程/WEB-INF

4.      4.txt它是放置在myeclipse工程的根目录下,不会被发布到tomcat中。

 

扩展:对于src下的1.txt文件,它的位置比较特殊,会被发布到classes目录下,

Classes目录它是用于存储.class文件的目录,我们管它叫classpath路径。

在我们的java中,我们想要获取classpath路径,可以直接通过类的Class对象获取到。

 

Class.getResource(“/”).getPath()得到我们的classpath路径,其实对于web project得到的就是classes目录的一个绝对磁盘路径。

 

package com.shunfei;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Get extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			//读取src下的1.txt 
			ServletContext sc = this.getServletContext();
			//String path = sc.getRealPath("/WEB-INF/classes/1.txt");
			//WEBRoot下的2.txt
			//String path = sc.getRealPath("/2.txt");
			//WEB-INF/3.txt
			String path = sc.getRealPath("/WEB-INF/3.txt");
			//4.txt 在Test 的项目下,无法读取.
			//写出内容到页面 
			System.out.println(path);
			BufferedReader br = new BufferedReader(new FileReader(path));
			//String line = br.readLine();
			String line =null;
			PrintWriter pw = response.getWriter();
			//System.out.println(line);
			
			while((line=br.readLine())!=null) {
				pw.print(line);
			}
		
			
	}

}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值