javaweb学习09:ServletContext学习

javaweb学习09:ServletContext学习

  • ServletContext学习:

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

    • ServletContext对象是由容器创建的;

       

  • ServletContext应用:重点

    • 共享数据:我在这个Servlet中保存的数据,可以在另外一个Servlet中拿到;

    • 获取初始化参数:

      • 配置初始化参数:

        <!--配置一些web应用的初始化参数-->
        <context-param>
           <param-name>url</param-name>
           <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
        </context-param>
      • 获取初始化参数:

        ServletContext context = this.getServletContext();
        String str=context.getInitParameter("url");
    • 请求转发:

      • 请求转发:RequestDispatcher;

      • 传入的参数为一个URL;

      • 重点:转发的时候,浏览器请求路径是不变的;

        ServletContext context = this.getServletContext();
        RequestDispatcher requestDispatcher = context.getRequestDispatcher("/getServlet03");//参数为要转发的请求路径
        requestDispatcher.forward(req,resp);//调用forward()方法转发
    • 读取资源文件:

      • Properties

        • 在java目录下新建properties;

        • 在resources目录下新建properties;

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

        //第一个"/"代表当前项目(jar包的第一层),不能省略
        InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
        Properties prop=new Properties();
        prop.load(is);//加载
        String ss=prop.getProperty("username");

 

 

  • 笔记:

    • 在Maven中,资源导出可能会出现问题:(比如Properties文件写在java文件夹里面的情况);

      • 原因:maven是约定大于配置;

      • 解决方案:在build中配置resources,来防止我们资源导出失败的问题;

       

 

  • 共享数据代码案例:放数据

    //放数据
    public class HelloServlet extends HttpServlet {

       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

           //this.getInitParameter();// 初始化参数
           //this.getServletConfig(); // servlet配置
           //this.getServletContext(); // servlet上下文

           ServletContext context = this.getServletContext();
           String username="张三";
           //将一个数据保存到了ServletContext中,
           context.setAttribute("username",username);

      }
    }

     

  • 共享数据代码案例2:取数据

    //取数据
    public class GetServlet extends HttpServlet {

       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

           ServletContext context = this.getServletContext();
           String str=(String)context.getAttribute("username");
           System.out.println(str);
           //设置编码
           resp.setContentType("text/html");
           resp.setCharacterEncoding("UTF-8");
           resp.getWriter().print(""+str);

      }
    }

     

  • 共享数据代码案例: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">

       <!--<context-param>
           <param-name></param-name>
           <param-value></param-value>
       </context-param>-->

       <!--注册servlet-->
       <servlet>
           <servlet-name>hello</servlet-name>
           <servlet-class>com.lesson.demo01.HelloServlet</servlet-class>
           <!--<init-param>
               <param-name></param-name>
               <param-value></param-value>
           </init-param>-->
       </servlet>
       
       
       <!--映射serlvet的路径-->
       <servlet-mapping>
           <servlet-name>hello</servlet-name>
           <url-pattern>/hello</url-pattern>
       </servlet-mapping>


       <!--配置GetServlet-->
       <servlet>
           <servlet-name>getc</servlet-name>
           <servlet-class>com.lesson.demo01.GetServlet</servlet-class>
       </servlet>

       <servlet-mapping>
           <servlet-name>getc</servlet-name>
           <url-pattern>/getServlet</url-pattern>
       </servlet-mapping>

    </web-app>

     

 

 

 

 

 

posted @   gzs1024  阅读(167)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示