ServletContext域
程序员文章站
2022-04-16 16:30:41
ServletContext域1.基本信息类型:公共接口作用范围:整个web项目作用:用来获取和存储web中的数据ServletContext接口对象是随着web项目加载而创建的,每个web项目都有一个ServletContext2.ServletContext获取三种方式:利用HttpServlet对象ServletContext servletContext = this,getServletCOntext();利用Config对象ServletContext servletCo...
ServletContext域
1.基本信息
类型:公共接口
作用范围:整个web项目
作用:用来获取和存储web中的数据
ServletContext接口对象是随着web项目加载而创建的,每个web项目都有一个ServletContext
因此在进行不同Servlet对象之间传递数据时可以使用ServletContext域对象
2.ServletContext获取
三种方式:
- 利用HttpServlet对象
ServletContext servletContext = this,getServletCOntext();
- 利用Config对象
ServletContext servletConfig = config,getServletCOntext();
- 利用HttpServletRequest对象
ServletContext servletRequest = req,getServletCOntext();
3.获取数据的方法
getAttribute(String name)
获取对应的数据getAttributeNames()
获取所有的keyremoveAttribute(String name)
移除对应的数据SetAttribute(String name, Object object)
设置数据
4.使用ServletContext域对象传递数据案例:
这里传递数据使用了重定向来实际说明:
重定向原理
利用案例来说明当不同的Servlet对象使用ServletContext对象时的数据共享
代码案例:
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">
<servlet>
<servlet-name>Demo1Servlet</servlet-name>
<servlet-class>com.example.servlet.Demo1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Demo1Servlet</servlet-name>
<url-pattern>/d1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Demo2Servlet</servlet-name>
<servlet-class>com.example.servlet.Demo2Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Demo2Servlet</servlet-name>
<url-pattern>/d2</url-pattern>
</servlet-mapping>
</web-app>
index.html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form rel="stylesheet" action="/d1" method="get">
用户名<input type="text" name="username">
密码<input type="password" name="password">
<input type="submit" value="提交" name="submit">
</form>
</body>
</html>
Demo1Servlet
public class Demo1Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//定义一个要传入的变量
int count = 1;
ServletContext servletContext = this.getServletContext();
servletContext.setAttribute("count",count);
resp.sendRedirect("/d2");
}
}
Demo2Servlet
public class Demo2Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
int count =(int) servletContext.getAttribute("count");
count++;
System.out.println(count);
}
}
显示结果:
这里需要注意的是:
这两个Servlet对象的方法对应都是get或者都是post,否则重定向失效
5.利用ServletContext对象获取web .xml文件中的初始值
6.利用ServletContext对象获取web项目下的资源
只要是web项目,其实所有资源都可以通过ServletContext对象来获取
获取资源时传入的路径是相对于web目录的
ServletContext对象传入文件路径和名称可以获取所有的文件,
- 类编译完成后文件放在WEB-INF下,此时路径就可以看做开发时的src文件夹,路径传入格式:
WEB-INF/相对src路径的路径地址/文件名
- 获取web文件夹下的文件是相对于web目录的路径传入格式:
文件夹名/文件名
1.获取web文件夹下的properties文件
目录结构:
代码
Demo2
public class Demo2Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
//通过ServletContext对象获取properties地址
InputStream inputStream = servletContext.getResourceAsStream("properties");
//通过Properties对象加载文件
Properties properties = new Properties();
properties.load(inputStream);
String user = properties.getProperty("user");
//打印获取的结果
System.out.println(user);
}
}
properties文件
web.xml文件中配置访问地址/d2
显示结果:
本文地址:https://blog.csdn.net/Guesshat/article/details/107653668