您的位置:首页 > Web前端 > JavaScript

JSP基本语法

2014-04-18 11:53 211 查看
JSP页面中可以包含模板元素、脚本元素、EL表达式、注释、指令、和行为元素(JSP标签)等内容。有三种类型的脚本元素:JSP脚本片断、JSP表达式和JSP声明,它们内部使用的都是Java脚本代码
一、模板元素
JSP页面中的静态HTML内容被称之为JSP模板元素。
二、脚本元素
1、JSP表达式
将一个Java变量或表达式的计算结果输出到客户端的简化方式,代码位于<%= %>之中。
2、JSP脚本片断
嵌套在<% %>之中的一条或多条Java程序代码,在这之中可以直接使用JSP提供的隐式对象来完成Web应用程序特有的功能。
3、JSP声明
JSP页面中的脚本片断、表达式、模板元素等都将转换成Servlet的_jspService方法中的程序代码,显然,在脚本片断中声明的变量都将成_jspService方法中的局部变量。另外,在脚本片断中声明的方法也将被插入到_jspService方法中,这就会出现在方法中定义方法的语法错误。如果希望在JSP页面中为其转换成的Servlet定义成员变量和方法,就要使用JSP声明。JSP声明将Java代码封装在<%! %>之中,里面的代码都将被插进_jspService方法的外面。
所以如果有:

1 <%!
2 private int globalVar = 0;//成员变量
3 %>
4 <%
5 int localVar = 0;//局部变量
6 %>
7 globalVar:<%= ++globalVar %>
8 localVar:<%= ++localVar %>
在JSP页面没有发生修改的情况下,对应JSP页面的每次访问请求,Servlet引擎都会调用其所生成的Servlet的_jspService方法进行响应。每次调用_jspService方法时所访问的globalVar都是同一个变量,所以其值不断增长。而每次调用_jspService方法时所访问的localVar是各自独立的变量,所以其值总是1。
三、EL表达式(简述)
EL表达式的基本语法格式为”${表达式}“,它可以出现在JSP自定义标签和标准标签的属性值中,其计算结果将作为标签的属性值或属性值的一部分;EL表达式也可以出现在模板元素中,其计算结果将插入进当前的输出流中。EL表达式相比JSP脚本元素而言,具有以下优点:
1、使用EL表达式可以非常方便地访问JSP页面相关的数据,例如要访问名称为user的请求参数,JSP表达式为:<%= request.getParameter("user") %>,而相应的EL表达式为:${param.user}。在EL表达式中还可以直接使用${cookie.user}来访问名称为user的Cookie信息。在JSP表达式中却无法实现这样的功能。
2、如果表达式的计算结果为null,将输出“null”的字符文本。而EL表达式会将它强制转换为空字符串""后再输出,而不是显示“null”。
3、在EL表达式中还可以使用empty操作符来判断一个参数是否为null,某个集合或字符串中的内容是否为空。
4、EL表达式还具有js等脚本语言的优点,能够对字符串、数字等各种类型的数据进行自动转换。
四、JSP注释
JSP自己的注释方式:<%-- --%>,不会在网页源代码中显示。
<!-- -->是HTML的注释,可以在网页源代码中查看。
1、特殊字符序列的转义处理:

