• Jsp中的注释


    今天在弄JSTL标签的时候,用到了<c:redirect>重定向标签的时候遇到一个很是蛋疼的问题,就是当我测试完成这个标签的时候,我想测试其他的内容,由于它是重定向的(浏览器地址会发生改变的),这样肯定会影响我后面的测试,于是我就想把这行代码注释了:

    <!--<c:redirect url="/include.jsp"></c:redirect>-->

    然后测试其他的内容了,但是问题来了,我每次刷新浏览器的时候,还是重定向了,我就纳闷了,这句话不是注释了吗?怎么还是执行了,然后我就把这句话删除了,这时候就好了,此时就怀疑这个注释到底有没有用,然后上网查看资料,知道这种注释对于Jsp是没有用的,它是html/xml的原版注释,应该使用

    <%--<c:redirect url="/include.jsp"></c:redirect>--%>

    这个注释就可以了,随后又想起来了,还有Java中原版注释://和/**/,其实也可以这样注释的:

    <%//--<c:redirect url="/include.jsp"></c:redirect>--%>,

    这个和上面的两种有什么区别呢?这时候就可能需要jsp的执行过程了,这里就简单说一下:每个jsp页面都会被jsp引擎翻译成servlet.java的,具体内容可以到tomcat目录下的work文件夹中的项目工程中找到对应的文件,所以最后一种注释是彻底的注释了,因为他在servlet.java中就被注释了,而前面的两种注释在servlet.java代码中是没有被注释的,下面就是servlet.java中的代码片段:

    使用<%//....%>注释的: 

          out.write(" -->
    ");
          out.write("    <br><br>
    ");
          out.write("    
    ");
          out.write("    <!-- c:redirect标签的使用:重定向打开include.jsp页面 -->
    ");
          out.write("    ");
          //<c:redirect url="/include.jsp"></c:redirect>

    这里可以看到,这句话直接被注释了,即:Jsp中<%...%>中的内容会原封不动的翻译成servlet.java

    使用<%----%>注释的:

          out.write(" -->
    ");
          out.write("    <br><br>
    ");
          out.write("    
    ");
          out.write("    <!-- c:redirect标签的使用:重定向打开include.jsp页面 -->
    ");
          out.write("    ");

    使用<!---->注释的:

          out.write(" -->
    ");
          out.write("    <br><br>
    ");
          out.write("    
    ");
          out.write("    <!-- c:redirect标签的使用:重定向打开include.jsp页面 -->
    ");
          out.write("    <!--");
          if (_jspx_meth_c_005fredirect_005f0(_jspx_page_context))
            return;

    综上所述可以发现,原因可能在于那段代码:

     if (_jspx_meth_c_005fredirect_005f0(_jspx_page_context))
            return;

    这个方法是针对redirect标签的做判断的,所以原因就在这个方法内部,可以自行查看,需要注意的是,如果使用<%...%>和<%----%>的话,servelet.java中是没有这个方法的,这一点更能说明为什么<!---->注释没有效果了!


    总结:

    1.第一种注释:

    <!--注释内容--> 

    这是HTML/XML的原版注释,会老老实实的发到客户端的,有什么见不得人的就别用这个写了


    2.第二种注释:

    <%--注释内容--%> 

    有<% %>的东西都是写给JSP应用服务器看的,不会发到客户端的。编译器将其置之不理,html也无缘与其相见,被应用服务器打入冷宫了。这个注释感觉比较多余,不知道专门又搞一个这种注释干什么。


    3.第三种注释:

    <%

    //当行注释

    /**

    多行注释

    */

    %> 

  • 相关阅读:
    Mongoose使用
    Koa原理和封装
    微信用户授权
    Koa微信公众号开发
    Koa2+mongoose
    NodeJS-API
    jquery下json数组的操作用法实例
    SqlCacheDependency:asp.net SQL缓存依赖
    SqlCacheDependency轮询数据库表的更改情况的频率
    设置浏览器地址栏URL前面显示的图标
  • 原文地址:https://www.cnblogs.com/roccheung/p/5797426.html
Copyright © 2020-2023  润新知