ServletContext对象的应用
web容器启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用。
1. 共享数据
我在这个Servlet当中的数据可以在另一个Servlet当中拿到
当前Servlet放的数据
//this.getServletContext():Servlet上下文
ServletContext context = this.getServletContext();
String username = "胡某人";
context.setAttribute("username",username);
需要拿数据的另一个Servlet
ServletContext context = this.getServletContext();
String username = (String) context.getAttribute("username");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().print("名字:"+username);
2. 获取初始化参数
配置的web应用的初始化参数
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
</context-param>
在servlet中拿到web应用中的初始化参数
ServletContext context = this.getServletContext();
String url = context.getInitParameter("url");
resp.getWriter().print(url);
结果为
3. 请求转发
Servlet将请求转发给另一个Servlet
需要请求转发的Servlet
ServletContext context = this.getServletContext();
//RequestDispatcher requestDispatcher = context.getRequestDispatcher("/serv");//参数为要转发到的servlet路径
//requestDispatcher.forward(req,resp);//调用forward实现请求转发
context.getRequestDispatcher("/serv").forward(req,resp);
4. 读取资源文件 Properties
- 在Java目录下新建properties
- 在resources目录下新建properties
发现都被打包到了同一路径下:classes,俗称类路径classpath
需要一个文件流
//在target的web应用的classes里找到配置文件
InputStream asStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/da.properties");
Properties prop = new Properties();
prop.load(asStream);
String user = prop.getProperty("username");
String pwd = prop.getProperty("password");
resp.getWriter().print(user+":"+pwd);
配置文件
username=root
password=123456
结果