JSP语法概述

 

JSP语法概述

 

JSP是嵌入Java代码的HTML.JSP由静态HTML,专用的JSP标签和Java代码组成.

实际上,JSP在后台被自动转换成Servlet.

JSP文件在第一次被访问时被转换成Servlet.接着Servlet被编译.

 

JSP写在<%....%>.

JSP通常一大部分都是常规的静态HTML,称其为模板文本.

如果想输出<%,应该在模板文件中写<\%.


 


一.  JSP注释

(1) Java注释

客户端无法查看

//……  单行注释

/* …… */  多行注释

 

(2) HTML注释

客户端可以查看,对页面显示无影响.

使用<!--注释 [<%=表达式%>] -->对多行HTML代码进行注释

期中方括号部分是可选的.

:

<!--This page was loaded on<%=(new java.util.Date()).toLocaleString()%>-->

在浏览器中的源代码就可以查看到<!-- This page was loaded on 2012-4-18 9:38:05 -->

2012-4-18 9:38:05JSP语句<%=(new java.util.Date()).toLocaleString()%>获取的时间.

 

(3) 隐藏注释

客户端查看源代码无法看到.

对于只希望程序员或程序维护人员知道的内容可以通过这种方式进行注释.

<%-- JSP COmment--%>


 

 

 

二.    脚本元素

(1)   表达式

<%=expression%>

以字符串的形式发送到客户端显示.

服务器计算出表达式的值后,值被转为字符串.然后插入到表达式位置上,以供显示.

表达式也可以是没有返回值的函数调用.

表达式可以在JSP中任意位置.只需保证HTML有意义.

注意:

expression必须能求值.

表达式中和的<%=间没有空格.

表达式的中的语句不要分号.

当表达式由多个表达式组成时,表达式的解释顺从左到右.

 

(2)   程序片scriptlet

<% code %>

scriptlet(小脚本)包含多个语句,表达式,变量,对象.

一个JSP页面可以有许多程序片,它们将被插入到生成的Servlet文件的_jspService方法中.每次客户端请求都会新开一个线程.调用Servletservice()方法.service()方法再调用_jspService方法.

 

(3)   声明语句

<%! Declaration %>

Declaration包括变量和方法.

这些变量和方法将被修饰static关键字,而插入到生成Servlet的类中.成为类变量和类方法,直到服务器关闭才被释放.

因此可能会产生线程安全问题,除非确认单独用户访问,或变量是只读的.

当多个客户请求一个JSP页面时.多个线程将共享这些变量和方法.任何一个用户改变这些变量将会影响到其他用户.

 

 

 

三.    编译指令

编译指令是通知JSP引擎的消息,它不直接生成输出.

动作指令影响JSP产生的Servlet的总体结构.

编译指令都有默认值.

格式:<%@ directive attribute1="value1", attribute2="value2",….. attributeN="valueN"%>

directive:代表指令名称.

attribute:代表指令中可选的属性名称.

value:代表属性值并且总是用单引号或双引号括起来.若要在属性值中输出引号,则使用转义,即加上反斜杠 \" .

JSP,有三种类型的指令:page,include,taglib.

 

(1)   page指令

page指令作用于整个JSP页面,用于定义与页面相关的属性.这些属性将被用于和JSP容器通信.page指令放在JSP中任意位置.

import属性

该属性为JSP页面引入Java核心包中的类.这样就可以在脚本部分使用这些类.

JSP页面默认import属性的值:"java.lang.*","javax.servlet.*","javax.servlet.jsp.*","javax.servlet.http.*"

:

<%@ page import="java.io.*"%>

<%@ page import="java.io.*","java.awt.*","java.util.Date"%>

或者,重复设置import属性,相当于多个import语句.

<%@ page import="java.io.*"%>

<%@ page import="java.util.Vector"%>

 

ContentType属性

定义JSP页面相应的MIME类型和JSP页面字符编码,其属性使用以下格式:

<%@ page contentType="MIME_Type;charset=Character-Set"%>

<%@ page contentType="MIME_Type"%>

