ServletContext应用

ServletContext

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

1、共享数据

我在这个servlet中保存的数据,可以在另一个servlet中拿到

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//       resp.setContentType("text/html");
//       resp.setCharacterEncoding("utf-8");
//        PrintWriter writer = resp.getWriter();
//        writer.print("Hello Servlet!");

        ServletContext s = this.getServletContext();
        String username="龙龙";
        s.setAttribute("username",username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}
public class GetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        ServletContext m = this.getServletContext();
        String username = (String) m.getAttribute("username");
        resp.getWriter().print("名字"+username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}
<servlet>
  <servlet-name>hello</servlet-name>
  <servlet-class>com.zhou.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
  <servlet-name>getc</servlet-name>
  <servlet-class>com.zhou.servlet.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>getc</servlet-name>
  <url-pattern>/getc</url-pattern>
</servlet-mapping>

​ 测试访问结果:

2、得到初始化信息

public class ServletDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String a = servletContext.getInitParameter("url");
        PrintWriter writer = resp.getWriter();
        writer.print(a);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

web.xml中配置初始化信息及映射

<context-param>
  <param-name>url</param-name>
  <param-value>http://localhost:3306/mybatis</param-value></param-value>
</context-param>
<servlet>
  <servlet-name>getp</servlet-name>
  <servlet-class>com.zhou.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>getp</servlet-name>
  <url-pattern>/getp</url-pattern>
</servlet-mapping>

3.请求转发

public class ServletDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("进入了ServletDemo2");
        ServletContext sC = this.getServletContext();
        RequestDispatcher rd = sC.getRequestDispatcher("/getp");//转发的请求路径
        rd.forward(req,resp);//调用forward方法实现转发



    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

web.xml中配置初始化信息及映射

servlet>
  <servlet-name>getp</servlet-name>
  <servlet-class>com.zhou.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>getp</servlet-name>
  <url-pattern>/getp</url-pattern>

4、读取资源文件

Properties

  • 在java目录下新建properties
  • 在resource目录下新建properties

发现都被打包到了同一个路径下:classes,我们俗称这个路径为classpath

演示

需要一个文件流

username: root
password: 123456
public class ServletDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext sc = this.getServletContext();
        InputStream ra = sc.getResourceAsStream("/WEB-INF/classes/db.properties");
        Properties properties = new Properties();
        properties.load(ra);
        String user = properties.getProperty("username");
        String pwd = properties.getProperty("password");
        resp.getWriter().print(user+":"+pwd);



    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}
<servlet>
  <servlet-name>read</servlet-name>
  <servlet-class>com.zhou.servlet.ServletDemo3</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>read</servlet-name>
  <url-pattern>/read</url-pattern>
</servlet-mapping>
      

测试OK!

posted @   周志飞  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示