ServletContext
web容器在启动的时候,它会为每个web容器都创建一个ServletContext对象,它代表了当前的web应用,由this.ServletContext来管理
- 共享数据(会通过section、request替换)
通过这个Servlet保存在ServletContext中的数据,可以在另外一个Servlet中通过ServletContext拿到
关键词:Attribute、ContenType、CharactorEncoding
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// this.getInitParameter() 初始化参数
// this.getServletConfig() servlet配置
// this.getServletContext() servlet上下文
ServletContext context = this.getServletContext();
String username = "YGW";
context.setAttribute("username", username); //属性名为username, 值为username中所带的值
// System.out.println("hello");
}
}
public class GetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext getContext = this.getServletContext();
String username = (String) getContext.getAttribute("username");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().print("名字:" + username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>com.Gw.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>getSer</servlet-name>
<servlet-class>com.Gw.servlet.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getSer</servlet-name>
<url-pattern>/getSer</url-pattern>
</servlet-mapping>
- 获取初始化参数(几乎不用)
关键词:InitParameter、context-param、param-name、param-value
public class servletContext extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String url = context.getInitParameter("url");
resp.getWriter().print(url);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
<!--配置一些web应用的初始化参数-->
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
</context-param>
<servlet>
<servlet-name>gp</servlet-name>
<servlet-class>com.Gw.servlet.servletContext</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>gp</servlet-name>
<url-pattern>/gp</url-pattern>
</servlet-mapping>
- 请求转发(request替换)
关键词:RequestDispatcher、forward
public class servletDispatcher extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
RequestDispatcher gp = context.getRequestDispatcher("/gp"); //注意使用转发时的格式
gp.forward(req, resp); //调用forward方法实现请求转发
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
<servlet>
<servlet-name>sd</servlet-name>
<servlet-class>com.Gw.servlet.servletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sd</servlet-name>
<url-pattern>/sd</url-pattern>
</servlet-mapping>
- 读取资源文件(常用类加载、反射替换)
关键词:InputStream、getResourceAsStream、Properties
public class contextProperties extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
InputStream resourceAsStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
//注意提交时的相对位置以target中的位置为准,用绝对位置放在服务器中可能会发生变化
Properties prop = new Properties();
prop.load(resourceAsStream);
String user = prop.getProperty("username");
String password = prop.getProperty("password");
resp.getWriter().print(user + ":" + password);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
<servlet>
<servlet-name>cp</servlet-name>
<servlet-class>com.Gw.servlet.contextProperties</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cp</servlet-name>
<url-pattern>/cp</url-pattern>
</servlet-mapping>
username = root
password = 123456
特别说明:
资源如果不能加载,可能将其放置在类路径上,需要在当前的pom.xml中加入build代码:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>