默认情况下

<%@ page contentType="text/html;charset=ISO-8859-1"%>

 :

<%@ page contentType="application/vnd.ms-excel;charset=GB2312"%>

 

isThreadSafe属性

用来设置JSP页面是否可多线程访问.

<%@ page isThreadSafe="true|false"%>

设为true,JSP页面能同时响应多个客户请求,

设为false,同一时刻只能处理一个客户的请求,其他客户必须等待.

属性默认值为true.

 

session属性

表示当前JSP页面是否参与HTTP会话.

<%@ page  session ="true|false"%>

设为true,可以使用内置的javax.Servlet.HttpSession类型的一个名为session对象.

设为false,session对象不被创建.对该对象的引用将会导致一个严重的转换错误.

属性默认值为true.

 

buffer属性

指定jsp内置输出流out变量使用的缓冲区大小.

<%@ page buffer="none|sizekb"%>

累计输出内容超过了设定的大小或者输出被明确清除(如使用response.flushBuffer),文档才会被发送给客户显示.

如果设置为None,则不适用缓冲区.

默认为8kb.

:  <%@ page buffer="16kb"%>

 

autoflush属性

控制out的缓冲区在装满时的处理,

<%@ page  autoflush ="none|sizekb"%>

设为true,装满时则自动清除缓冲区.

设为false,装满后则自动出现异常.

默认为true.

buffer的值是none, autoflushfalse是不合法的.

 

info属性

定义了一个通过getServletInfo()方法可以从Servlet中检索到得串.其格式为

<%@ page info="some message">

 

isErrorPage属性

指明当前页能否是其他JSP页面的错误处理页面.

格式:

<%@ page isErrorPage="true"%>

<%@ page isErrorPage="false"%><%--Default--%>

 

errorPage属性

指定一个当前页面未被捕获的任何异常的页面.

格式:  <%@ page errorPage="Relative URL"%>

Relative URL指定的错误页的isErrorPage属性必须设为true.

 

 

(2)   include指令

该指令放在要将外部文件插入的位置.指令使文件整体插入到该处.

格式:    <%@ include file="filename"%>

Jsp被转换成Servlet,外部文件被插入,然后一起进行编译.所以当外部文件发生改变时,当前页面必须重新编译.即必须重新保存该JSP文件.

 

 

(3)   taglib指令

指定一个标记库,用于扩展标准JSP标记集.

该指令完成三个任务:

首先,它通知JSP服务器,页面使用一个标记库;

其次,它指定包含标记库标记符的特殊JAR文件位置;

最后,它指定一个用于唯一区分这些新标记的标记前缀.

格式:    <%@taglib uri="someuri" prefix="somename"%>

uri属性,是一个引用标记库描述符文件.后缀名为TLD(tag library descriptor)的绝对或相对URL.

prefix属性,声明一个prefix:tagname形式的前缀.以jsp:,jspx:,java:,javax:,servlet:,sun:,sunw:,开始的前缀被保留.

如果TDL文件定义了一个名为tag1的标记,并且在prefix属性的值设为test,那么实际的标记名将为test:tag1.

 

 

 

四.  JSP动作元素

动作元素影响JSP运行的功能.

格式:    <jsp:action_name attribute1="value1",attribute2="value2",……attributeN="valueN"/>

action_name代表动作名称.

attribute代表属性名称.

value代表实现值.

 

(1)include动作标签

当网页中存在大量相同部分.可以把这些相同部分放在网页外部作为共享资源.使用include引入共享资源.

 

格式:

<jsp:include page="someFile.jsp" flush="true|false"/>

<jsp:include page="someFile.jsp"  flush="true|false">

{ <jsp:param name="someName" value="somValue" /> }*

</jsp:include>

被包含的文件通过JSP的内置对象request调用getParameter()方法获得参数值.

include指令告诉JSP页面动态包含外部文件, JSP页面运行时才将文件加入.

include指令使用相对路径,所以需要把被包含文件放在合适的位置.如果位置不对,找不到文件将会出错.

 