EL表达式内的转义:任何字符序列都不需要进行转义处理,其中“${”和“}”与普通字符序列的处理方式完全相同。例如,${'${' }和${"${" }都可以直接输出${。

JSP脚本元素内的转义:在<% %>中,可以直接使用字符序列<%表达其字面意义,但为了不把%>当成结束分隔符处理,要表达字面意义的%>,必须用%\>进行转义。同时,如果要表达%\>,则用%\\>。

JSP模板元素内的转义:在HTML代码中,为了不把<%当作脚本元素的开始,必须用<\%进行转义。因为在模板元素JSP引擎没有遇到脚本元素的开始分界符,所以可以使用%>来表达字面意义。

2、JSP页面中的错误一般可归纳为以下三类:

JSP页面中的JSP语法格式有问题,导致其不能被翻译成Servlet源文件,JSP引擎将提示这类错误发生在JSP页面中的位置(行和列)及相关信息;

JSP页面中JSP格式没问题,但被翻译成Servlet源文件中出现了Java语法问题,导致不能通过编译。JSP引擎也将提示这类错误发生在JSP页面中的位置(行和列)及相关信息;

JSP页面翻译成Servlet程序在运行时出现异常,这与普通Java程序的运行错误完全一样,Java虚拟机将提示错误发生在Servlet源文件中的位置(行和列)以及相关信息。

五、JSP指令
JSP指令必须嵌套在<%@ %>之中,其基本语法格式为如下:

1 <%@ 指令 属性名="值" %>
其中,属性名是大小写敏感。在JSP2.0中,定义了page、include、taglib三种指令,每种指令又都定义了一些各自的属性。
如果要在一个JSP页面中设置同一条指令的多个属性,可以使用多条指令语句单独设置每个属性,也可以使用同一条指令语句设置该指令的多个属性,例子,
第一种方式:

1 <%@ page contentType="text/html";charset="GB2312"%>
2 <%@ page import="java.util.Date"%>
第二种方式:

1 <%@ page contentType="text/html";charset="GB2312" import="java.util.Date"%>
1、page指令
<%@page language="java"|
extends="className"| --翻译成的Servlet要继承的父类,一般不要设置
import="importList"| --导入包或类(重要)
buffer="none|kb size"| --指定out隐式对象的缓冲区大小,none:不缓冲,默认8k
session=“true|false”| --是否可以使用session,默认true
autoFlush="true|false" --设置out隐式对象的缓冲区已满时,是将其中内容刷新到客户端还是抛出溢出的异常,默认true
isThreadSafe="true|false"| --用于设置JSP页面是否是线程安全,默认true
info="infoText"| --定义Servlet的描述信息,可通过Servlet.getServletInfo方法获得该文本串,可以是任何字符
errorPage="errorPageUrl"| --设置另外一个JSP页面处理当前JSP页面发生的异常。设置值必须使用相对路径
isErrorPage="true|false"| --设置当前页面是否是专门用于处理其他未捕获的异常JSP页面,默认值false
contentType="contentTyepInfo"| --设置响应正文的MIME类型,即指定Content-Type响应头字段的值和说明JSP文件中的文本内容的字符集编码。默认MIME类型为text/html,默认字符集编码为ISO8859-1
pageEncoding="characterSet"| --指定JSP源文件中的字符所使用的字符集编码。设置了该值,contentType属性不再具有说明JSP源文件的字符集编码的作用。如果在JSP页面中没有设置page指令的contentType属性,那么该属性还具有指定响应正文的字符集编码的作用,默认ISO8859-1
isELIgnored="true|false" --当前JSP页面是否支持EL表达式,默认true
%>
问:为什么要说明JSP源文件的字符集编码?
答:因为JSP引擎将JSP源文件翻译成的Servlet源文件默认采用UTF-8编码,而JSP开发人员可以采用各种字符集编码来编写JSP源文件,因此,JSP引擎将JSP源文件翻译成Servlet源文件时,JSP引擎必须要知道JSP源文件所使用的字符集编码,才能将源文件中的字符文本转换成其正确的UTF-8字符集编码。
2、include指令
include指令用于通知JSP引擎,在翻译当前JSP页面时,将其他文件中的内容合并进,当前JSP页面转换成的Servlet源文件中,这种方式称为静态引入。语法如下:

1 <%@ include file="relativeURL"%>
其中file属性用于指定被引入文件的相对路径(设置值是相对于引入文件本身在硬盘的路径,而不是浏览器地址栏URL上的路径)。如果以“/”开头,表示相对于Web应用程序的根目录,否则表示相对于当前文件

被引入的文件必须遵循JSP语法

被引入的文件可以使用任意扩展名,JSP规范建议使用.jspf作为静态引入文件的扩展名

除了import和pageEncoding属性之外,page指令的其他属性不能在这两个页面中有不同的设置值。注意utf-8和UTF-8被当成不同值。

插入include指令的位置与当前JSP页面中的位置保持一致

引入文件与被引入文件是在被JSP引擎翻译成Servlet过程中进行合并的,而不是先合并源文件后再对合并的结果进行翻译

六、行为元素(JSP标签,简述)
JSP提供了一种称之为Action的元素,在JSP页面中使用Action元素可以完成各种通用的JSP页面功能。Action元素采用XML元素的语法格式,所以,干脆将Action元素称之为JSP标签。
1、<jsp:include>标签
<jsp:include>标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入,其语法如下:

1 <jsp:include page="relativeURL | <%=表达式%>" flush="true | false" />
其中,page属性用于指定被引入资源的相对路径,也可以通过执行一个表达式来获得,flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面已输出的内容刷新到客户端,其默认值是false,表示先不刷新已输出的内容。
<jsp:include>标签与include指令的比较:

<jsp:include>标签是在当前JSP页面的执行期间插入被引入资源的输出内容,因此被动态引入的资源必须是一个能独立被Web容器调用和执行的资源。include指令是当前JSP文件被翻译成servlet的过程中引入其他文件,被引入文件只需遵循JSP格式语法。

<jsp:include>标签的作用类似RequestDispatcher.include方法,被引入页面不能改变响应状态码,也不能设置响应头。include指令没有这方面限制。

<jsp:include>标签的执行效率低于include指令,但灵活性要好很多。

<jsp:include>标签对JSP引擎翻译JSP页面的过程没有影响,例如,一个页面的page指令不影响另外一个页面。include指令则对JSP引擎翻译JSP页面的过程起作用。

注意:<jsp:include>标签的page属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前Web应用程序的根目录,否则表示相对于当前页面的访问路径(不是相对于文件的硬盘路径)。
<jsp:include>标签的特性
included.jsp

1 <%@ page contentType="text/html;charset=GB2312"%>
2 <%Thread.sleep(5000);%>
3 included.jsp内的中文<br>
dynamicInclude.jsp

1 <%@ page contentType="text/html;charset=GB2312"%>
2 dynamicInclude.jsp内的中文<br>
3 <jsp:include page="included.jsp" flush="true" />
用浏览器访问dynamicInclude.jsp页面,浏览器首先显示出dynamicInclude.jsp页面输出的内容,等待5秒后,才又显示出included.jsp页面的输出内容。
修改dynamicInclude.jsp文件,去掉flush属性设置,用浏览器重新访问dynamicInclude.jsp页面,浏览器等待5秒以后同时显示出了dynamicInclude.jsp和included.jsp页面的内容。
总结:
RequestDispatcher.include方法:调用该方法前后,写入到缓冲区的内容可以被输出到客户端。
RequestDispatcher.forward方法(不能有内容已经被输出到客户端):调用该方法前,写入到缓冲区的内容被清空,调用该方法后,写入操作被忽略。所以在调用者程序中写入到缓冲区的内容都不会被输出到客户端。
Request.sendRedirect方法(不能有内容已经被输出到客户端):在调用该方法前后写入到缓冲区的内容都会被清空。
2、<jsp:forward>标签
<jsp:forward>标签用于把请求转发给另外一个资源,其语法如下:

1 <jsp:forward page="relativeURL | <%=表达式%>" />
其中,page属性用于指定请求转发到的资源的相对路径,它也可以通过执行一个表达式来获得。
<jsp:forward>标签实际上被翻译成了调用PageContext.forward方法的语句,并在调用forward方法后使用return语句结束了service方法的执行流程,从而不再执行<jsp:forward>标签后面的语句。
3、<jsp:param>标签
当使用<jsp:include>标签和<jsp:forward>标签引入或将请求转发给的资源是一个能动态执行的程序时,还可以使用<jsp:param>标签向这个程序传递参数信息。语法如下:

1 <jsp:include page="relativeURL | <%=表达式%>">
2 <jsp:param name="paramterName" value="paramterValue | <%=表达式%>" />
3 </jsp:include>
或:

1 <jsp:forward page="relativeURL | <%=表达式%>">
2 <jsp:param name="paramterName" value="paramterValue | <%=表达式%>" />
3 </jsp:forward>
4、脚本元素标签

<% %>可替代为:<jsp:scriptlet> code </jsp:scriptlet>

<%! %>可替代为:<jsp:declaration> code </jsp:declaration>

<%= %>可替代为:<jsp:expression> expression </jsp:exprission>

4、指令标签
<jsp:directive.directiveType>标签来替代<%@ directive ... %>语句(directive是指令的意思),如:<%@ page import="java.util.*"%>可替换为:<jsp:directive.page import="java.util.*" />
5、<jsp:text>标签
可以将模板内容封装在这个标签当中。
——JSP标签很多,这里只是简单讲述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: