`
Aether
  • 浏览: 13931 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

JSP拾遗(四)——jsp页面标签

    博客分类:
  • Java
阅读更多

    第二节中,我们通过JSP编译成的java源文件对比出了<% %> <%! %>的区别。一个jsp文件会被解释编译成对应的java类,而<%!%>里面声明的变量或方法都将成为对应java类的成员方法,<% %>里面的代码段将会直接放置到jspService()方法中执行。因此,我们可以在<% %>的代码段中使用jspService()方法中预定义的几个常用对象,第三节我们专门介绍了这几个常用的对象。

 

    除了<% %>和<%! %>标签外,jsp中还可以使用的元素有:<%=  %>表达式、<%--  --%>注释和<%@ page  %>、<%@include %>、 <%@taglib %>编译指令,以及jsp:useBean、jsp:setProperty 、jsp:getProperty 、jsp:include、jsp:forward、jsp:plugin、jsp:fallback等操作指令。本节及下节中详细介绍这些页面标签。

 


    还记得我们的测试应用吗?它在tomcat的webapps目录下,对应目录结构是:

      webapps / test

                /MyJsp.jsp

                /WEB-INF

                           / web.xml

 

        MyJsp.jsp将会被tomcat解释成MyJsp_jsp.java文件,并编译成MyJsp_java.class文件,放置在tomcat的work目录下,对应的路径是: work\Catalina\localhost\test\org\apache\jsp目录。我们将在MyJsp.jsp里面来验证上述jsp元素的作用。

 

 

<%= expression %>

        在jsp中,输出expression 表达式的值。注意<%=必须写在一起,中间不能有空格。先看一下示例: 修改MyJsp.jsp内容如下:

<html>
  <body>
   This is my first JSP! Now time is: <%=new java.util.Date() %>
  </body>
</html>

 
      在TOMCAT的work目录找到对应的MyJsp_jsp.java文件,查看_jspService()方法对于的代码:

      out.write("<html>\r\n");
      out.write("  <body>\r\n");
      out.write("    This is my first JSP! Now time is: ");
      out.print(new java.util.Date() );
      out.write("\r\n");
      out.write("  </body>\r\n");
      out.write("</html>\r\n");

 
        表达式new java.util.Date()直接被out对象的print()方法所输出。由于print()方法接受一切对象Object和基本类型,因此<%= %>里面可以是任意的取值表达式,甚至是一个方法的调用。

 

 

 

<%--  --%>

        jsp隐藏注释。与html中的注释<!-- -->相比较,这里的注释内容将不会被显示到客户端的html中。

先看示例:

   

<html>
    <body>
        This is my first JSP! Now time is: <%=new java.util.Date() %>
        <!-- This is a html comment -->
        <%-- This is a jsp hidden comment --%>
    </body>
</html> 

 

    对应的源代码:

 

     

      out.write("<html>\r\n");
      out.write("  <body>\r\n");
      out.write("    This is my first JSP! Now time is: ");
      out.print(new java.util.Date() );
      out.write("\r\n");
      out.write("    <!-- This is a html comment -->\r\n");
      out.write("    ");
      out.write("\r\n");
      out.write("  </body>\r\n");
      out.write("</html>");

 

 

      从源码里可以看出,HTML的注释将被原样地打印到客户端HTML代码中去,而jsp注释则不会被输出。因此jsp注释里面你可以输入你任何想输入的处理流程,而不担心被别人通过客户端HTML源代码窥视,因为jsp注释只是为开发者服务。

 

<%@ page %>

       page指令用来定义jsp的页面属性。具体可配置参数如:


       

<%@ page 
                language="java"
                extends="className""
                import=importList""
                session="true|false"
                buffer=none|size""
                autoFlush="true|false"
                isThreadSafe="true|false"
                info="infoText"
                errorPage="errorPageURL"
                isErrorPage="true|false"
                contentType=" "
%>

  

       language=”scriptingLanguage”: 设定描述语言,默认值是”java”,而且也是目前唯一有效的设定值。如果一个月前不是Oracle而是Miscrosoft收购了sun,这里可能还将会有个c#的选项。

 

       extends=”className”:设定产生出来的class所以继承的类。前文的源码中科研看到,默认继承的类是HttpJspBase,除非你认为自己可以优化tomcat的源码,否则不要去指定它。

 

      import=”importList” :导入jsp程序所要用到的类的列表。这是唯一可以多次指定的属性。很明显,这里import的类,转换为java源码后将成为类头的import语句。

 

      session="true|false":定义页面是否要用到session。默认是true.当页面加上<%@ page session=”false” %>后,_jspService()方法里将会去除这里缺少了session的声明和赋值。在jsp代码段中直接调用session将会提示变量未声明的错误。因此,session=”false”的意思是禁用了session这个变量,但session技术并没有被禁用,你仍然可以使用request.getSession()来获取并使用session.

 

      buffer="none|size": jsp所需缓存量的大小,单位是KB.默认不得小于8KB.

 

      autoFlush="true":定义jsp所用的buffer满时,是否自动将内容输出到客户端,默认是true。如果指为false,当内容超出时,将会产生overflow的exception。特别要注意的是,当buffer设为none的时候,autoFlush不能被设成false。

 

      isThreadSafe="true|false": 设置线程安全。默认为true,表示以多线程方式出来客户端的请求。当设置为false时,将以单线程方式执行客户的请求,这在页面请求量过多是将是一场灾难,因为必须在前一个请求处理完毕后才能处理后一个请求。

 

      info="infoText":设置jsp程序说明,这个一般不会去设置。

 

      errorPage="errorPageURL":设置发生异常时的转向页面。

 

      isErrorPage="true|false":是否异常页面,默认是false。如果设定为true,则会在解释后的java类里面声明一个exception对象:

Throwable exception = (Throwable) request.getAttribute(“javax.servlet.jsp.jspException”);

因此在错误页面中可以直接使用exception对象。

     

       contentType=”contentType” 设置jsp的文件及编码格式,如contentType=”text/html; charset=utf-8”,作用同response.setContentType(“contentType”),但必须在传回任何结果之前调用它。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics