JavaWeb学习笔记(狂神版)--- 第六节 ServletContext对象及其应用

第六节 ServletContext对象及其应用

目录

6.2 ServletContext简介

web容器在启动时,它会为每个web程序创建对应的ServletContext对象,它代表了当前的web应用

6.1 ServletContext的应用

6.1.1 共享数据

JavaWeb学习笔记(狂神版)--- 第六节 ServletContext对象及其应用

一个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>

JavaWeb学习笔记(狂神版)--- 第六节 ServletContext对象及其应用

JavaWeb学习笔记(狂神版)--- 第六节 ServletContext对象及其应用


JavaWeb学习笔记(狂神版)--- 第六节 ServletContext对象及其应用

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应用的初始化参数

JavaWeb学习笔记(狂神版)--- 第六节 ServletContext对象及其应用

@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 请求转发

JavaWeb学习笔记(狂神版)--- 第六节 ServletContext对象及其应用

@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>

转发与重定向

JavaWeb学习笔记(狂神版)--- 第六节 ServletContext对象及其应用

6.1.4 读取资源文件

在maven配置时,有时会出现配置文件失败的情况
JavaWeb学习笔记(狂神版)--- 第六节 ServletContext对象及其应用

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>

启动测试

如果文章对你有帮助,一键三连支持一下哦~

上一篇:Servlet重定向


下一篇:【无标题】