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()方法它的做用是获取工程中资源文件绝对的磁盘路径。html

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

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

    2.txt WebRoot目录浏览器

       3.txtWEB-INF目录tomcat

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

 

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

 

 

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

2.      2.txt是放置在myeclipse下的WebRoot下,也就是直接放置在tomcat下的本身的工程下this

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

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);
			}
		
			
	}

}