ServletContext

ServletContext对象

代表当前管理或者说是 AP的运行区域, 该区域内所有 AP 共用这1个 ServletContext对象

里面包含了对区域本身特性的描述数据、区域所在服务器数据 及功能性的调度器Dispatcher

GenericServlet中在 init中缓存了 ServletConfig, 该对象中包含 ServletContext

实际实现

ServletContext本身是个接口, 实际实现为 tomcat里面的 org.apache.catalina.core.ApplicationContextFacade, servlet这项技术本身就是一系列的接口

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

		System.out.println(this.getServletConfig().getServletContext());
		// out : "org.apache.catalina.core.ApplicationContextFacade@9ce1c8"
	}


虚拟路径 getRealPath

对于 ServletContext 来说, 一个应用主机名[127.0.0.1:8080]后跟的资源名[day06]就是虚拟路径了;

比如 http://127.0.0.1:8080/day06/ 可以访问到 tomcat下面的 day06项目

http://127.0.0.1:8080/day06/SetAttribute 可以访问到 /SetAttribute 这个资源, /SetAttribute就是虚拟路径, 在tomcat中映射为硬盘上的实际路径, D:/XXX/WEBAPP/DAY06 


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

		System.out.println(this.getServletContext().getRealPath("xxx.xx"));
		// out : "D:\Program Files\apache-tomcat-6.0.39\webapps\ServletContext\xxx.xx"
	}

获取资源

采用JAVA中 IO 的模式

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

		URL recourseUrl = this.getServletContext().getResource("/index.jsp");
		
		System.out.println(recourseUrl.getPath());	//输出 /localhost/ServletContext/index.jsp
		
		String line = null;
		InputStream recourseInputStream = this.getServletContext()
				.getResourceAsStream("/index.jsp");
		
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				recourseInputStream));

		while ((line = reader.readLine()) != null) {
			System.out.println(line); // 输出 index.jsp 文件所有内容
		}
		
		//这样输出不可以
		// byte[] bytes = new byte[512];
		// recourseInputStream.read(bytes, 0, 512);
		// System.out.println(bytes.toString());

	}



应用级别参数

getInitParameter 方法可以获取到 web.xml 里配置的 <context-param> 元素, 通常用来配置 数据库连接信息或者其他整个应用通用的参数

  <context-param>
		<param-name>webname</param-name>
		<param-value>day06r</param-value>
	</context-param>

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

		response.setContentType("text/html");
		
		System.out.println(getServletContext().getInitParameter("webname"));//输出day06r
	}


Attribute 应用属性

Attribute在ServletContext类似于整个项目的 cook, 用字符串为索引, 只不过值可以为一个对象.
	public void init() throws ServletException {
		getServletContext().setAttribute("OBJ1", "SOM OBJ");
	}

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

		response.setContentType("text/html");
		
		System.out.println(getServletContext().getAttribute("OBJ1"));	//一直输出 "SOM OBJ"
		
		
	}

	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		
		getServletContext().removeAttribute("OBJ1");
	}

虽然现在只是学习这个特性, 但是觉得 在某个地方设置后, 在 destory中移除属性中的对象比较优雅


调度器

RequestDispatcher 转发请求调度器

服务器级别的页面跳转, 有 forward 和 include 两种方式

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

		response.setContentType("text/html; charset=UTF-8");

		PrintWriter responseWriter = response.getWriter();
		responseWriter.write("hello 浏览器"); // 浏览器显示 : hello 浏览器

		RequestDispatcher requestDispatcher = this.getServletContext()
				.getRequestDispatcher("/TestPath"); // 必须 '/' 开头	相对于AP跳转

		// requestDispatcher.forward(request, response); //浏览器只显示 TestPath页面
		requestDispatcher.include(request, response); // TestPath页面嵌入在本页面中

	}





























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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值