会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132358个问题
JAVA 全系列/第五阶段:JavaWeb开发/XML技术(旧) 273楼
JAVA 全系列/第五阶段:JavaWeb开发/Ajax技术详解 274楼
JAVA 全系列/第五阶段:JavaWeb开发/Servlet技术详解(旧) 275楼
JAVA 全系列/第五阶段:JavaWeb开发/计算机网络协议详解 277楼

image.png

image.png


image.png

我理解是有三个context:

第一个访问是http://wait:8080/forget/index.html

第二个访问不是应该是http://localhost:8080/getKey/User.html

第三个只有一个path他的docBase是什么?


正确的访问路径是http://localhost:8080/demo1/User.html

image.png

/demo1/User.html这两个没有什么关联


这三个东西搞不明白,应该怎么去理解和区分

JAVA 全系列/第五阶段:JavaWeb开发/Servlet技术详解(旧) 278楼
JAVA 全系列/第五阶段:JavaWeb开发/Ajax技术详解 280楼
JAVA 全系列/第五阶段:JavaWeb开发/Web实战案例 281楼

老师我跟着视频又写了一遍,同样的代码在demo(我用来跟着老师敲的工程)可以成功跑起来,监听器也会被触发那些Added     Removed    Replaced    的输出语句再清空控制台然后访问    attr.do    也可以被打印出来,但是在demo_test(我用来练习的工程)就没法触发监听器,导致清空控制台再访问    attr.do只有以下结果


image.png


但是如果监听器没被触发那么为什么启动Tomcat控制台就会有以下结果


image.png


源码如下:

package com.bjsxt.listener;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;

/**
 * ServletContext对象属性操作监听器
 */
public class ServletContextAttrListener implements ServletContextAttributeListener {
    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        System.out.println("---------------Added Started-----------------");
        //获取属性名和属性值
        System.out.println(scae.getName()+"-------"+scae.getValue());
        //取出ServletContext对象
        System.out.println(scae.getServletContext());
        System.out.println("---------------Added Ended-----------------");
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        System.out.println("---------------Removed Started-----------------");
        //获取属性名和属性值
        System.out.println(scae.getName()+"-------"+scae.getValue());
        //取出ServletContext对象
        System.out.println(scae.getServletContext());
        System.out.println("---------------Removed Ended-----------------");
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        System.out.println("---------------Replaced Started-----------------");
        //获取属性名和属性值
        System.out.println(scae.getName()+"-------"+scae.getValue());
        //取出ServletContext对象
        System.out.println(scae.getServletContext());
        System.out.println("---------------Replaced Ended-----------------");
    }
}
package com.bjsxt.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/attr.do")
public class ServletContextAttrServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext servletContext = this.getServletContext();
        //调用测试监听器的三个方法
        servletContext.setAttribute("key","BJSXT");
        servletContext.setAttribute("key","ITBZ");
        servletContext.removeAttribute("key");
    }
}









JAVA 全系列/第五阶段:JavaWeb开发/Servlet技术详解(旧) 282楼
JAVA 全系列/第五阶段:JavaWeb开发/Web实战案例 283楼
JAVA 全系列/第五阶段:JavaWeb开发/Servlet技术详解 285楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637