servlet实操之ServletContext
1、web容器在启动的时候,它会为每一个web程序都创建一个ServletContext对象,他代表了当前的web应用;作用:
①数据共享
我们在这个servlet中保存的数据可以在另一个servlet中拿到
设置数据的类
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// this.getInitParameter();
// this.getServletConfig();
ServletContext servletContext = this.getServletContext();
String name = "shiy";
servletContext.setAttribute("name",name);//将一个数据保存在了servletContext中名字为name,值为name
}
}
访问数据的类
public class GetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String name = (String) servletContext.getAttribute("name");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
writer.print("<h1>" + name + "</h1>");
}
也可以在web.xml中配置初始化数据
<context-param>
<param-name>sex</param-name>
<param-value>男</param-value>
</context-param>
配置web.xml 用于测试访问结果
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.shiy.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/helloservlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>getServlet</servlet-name>
<servlet-class>com.shiy.servlet.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getServlet</servlet-name>
<url-pattern>/getname</url-pattern>
</servlet-mapping>
</web-app>
②请求转发
public class Demo04 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
//请求转发
RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/getSex");
requestDispatcher.forward(req,resp);
}
}
④读取资源文件
properties
在java目录下新建properties
在resources目录下新建properties
发现都被打包到同意路径下:classespath 俗称“类路径”
思路:
需要一个文件流
getServletContext先获取流的资源路径
然后new一个Properties,load加载文件流,在再使用getProperty获取数据
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
InputStream resourceAsStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes//com/shiy/servlet/db.properties");
Properties prop = new Properties();
prop.load(resourceAsStream);
String username = prop.getProperty("username");
String password = prop.getProperty("password");
resp.setContentType("text/html");
resp.getWriter().print(username + ":"+password);
}
最后测试访问即可~