第六节 ServletContext对象及其应用
目录
6.2 ServletContext简介
web容器在启动时,它会为每个web程序创建对应的ServletContext对象,它代表了当前的web应用
6.1 ServletContext的应用
6.1.1 共享数据
一个web工程(servlet)只有唯一一个全局的ServletContext对象,这里可以存储一些数据并取出
在ServletContext中存储数据的方法
ServletContext context = this.getServletContext();
String username = "mjj";
//将一个数据保存在ServletContext中,名字:username,值:username变量(即“mjj”)
context.setAttribute("username",username);
从ServletContext获取数据的方法
ServletContext context = this.getServletContext();
//这里传入ServletContext中一个数据的名字name(实为键key),获取到这个名字的值(实为值value)
String username = (String) context.getAttribute("username");
我们可以把这个获取到的数据显示在我们的web页面上去
resp.getWriter().print(username);
在web.xml注册servlet后即可实现请求和响应
<servlet>
<servlet-name>getServlet</servlet-name>
<servlet-class>com.mjj.servlet.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getServlet</servlet-name>
<url-pattern>/get</url-pattern>
</servlet-mapping>
6.1.2 getInitParameter()方法获取初始化对象
不但可以获取此类中的String类型的数据
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String s = "xxx";
servletContext.getInitParameter(s);
}
还可以获取web.xml里的一些配置web应用的初始化参数
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String url = servletContext.getInitParameter("url");
resp.getWriter().print(url);
}
在class中写好后,记得在web.xml中注册servlet
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>com.mjj.servlet.ServletDemo3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
6.1.3 请求转发
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().print("进入了demo04,这里面的内容是从/demo中转发过来的");
ServletContext servletContext = this.getServletContext();
//RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/demo");
//requestDispatcher.forward(req,resp);
servletContext.getRequestDispatcher("/demo").forward(req,resp);
同样要在web.xml中注册这个class
<servlet>
<servlet-name>demo04</servlet-name>
<servlet-class>com.mjj.servlet.ServletDemo04</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo04</servlet-name>
<url-pattern>/demo04</url-pattern>
</servlet-mapping>
转发与重定向:
6.1.4 读取资源文件
在maven配置时,有时会出现配置文件失败的情况
Properties:
- 在java中新建properties
- 在resources中新建properties
发现:都被打包到了同一路径下classes,我们俗称这个路径为classpath
新建ServletDemo05用来读取资源:
思路:使用一个文件流来读取数据
要找的不是IDEA中的文件,而是导出的web应用的文件,最上面的classes是编译产生的,打包的时候只打包了servlet-02-1.0-SNAPOSHOT
public class ServletDemo05 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//把资源变成一个流,传入的即为路径
InputStream resourceAsStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/dp.properties");
Properties properties = new Properties();
//加载这个流
properties.load(resourceAsStream);
String un = properties.getProperty("username");
String pw = properties.getProperty("password");
resp.getWriter().print(un+":"+pw);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
依旧去web.xml做一个servlet映射
<servlet>
<servlet-name>demo05</servlet-name>
<servlet-class>com.mjj.servlet.ServletDemo05</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo05</servlet-name>
<url-pattern>/demo05</url-pattern>
</servlet-mapping>
启动测试
如果文章对你有帮助,一键三连支持一下哦~