Servlet中优先级问题与ServletContext解析

1、在web.xml中指定的固有映射路径优先级最高,找不到的情况下才去调用设置的默认映射路径。

<web-app version="2.5"
          metadata-complete="true">
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.lib.helloservlet</servlet-class>
  </servlet>

  <servlet>
    <servlet-name>error</servlet-name>
    <servlet-class>com.lib.errorservlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
  
</web-app>

当访问localhost:8080/hello时返回的是helloservlet方法,而如果访问其他的例如localhost:8080/hello1就会返回errorservlet方法。
2、ServletContext
在Web容器启动过程中,它会为每个Web程序都创建一个对应的ServletContext对象,这个对象是全局的,能够代表当前的Web应用
· 共享数据
在一个Servlet中保存到ServletContext中的数据能够在另一个Servlet中拿到。

  <servlet>
    <servlet-name>test</servlet-name>
    <servlet-class>com.lib.TestServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>test</servlet-name>
    <url-pattern>/test</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>get</servlet-name>
    <servlet-class>com.lib.GetServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>get</servlet-name>
    <url-pattern>/get</url-pattern>
  </servlet-mapping>

先在TestServlet中给ServletContext添加值

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("it's ok");
        ServletContext sc = this.getServletContext();  //servlet上下文

        String s = "lalala";
        sc.setAttribute("string",s);  //将一个数据保存到servlet的context中
    }

然后在GetServlet中获取ServletContext中的值

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext sc1 = this.getServletContext();
        String str = (String) sc1.getAttribute("string");
        resp.getWriter().print("string:"+str);
    }

最后运行程序;
如果先进入get页面则会返回null值,再进入test页面后最后又进入get页面可以看到有返回值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值