主要功能
在web容器启动时,会为每个webapp创建一个ServletContext
,代表了当前的web应用。
- 数据共享
通过Attribute
的getter
,setter
方法来实现,Attribute
本质为键值对。 - 获取初始参数
可以通过getInitParameter
方法获取在web.xml中设置的初始参数。
<context-param>
<param-name>paramName</param-name>
<param-value>value</param-value>
</context-param>
- 请求转发
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>forward</servlet-name>
<servlet-class>com.servlet.ContextDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>forward</servlet-name>
<url-pattern>/forwardTest</url-pattern>
</servlet-mapping>
public class ContextDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
context.getRequestDispatcher("/hello").forward(req, resp);
}
}
上述代码会将指向ContextDemo
的url转发到HelloServlet
中,但是在浏览器中的url栏路径并不会发生变化,只是在服务器内部进行的定位的转移。但是与重定向并不等同。
- 获取资源文件
ServletContext
可以通过getResource
方法获取当前web应用目录下的资源文件(可以通过配置将资源文件集中打包在classpath中即/WEB-INF/classes/*.*)
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
Properties properties = new Properties();
properties.load(context.getResourceAsStream("/WEB-INF/classes/demo.properties"));
String username = (String)properties.get("username");
String password = (String)properties.get("password");
resp.getWriter().print(username + ":" + password);
}