有关JSP注释

时间:2024-03-24 00:06:32

最近学习过滤器的时候,dispatcher可以指定过滤器被Servlet容器拦截的方式,可以是REQUEST、INCLUDE、FORWARD、ERROR,默认是REQUEST方式。

现在有两个filter:helloFilter、secondFilter。从index.html页面超链接到dispatcher.jsp页面,dispatcher.jsp页面分别通过<jps:forward>、<jsp:include>等方式进入目的页面test.jsp,此时web.xml文件中的两个filter的dispatcher根据dispatcher.jsp页面进入test.jsp页面的方式进行配置。

1.先测试<jsp:forward>的时候,将secondFilter的dispatcher在web.xml中配置为<dispatcher>FORWARD</dispatcher>,helloFilter没有设    置(默认为REQUEST)。此时只有第二个filter起了拦截作用,第一个filter不起作用。

2.注释掉第一行代码

3.测试<jsp:include>,此时web.xml中两个filter的dispatcher配置和第1步保持一样没有改动。即:helloFilter的dispatcher没有设置默认为            REQUEST,secondFilter的dispatcher设置     成FORWARD。按照正常情况两个filter都不起作用。

问题在于:第2个filter仍然能起作用。

index.html代码如下

有关JSP注释

dispatcher.jsp代码如下:

有关JSP注释

test.jsp代码如下:

有关JSP注释

web.xml配置文件如下:

有关JSP注释

分析原因:index.html和test.jsp都没什么,唯一可能出问题的应该是dispatcher.jsp。而且是在dispatcher.jsp里设置通过哪种方式进入test.jsp的,所以问题出在了这个页面。

仔细检查,发现是JSP注释的问题:<%-- JSP注释  --%> 和<!-- HTML注释  -->。二者的区别:JSP注释可以阻止Java代码的执行,html不能。

思维误区:以前我以为放在<%   %>里的只有java代码,java代码的注释放在<%--   --%>里。看到<jsp:forward page="/test.jsp">                           </jsp:forward>我想到的是html代码,所以就 用<!--   -->注释了。但可以注意到这里是jsp:forward,也就是说他是Jsp代码并不是                   html代码。归根到底还是没有对html有个基础了解,才会出现这么低级的错误。

也就是说,问题出在dispatcher.jsp文件里的注释上:<!--  -->不能阻止Java代码的执行,所以这里的<jsp:forward                                          page="/test.jsp"></jsp:forward>也执行了,所以才会让第2个filter起了作用。

 解决办法: 

有关JSP注释

有关JSP注释

备注:如果直接在浏览器输入test.jsp地址,可以看到第1个filter工作,第2个filter不工作。因为直接在浏览器访问test.jsp页面,这是request方              式。第1个filter默认的拦截方式是 REQUEST,第二个filter设置的拦截方式是FORWARD。

如果希望两个filter都对request方式起作用,可以把第二个filter的dispatcher添加设置:

有关JSP注释