如果包含的文件时普通的文本文件,然后将执行的结果发生到客户端显示.所以,如果修改了被包含的文件,那么运行时将看到修改后的结果,这一点和include指令不同.该标签可以结合param指令,向要包含的文件传送信息.

 

 

 

(2)forword动作标签

该动作将当前请求转发到其他资源.资源必须在原jsp文件相同的上下文环境中.

该指令会停止当前页面的继续执行,而转向其他页面.

格式:  <jsp:forward page=”{ relativeURLspec |<%=expression%>%}”>

该标签也可以结合param指令,向要转到的页面传送信息,格式同include标签.

<jsp:forward page=”{ relativeURLspec |<%=expression%>%}”>

{ <jsp:param name="someName" value="somValue" /> }*

</jsp:forward>

在导向一个页面的时候,需要传递参数,不传递参数也行会出错,这时候就可以采用上述方法.也可以在一个页面中使用多个<jsp:param>来传递多个参数.

 

 

(3)useBean动作标签

格式:

<jsp:useBean id="bean的名字" class="创建bean的类" scope="有效范围" />

或者

<jsp:useBean id="bean的名字" class="创建bean的类" scope="有效范围">

</jsp:useBean>

服务器将加载该bean类的一个对象.

<jsp:useBean>

功能:相当于用class指定的类定义一个对象,对象的名字是id的值.

class  指出Bean的类名.

id  指出class指定类的对象名.

scope  说明该Bean的实例的作用范围,

取值有4.

page”  表示Bean的有效范围是当前的JSP页面.每次请求访问JSP页面时都会创建新的Bean,Bean存储在pageContext对象中.

request”  表示Bean的有效范围是当前的请求.Bean存储在HttpServletRequest对象中.在使用<jsp:include><jsp:forward>或者RequestDispatchincludeforward方法时,两个jsp页面,jsp页面和Servlet将会共享该Bean.

session表示Bean的有效范围是当前会话.Bean存储到与当前请求相关的HttpSession对象中.如果多个客户在在页面中相互链接,每个页面都包含有一个useBean标签,这些useBean标签中的id的值都相同,scope都取为session,那么客户在这些页面得到的useBean是相同的一个.

application”  表示Bean的有效范围是整个程序.Bean实例存储在ServletContext对象中. ServletContextWeb应用中多个ServletJSP页面共享.scope=”application”Bean所有的客户都能共享.

这个Bean直到服务器关闭才被取消.

 

作用范围大小: page<request<session<application

 

 

(4)setProperty动作标签 <jsp:setProperty>

用于设置Bean的属性,相当于调用Beanset方法. JSP解释器遇到<jsp:setProperty>时就为指定的属性赋值.

 

格式:

<jsp:setProperty name=”beanName” propertyExpression/>

name  指定要赋值的类名.该类应该是<jsp:useBean>中已声明的.

propertyExpression  Bean的属性赋值. propertyExpression可以有如下形式.

property = ”*”;  Bean里面的所有属性赋值.这些值是从request对象中获取,其作用相当于request对象取出一些值,然后通过Beanset方法把这些值赋给Bean中相应的属性.

property = ”propertyName”  Bean中的某个属性赋值,property属性指出为哪些属性赋值,值从request对象获取( value=request.getParameter(”propertyName”) ).

property = ”propertyName” value=”value” Bean中的某个属性赋值,property指出要赋值的属性,value指出所赋的值.

 

 

(5)getProperty动作标签 <jsp:getProperty>

获取bean属性的值,相当于调用Beanget方法.JSP解释器遇到<jsp:getProperty>,就在该位置上显示取得的值.

<jsp:getProperty name=”beanName” property=”pname”>

name 指定Bean的类名. 该类应该是<jsp:useBean>中已声明的.

property 指出要获取哪个属性的值.使用get方法获取由property属性所指出的属性值.

 

 

(6)param动作标签<jsp:param>

该动作将参数传递给<jsp:include>或者<jsp:forward>.这些参数是include/forward指定的文件运行时需要的,不传递参数可能会出错.

 

