JSP入门

JSP简介

所谓JSP就是在网页文件中嵌入Java代码或JSP定义的一些标记。JSP是建立在Servlet上的,在执行时JSP容器会先将JSP文件转换成Servlet文件以及class 文件,然后再执行。所以说JSP实际上也是Servlet。JSP容器也是Servlet容器。

JSP语法

JSP页面由元素和模板数据组成,模板数据不必理会,这些内容将直接发到客户端,JSP容器不会处理,例如HTML内容。

JSP元素分为指令元素、脚本元素和动作元素三种。

指令元素

指令元素用于为转换阶段提供整个JSP页面的相关信息,不会产生任何的输出到当前的输出流中。指令元素有三种分别是:page、include和taglib。语法形式如下所示:

<%@ directive (attr="value")* %>
XML语法格式
<jsp:directive.page attr1="value1" attrl="value2".. />

page指令

page指令的作用范围是整个JSP页面,无论放到哪里都可以,好的习惯应该放到JSP页面的顶部。page指令有13个属性:

  • language="scriptingLanguage"

    用于指定脚本元素使用的脚本语言,默认java,就目前来说也仅支持java

  • extends="className"

    用于指定JSP页面转换后的Servlet类从哪一个类继承,通常不需要使用,JSP容器会自动提供。需要注意的是该值时完整的限定类名

  • import="importList"

    用于指定脚本环境中可以使用的Java类。例如:

        <%@ page import="java.util.Vector, java.io.*" %>
    //或者
        <%@ page import="java.util.Vector" %>
        <%@ page import="java.io.*"  %>

    page指令中只有import属性可以重复设置。默认导入列表是:java.lang.*,java.servlet.*,java.servlet.jsp.*和javax.servlet.http.*。

  • session="true|false"

    用于指定JSP页面中是否可以使用session对象,默认true

  • buffer="none|sizekb"

    用于指定out对象的缓冲区大小,若设为none,表示没有缓冲区,所有输出通过ServletResponse的PrintWriter对象写出。单位为kb,默认8kb。

  • autoFlush="true|false"

    用于指定当缓冲区满的时候,缓存是否自动刷新,若设为false,当缓冲区满时会抛出一个异常。默认true

  • isThreadSafe="true|false"

    用于指定对JSP页面的访问是否是线程安全的。默认true。此属性不推荐使用

  • info="info_text"

    用于指定页面的相关信息,该信息可以通过Servlet接口的getServletInfo()方法得到。

  • errorPage="error_url"

    用于指定当JSP页面发生异常时,将转向哪一个错误处理页面。需要注意的是,若一个页面通过使用该属性定义了错误页面,那么在web.xml文件中定义的任何错误页面将不会被访问。

  • isErrorPage="true|false"

    用于指定当前JSP页面是否是另一个JSP页面的错误处理页面,默认false。

  • contentType="ctinfo"

    指定用于响应的JSP页面的MIME类型和字符编码。例如:

    <%@ page contentType="text/htmll charset=gb2312" %>
  • pageEncoding="peinfo"

    用于设置JSP页面使用的字符编码,若设置了该属性,则使用该属性指定的字符集,若无,则使用contentType属性指定的字符集,如果两个都没有指定,则使用字符集"ISO-8859-1"

  • isELIgnored="true|false"

    用于定义在JSP页面中是否执行或忽略EL表达式。默认值依赖于web.xml文件。

include指令

include指令用于在JSP页面中静态的包含一个文件,该文件可以使JPS文件,HTML文件、文本文件或者一段Java代码。需要注意的是包含的文件最好不要包含<html><body>等标签,这会影响到原JSP文件中同样的标签。源文件与被包含文件可以彼此访问定义的变量和方法,因此包含时需要格外小心。include指令语法如下:

<%@ include file="relativeURLsper" %>
xml语法格式
<jsp:directive.include file="relativeURLspec" />

示例:

 1 <%@ page language="java" import="java.util.*" pageEncoding="GB18030" %>
 2 <%@ page contentType="text/html; charset=gb2312" %>
 3 <html>
 4   <head>
 5     <title>My JSP 'MyJsp.jsp' starting page</title> </head>
 6   <body>
 7    现在时间是:
 8     <%@ include file="date.jsp" %>
 9   </body>
10 </html>
11           date.jsp
12 <%
13     out.println(new java.util.Date().toLocaleString());
14 %>

 taglib指令

taglib指令允许页面使用用户定制的标签。语法格式如下:

<%@ taglib (uri="tagLibraryURL" | tagdir="tagDir") prefix="tagPrefix" %>
xml语法格式
<jsp:directive.taglib (uri="tagLibraryURL" | tagdir="tagDir") prefix="tagPrefix" />
  • uri

    该属性唯一的标识和前缀相关的标签库描述符,可以是绝对或者相对的URI。这个URI用于定位标签库描述符的位置

  • tagdir

    该属性指示前缀将被用于标识安装在/WEB-INF/tags/目录或者子目录下的标签文件

  • prefix

  定义一个prefix:tagname形式的字符串前缀,用于区分多个自定义标签。

脚本元素

脚本元素包含三个部分:声明、表达式和脚本段

声明

声明脚本元素用于声明在JSP页面的脚本语言中使用的变量和方法。声明必须是完整的声明语句,遵照java语言的语法。声明不会再当前输出流中产生任何输出。

声明语法:

<%! declaration(s) %>
xml语法格式的声明
<jsp:declaration>declaration(s)</jsp:declaration>

声明示例:

<%! int i; %>
<%! int j =0; %>
<%! public String f(int i) {if (i<3) return "3" ;} %>

可以再一个声明中声明多个变量和方法,也可以使用多个声明。在声明变量的时候要注意不要忘记变量后面的分号,声明只在当前JSP页面有效。另外,使用声明声明的变量,在JSP容器转化JSP页面为Servlet类时,将作为该类的实例变量(类成员变量)或者类变量(类静态成员变量),在多用户并发访问时,这将导致线程安全的问题。

脚本段

脚本段是在请求处理期间要执行的java代码段。脚本段可以产生输出,并将输出发送到客户端,也可以是流程控制语句。语法如下:

<% scriptlet %>
xml语法格式
<jsp:scriplet> scriplet</jsp:scriplet>

在脚本段中声明的变量为局部变量,在后面的脚本段中可以使用该变量。脚本段中的变量时线程安全的。

表达式

表达式脚本元素是Java语言中完整的表达式,在请求处理时计算这些表达式,计算的结果将被转成字符串,插入到当前的输出流中。语法如下:

<%= expression %>
xml语法格式
<jsp:expression> expression</jsp:expression>

要注意,在书写表达式时,一定不要再表达式后面添加任何的标点符号。

动作元素请见下一个博文。

posted @ 2013-07-19 09:12  薛遗山  阅读(449)  评论(0编辑  收藏  举报