016_Servlet上下文

一. Servlet上下文

1. 每个web工程都只有一个ServletContext对象。也就是在同一个web工程里, 所有的servlet获取到的这个类的对象都是同一个。

2. 获取上下文对象: ServletContext context = getServletContext();

3. ServletContext 的作用

3.1. 获取全局配置参数;

3.2. 获取web工程中的资源;

3.3. 存取数据, servlet间共享数据。

4. ServletContext何时创建: 服务器启动的时候, 会为托管的每一个web应用程序, 创建一个ServletContext对象。

5. ServletContext何时销毁: 从服务器移除托管或者是关闭服务器。

6. ServletContext 的作用范围: 只要在这个项目里面, 都可以取。

二. ServletContext 获取全局配置参数

1. 新建一个UseServletContext的Web工程

2. 在下WebContent新建一个index.html

3. 编写index.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>servlet上下文</title>
	</head>
	<body>
		<a href="GetContextParam.action">获取全局配置参数</a><br/>
	</body>
</html>

4. 新建一个GetContextParam.java类

5. 编辑GetContextParam.java

package com.lywgames.myservlet;

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 GetContextParam extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 获取ServletContext对象
		ServletContext servletContext = getServletContext();
		// 获取全局配置参数
		String address = servletContext.getInitParameter("address");
		System.out.println("address = " + address);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

6. 编辑web.xml

7. 部署运行

8. 点击”获取全局配置参数”超链接, 控制台打印

三. ServletContext 获取资源

1. 在WebContent目录下, 新建一个file目录, 放入config.properties文件, 文件内容如下图:

2. servletContext.getRealPath("/"): 工程(项目)在tomcat里面的根目录。

C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\

3. 新建一个GetResources.java类

4. 编辑GetResources.java, 使用getRealPath获取资源

package com.lywgames.myservlet;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
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 GetResources extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 获取ServletContext对象
		ServletContext servletContext = getServletContext();
		/* servletContext.getRealPath("/"): 工程在tomcat里面的根目录。
		 * C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\
		 */
		// 获取给定的文件在服务器上面的绝对路径
		String realPath = servletContext.getRealPath("file/config.properties");
		Properties properties = new Properties();
		properties.load(new FileInputStream(realPath));
		System.out.println("name = " + properties.getProperty("name"));
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

5. 编写web.xml

6. 编辑index.html

7. 部署运行项目

8. 点击”获取资源”超链接, 控制台打印

9. 使用servletContext.getResourceAsStream(“资源文件路径”)获取资源文件输入流, 资源文件路径之前的路径是工程在tomcat里面的根目录。资源文件路径必须存在, 否则返回null。继续编辑我们的GetResources.java

package com.lywgames.myservlet;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
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 GetResources  extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void getRealPath() throws ServletException, IOException {
		// 获取ServletContext对象
		ServletContext servletContext = getServletContext();
		/* servletContext.getRealPath("/"): 工程在tomcat里面的根目录。
		 * C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\
		 */
		// 获取给定的文件在服务器上面的绝对路径
		String realPath = servletContext.getRealPath("file/config.properties");
		Properties properties = new Properties();
		properties.load(new FileInputStream(realPath));
		System.out.println("name = " + properties.getProperty("name"));
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 获取ServletContext对象
		ServletContext servletContext = getServletContext();
		// servletContext.getResourceAsStream使用工程在tomcat里面的根目录。
		InputStream is = servletContext.getResourceAsStream("file/config.properties");
		Properties properties = new Properties();
		properties.load(is);
		System.out.println("name = " + properties.getProperty("name"));
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

10. 类路径相对的是classes目录

11. 使用类路径获取资源, 继续编辑我们的GetResources.java

package com.lywgames.myservlet;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
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 GetResources  extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void getRealPath() throws ServletException, IOException {
		// 获取ServletContext对象
		ServletContext servletContext = getServletContext();
		/* servletContext.getRealPath("/"): 工程在tomcat里面的根目录。
		 * C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\
		 */
		// 获取给定的文件在服务器上面的绝对路径
		String realPath = servletContext.getRealPath("file/config.properties");
		Properties properties = new Properties();
		properties.load(new FileInputStream(realPath));
		System.out.println("name = " + properties.getProperty("name"));
	}
	
	public void getResourceAsStream() throws ServletException, IOException {
		// 获取ServletContext对象
		ServletContext servletContext = getServletContext();
		// servletContext.getResourceAsStream使用工程在tomcat里面的根目录。
		InputStream is = servletContext.getResourceAsStream("file/config.properties");
		Properties properties = new Properties();
		properties.load(is);
		System.out.println("name = " + properties.getProperty("name"));
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 类路径相对于classes路径:C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\WEB-INF\classes
		InputStream is = this.getClass().getClassLoader().getResourceAsStream("../../file/config.properties");
		Properties properties = new Properties();
		properties.load(is);
		System.out.println("name = " + properties.getProperty("name"));
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

四. ServletContext存取数据, servlet间共享数据

1. 新建CunQuData.java和OutLoginCount.java

2. 编辑CunQuData.java

package com.lywgames.myservlet;

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 CunQuData extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 获取ServletContext对象
		ServletContext servletContext = getServletContext();
		
		Object loginCount =  servletContext.getAttribute("loginCount");
		if(loginCount != null){
			servletContext.setAttribute("loginCount", (((int)loginCount) + 1));
		}else{
			servletContext.setAttribute("loginCount", 1);
		}
		
		resp.sendRedirect("OutLoginCount.action");
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

3. 编辑OutLoginCount.java

package com.lywgames.myservlet;

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 OutLoginCount extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 获取ServletContext对象
		ServletContext servletContext = getServletContext();
		int loginCount =  (int)servletContext.getAttribute("loginCount");
		
		StringBuilder sb = new StringBuilder();
		sb.append("<!DOCTYPE html>").append("\r\n");
		sb.append("<html>").append("\r\n");
		sb.append("<head>").append("\r\n");
		// 网页编码UTF-8
		sb.append("<meta charset='UTF-8' />").append("\r\n");
		sb.append("<title>登录次数</title>").append("\r\n");
		sb.append("</head>").append("\r\n");
		sb.append("<body>").append("\r\n");
		sb.append("<h1>登录次数:").append(loginCount).append("</h1>").append("\r\n");
		sb.append("</body>").append("\r\n");
		sb.append("</html>");

		// 相应客户端的内容类型是text/html 编码是UTF-8(包含字符编码和网页编码)
		resp.setContentType("text/html;charset=UTF-8");
		// 字符流响应客户端
		resp.getWriter().println(sb.toString());
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

4. 编辑index.html

5. 编辑web.xml

6. 部署运行项目

7. 多点击几次登录, 显示登录次数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值