配合<jsp:include>向包含文件传递参数.

<jsp:include page=”{relativeURL|<%=expression%>}” flush=”true”>

<jsp:param name=”parameterName” value=”{ parameterValue|<%=expression %>}” />

</jsp:include>

name属性确定参数的名字.

value属性确定参数的值,这个值可以使用表达式.

 

:

<%@page language=”java” contentType=”text/html” charset=”gb2312”%>

<html>

<head>

<title>JSP_Include测试</title>

</head>

<body>

下面是include的内容

<br />

<br />

<jsp:include page=”jspIncludeFile.jsp”>

<jsp:param name=”number” value=”5” />

</jsp:include>

<br />

上面是include的内容

</body>

</html>

 

jspIncludeFile.jsp

<%@page language=”java”;contentType=”text/html”;charset=”gb2312”%>

被包含的文件开始

<br />

<%

out.println(“…”);

out.println(“包含的内容”);

out.println(”<br />”);

String number=request.getParameter(“number”); //获取参数名为number的数值.

out.println(”<br />”);

out.println(“…”);

%>

<br />

被包含的文件结束

<br />

 

配合<jsp:forward>向跳转页面传递参数.

<jsp:forward page=”{relativeURL|<%=expression%>}”>

<jsp:param name=”parameterName” value=”{parameterValue|<%=expression %>}” />

</jsp:forward>

 

说明:根据需要可以在一个页面中使用多个<jsp:param>来传递多个参数.

 

 

(7)plugin动作标签 <jsp:plugin>

<jsp:plugin>用于在页面中内嵌Java对象,java插件.浏览器可以播放或显示内嵌对象(AppletBean).使用这个动作标签,可以确保AppletJavaBean能在适当的Java虚拟机上运行.

注意:插件需要被下载到浏览器并且在客户端执行.

格式

<jsp:plugin type=”bean|applet” code=”objectCode” codebase=”objectCodeBase” />

type  指出组件类型JavaBeanApplet

code  指出将要执行的class文件名,这个文件必须在codebase指定的目录中

codebase  指出将要执行的class文件所在的目录

<jsp:plugin type=”bean|applet” code=”objectCode” codebase=”objectCodeBase”>

<jsp:params >

<jsp:param name1=”name1” value=”value1”>

<jsp:param name1=”name1” value=”value1”>

</jsp: params >

<jsp:fallback>

   客户端不支持Java插件的处理信息

</jsp:fallback>

</jsp:plugin>

 

 说明:

<jsp:params><jsp:fallback>只能在<jsp:plugin>中使用.

<jsp:params>用于向插件传递参数

<jsp:fallback>用于当客户端不支持Java插件的动作标签的使用. fallback元素用于指定组件失败时发送到客户端的错误信息字符串.

 

:

<jsp:plugin type="applet" code="A.class" width="120" height="120">

<jsp:params >

<jsp:param name="someName" value="someValue">

</jsp:params >

<jsp:fallback>

    prompt message

</jsp:fallback>

</jsp:plugin>

当访问含有这段代码的JSP文件时,如果客户端不支持applet,就要下载Java Plug插件.出现客户选择是否下载插件的界面.用户下载安装完成后,就可以使用java虚拟机记载执行Java Applet小应用程序A.class.

 

 

 

五.  内置对象

内置对象不用声明,直接在JSP脚本中使用.

内置对象有8:

out,request,response,session,application,pageContext,config,page

 

 

1.    out对象

out(Javax.servlet.jsp.JspWriter)用于将内容写入JSP页面实例的输出流中.

JspWrite继承了java.io.Write. JspWriter仿效了java.io.BufferedWriterjava.Io.PrintWriter中的某些功能.但out.PrintWriter()不会抛出java.Io.IOException异常.

 

通过page指令的buffer属性设置缓存区的大小.

如果page指令选择了autoflush="true",则当出现由于当前的操作不清空缓存而造成缓冲区溢出的情况时,这个类的所有I/O操作会自动清空缓冲区的内容.

如果autoflush="false",那么当操作造成了缓冲区溢出时,这个类的所有的I/O操作将抛出一个IOException

 

out对象的属性

autoFlush

类型为protected boolean autoflush

如果变量值为真,则当当前的操作造成缓冲区溢出时,缓冲区会被清空。

如果变量值为假,则如果当前操作造成缓冲区溢出就会抛出一个IOException

bufferSize

类型为protected int bufferSize

表示缓冲区目前的大小。初始值根据不同的设备而不同,但是不少于8KB

DEFAULT_BUFFER

类型为public static final int DEFAULT_BUFFER

表示Writer正使用的缺省的缓冲区大小设置。

No_BUFFER

类型为Public static final int NO_BUFFER

表示Writer是否处于缓存输出状态。

 

out对象的方法

print(boolean|char|char[]|double|float|int|Object|String)  输出值.

println(boolean|char|char[]|double|float|int|Object|String)  输出值,并换行.

newLine()  输出一个换行符

flush()  输出缓冲区里的内容

close()  关闭输出流.注意不需要显示的调用该方法.jsp容器生产代码中自动包含该方法.

newLine 输出换行字符

clear()    清除缓冲区里的数据,但不输出到客户端

clearBuffer() 清除缓冲区里的数据,输出到客户端

public int getBufferSize()    获得out对象使用的缓冲区大小.

getRemaining()   获得缓冲区中没有被占用的空间

public boolean isAutoFlush()     判断out对象是否自动输出

 

 

2.    request对象

request(Javax.servlet.ServletRequest)对象代表客户端对服务器的一个请求.通过该对象可以获得请求中的头信息,Cookie和请求参数。

对于来自每个客户端的每个请求,都有一个request对象与之对应.客户每次请求页面时,JSP引擎创建一个request对象代表请求.request对象封装了用户提交的信息,这些信息包括HTTP请求的请求行,HTTP头和信息体.通过相应的方法获取封装的信息.

 

getParameter(String_name)  返回指定参数名字的参数值.

getParameterNames()    返回Enumeration类实例,表示客户提交信息体部分中所有参数的名字,

getParameterValues(String name)    返回指定参数的所有值.

 isUserInRole 判断认证后的用户是否属于某一成员组

getAttribute(String name)   返回name指定的属性值,如该属性值不存在,返回Null.

getAttributeNames()    返回Enumeration类实例.表示request对象的所有属性名的集合,

getCookies() 返回Cookie对象的数组.表示客户端的所有Cookie.

getCharacterEncoding       返回请求的字符编码方式

getContentLength       返回请求正文的长度,如不确定返回-1

getHeader(String name)     返回指定名字报头值

getHeaders(String name)   返回Enumeration实例.表示指定名字报头的所有值.

getHeaderNames() 返回所有报头的名字,一个枚举

getInputStream()    返回请求输入流,返回请求中的数据

getMethod()    返回客户端向服务器端传送数据的方法

getProtocol() 返回客户端向服务器端传送数据的协议名称

getQueryString()  返回以get方法向服务器传送的查询字符串.

getRequestURI() 返回发出请求字符串的客户端地址

getRemoteAddr() 返回客户端的IP地址

getRemoteHost() 返回客户端的名字

getSession() 返回和请求相关的会话

getServerName()    返回服务器的名字

getServerPath()      返回客户端请求文件的路径

getServerPort()      返回服务器的端口号

removeAttribute()   删除请求中的一个属性

setAttribute(String name,java.lang.Object obj)       设置名字为namerequest参数的值.该值由obj指定.

 

 

3.    response对象

response(Javax.servlet.ServletResponse)作为JSP页面处理结果返回给用户的响应存储在该对象中。并可以用response对象向客户端发送数据,设置响应内容,响应头以及重定向(cookies,头信息等)

 

addCookie(Cookie cook)   添加一个Cookie对象

addHeader(String name,String value)      添加Http文件指定名字头信息

containsHeader(String name)    返回布尔值,判断指定名字Http文件头信息是否存在

encodeURL  使用sessionid封装URL

flushBuffer   强制把当前缓冲区内容发送到客户端

getBufferSize()         返回缓冲区大小

getOutputStream()      返回到客户端的输出流对象

sendError(int)     向客户端发送错误信息

sendRedirect(String path)        把响应发送到path进行处理.

setContentType   设置响应的MIME类型

setHeader(String name,String value)       设置指定名字的Http文件头信息,如果该值已经存在,则新值会覆盖旧值.

 

 

4.    session对象

session(javax.servlet.http.HttpSession)对象用于在无状态连接协议的情况下跟踪客户状态.

用户在Web应用程序中访问同一页面时,session变量始终存在,当用户在页面之间跳转时,存储在session对象中的变量也不会清除.

若需要,可以显式地结束session和设置session的超时期限。

不同客户对应的Session不同.SessionID保存在客户机的Cookie.session ID用于区分不同用户.

 

JSP页面中.通常可以直接使用session对象。不过为了确认,可以加入以下代码,以表示需要启动session功能。

  <%@page session="true"%>

  如果设置上述的session值为false,则说明禁用session功能。

 

getAttribute(String name)   返回指定名字的属性

getAttributeNames()    返回Enumeration实例,表示session中每个属性对象.

getCreationTime()       返回session的创建时间,最小单位为毫秒.

getId()    返回会话唯一标识符.

getLastAccessedTime()     返回当前session最后被客户发送请求的时间, 最小单位为毫秒.

getMaxInactiveInterval()     返回session对象的生存时间,单位为秒.负值表示session永远不会超时间.

invalidate()      销毁session对象

isNew()  每个请求是否会产生新的session对象

removeAttribute() 删除指定名字的属性

setAttribute(String name,java.lang.Object obj)       设置名字为name的属性值的value,并将之存放于session对象中.

 

 

5.    application对象

Application(javax.servle.ServletContext)存储了运行JSP页面的servlet以及在同一应用程序中的任何Web组件的上下文信息。

application对象比session对象的生存时期更长.

服务器启动后,就产生了这个application对象,直到服务器关闭,该对象才会被取消.所有客户共享这个内置的application对象,任何客户对该对象的属性操作,都会影响到其他用户.

因此在某些情况下,对该对象的操作需要同步处理.

 

forward  重定向到另一页面或Servlet组件

getAttribute   获取某范围中指定名字的属性值

findAttribute  按范围搜索指定名字的属性

removeAttribute   删除某范围中指定名字的属性

setAttribute   设定某范围中指定名字的属性值

getException 返回当前异常对象

getRequest   返回当前请求对象

getResponse       返回当前响应对象

getServletConfig  返回当前页面的ServletConfig对象

getServletContext       返回所有页面共享的ServletContext对象

getSession    返回当前页面的会话对象

 

 

6.  config对象

config(javax.servlet.ServletConfig)用于存取servlet实例的初始化参数。

getServletContext       返回所执行的Servlet的环境对象

getServletName   返回所执行的Servlet的名字

getInitParameter  返回指定名字的初始参数值

getInitParameterNames      返回该JSP中所有的初始参数名,一个枚举

 

7.   pageContext对象

pageContext(Javax.servlet.jsp.PageContext)描述了当前JSP页面的运行环境。

pageContext对象提供了存取所有关于JSP程序执行时所需要用到的属性和方法,如sessionapplicationconfigout等对象属性。

可以返回JSP页面的其他隐式对象及其属性的访问,另外,它还实现将控制权从当前页面传输至其他页面的方法。

对于pageContext对象,它的范围是page

 

 

8.   page对象

page(java.lang.object)java.lang.Object类型的,page对象是当前JSP转换后的Seervlet类的实例.

page对象在页的正文中可以被看作"this"的同义词.

page对象的范围是page.

该对象不经常使用.

 

 

9.   exception对象

exception(Javax.lang.Throwable)在某个页面抛出异常时,将转发至JSP错误页面,提供此对象是为了在JSP中处理错误。只有在错误页面中才可使用<%@page isErrorPage="true"%>

 

 

你可能感兴趣的:(jsp)