JSP 语法


本小节将会简单地介绍一下jsp开发中的基础语法。

脚本程序

脚本程序可以包含任意量的java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。

脚本程序的语法格式:

<% 代码片段 %>

或者,您也可以编写与其等价的xml语句,就像下面这样:

    代码片段 

任何文本、html标签、jsp元素必须写在脚本程序的外面。

下面给出一个示例,同时也是本教程的第一个jsp示例:

 hello world hello world!

<%
out.println("your ip address is " + request.getremoteaddr());
%>

注意:请确保apache tomcat已经安装在c:\apache-tomcat-7.0.2目录下并且运行环境已经正确设置。

将以上代码保存在hello.jsp中,然后将它放置在 c:\apache-tomcat-7.0.2\webapps\root目录下,打开浏览器并在地址栏中输入http://localhost:8080/hello.jsp。运行后得到以下结果:

中文编码问题

如果我们要在页面正常显示中文,我们需要在 jsp 文件头部添加以下代码:

<%@ page language="java" contenttype="text/html; charset=utf-8"
    pageencoding="utf-8"%>

接下来我们将以上程序修改为:

<%@ page language="java" contenttype="text/html; charset=utf-8"
    pageencoding="utf-8"%> 硕编程(yapf.com) hello world!

<%
out.println("你的 ip 地址 " + request.getremoteaddr());
%>

这样中文就可以正常显示了。

jsp声明

一个声明语句可以声明一个或多个变量、方法,供后面的java代码使用。在jsp文件中,您必须先声明这些变量和方法然后才能使用它们。

jsp声明的语法格式:

<%! declaration; [ declaration; ]+ ... %>

或者,您也可以编写与其等价的xml语句,就像下面这样:

    代码片段 

程序示例:

<%! int i = 0; %> 
<%! int a, b, c; %> 
<%! circle a = new circle(2.0); %> 

jsp表达式

一个jsp表达式中包含的脚本语言表达式,先被转化成string,然后插入到表达式出现的地方。

由于表达式的值会被转化成string,所以您可以在一个文本行中使用表达式而不用去管它是否是html标签。

表达式元素中可以包含任何符合java语言规范的表达式,但是不能使用分号来结束表达式。

jsp表达式的语法格式:

<%= 表达式 %>

同样,您也可以编写与之等价的xml语句:

    表达式 

程序示例:

<%@ page language="java" contenttype="text/html; charset=utf-8"
    pageencoding="utf-8"%> 硕编程(yapf.com) 

今天的日期是: <%= (new java.util.date()).tolocalestring()%>

运行后得到以下结果:

今天的日期是: 2016-6-25 13:40:07

jsp注释

jsp注释主要有两个作用:为代码作注释以及将某段代码注释掉。

jsp注释的语法格式:

<%@ page language="java" contenttype="text/html; charset=utf-8"
    pageencoding="utf-8"%> 硕编程(yapf.com) <%-- 该部分注释在网页中不会被显示--%> 

今天的日期是: <%= (new java.util.date()).tolocalestring()%>

运行后得到以下结果:

今天的日期是: 2016-6-25 13:41:26

不同情况下使用注释的语法规则:

语法 描述
<%-- 注释 --%> jsp注释,注释内容不会被发送至浏览器甚至不会被编译
html注释,通过浏览器查看网页源代码时可以看见注释内容
<\% 代表静态 <%常量
%\> 代表静态 %> 常量
\' 在属性中使用的单引号
\" 在属性中使用的双引号

jsp指令

jsp指令用来设置与整个jsp页面相关的属性。

jsp指令语法格式:

<%@ directive attribute="value" %>

这里有三种指令标签:

指令 描述
<%@ page ... %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include ... %> 包含其他文件
<%@ taglib ... %> 引入标签库的定义,可以是自定义标签

jsp行为

jsp行为标签使用xml语法结构来控制servlet引擎。它能够动态插入一个文件,重用javabean组件,引导用户去另一个页面,为java插件产生相关的html等等。

行为标签只有一种语法格式,它严格遵守xml标准:

 

行为标签基本上是一些预先就定义好的函数,下表罗列出了一些可用的jsp行为标签::

语法 描述
jsp:include 用于在当前页面中包含静态或动态资源
jsp:usebean 寻找和初始化一个javabean组件
jsp:setproperty 设置 javabean组件的值
jsp:getproperty 将 javabean组件的值插入到 output中
jsp:forward 从一个jsp文件向另一个文件传递一个包含用户请求的request对象
jsp:plugin 用于在生成的html页面中包含applet和javabean对象
jsp:element 动态创建一个xml元素
jsp:attribute 定义动态创建的xml元素的属性
jsp:body 定义动态创建的xml元素的主体
jsp:text 用于封装模板数据

jsp 隐含对象

jsp 支持九个自动定义的变量,江湖人称隐含对象,它们是在 jsp 页面中自动可用的对象,无需额外的声明或初始化。

这九个隐含对象的简介见下表:

对象 描述
request httpservletrequest类的实例,代表 http 请求的对象,包含客户端发送到服务器的信息,如表单数据、url参数等。
response httpservletresponse类的实例,代表 http 响应的对象,用于向客户端发送数据和响应。
out jspwriter类的实例,用于向客户端输出文本内容的对象,通常用于生成html。
session httpsession类的实例,代表用户会话的对象,可用于存储和检索用户特定的数据,跨多个页面。
application servletcontext类的实例,代表 web 应用程序的上下文,可以用于存储和检索全局应用程序数据。
config servletconfig类的实例,包含有关当前 jsp 页面的配置信息,例如初始化参数。
pagecontext pagecontext类的实例,提供对jsp页面所有对象以及命名空间的访问
page 类似于 java 类中的 this 关键字,代表当前 jsp 页面的实例,可以用于调用页面的方法。
exception exception 类的对象,代表发生错误的 jsp 页面中对应的异常对象,用于处理 jsp 页面中的异常情况,可用于捕获和处理页面中发生的异常。

控制流语句

jsp提供对java语言的全面支持。您可以在jsp程序中使用java api甚至建立java代码块,包括判断语句和循环语句等等。

判断语句

if…else 块,请看下面这个例子:

<%@ page language="java" contenttype="text/html; charset=utf-8"
    pageencoding="utf-8"%>
<%! int day = 3; %>  硕编程(yapf.com) 

if...else 实例

<% if (day == 1 || day == 7) { %>

今天是周末

<% } else { %>

今天不是周末

<% } %>

运行后得到以下结果:

if...else 实例
今天不是周末

现在来看看switch…case块,与if…else块有很大的不同,它使用out.println(),并且整个都装在脚本程序的标签中,就像下面这样:

<%@ page language="java" contenttype="text/html; charset=utf-8"
    pageencoding="utf-8"%>
<%! int day = 3; %>  硕编程(yapf.com) 

switch...case 实例

<% switch(day) { case 0: out.println("星期天"); break; case 1: out.println("星期一"); break; case 2: out.println("星期二"); break; case 3: out.println("星期三"); break; case 4: out.println("星期四"); break; case 5: out.println("星期五"); break; default: out.println("星期六"); } %>

浏览器访问,运行后得出以下结果:

switch...case 实例

星期三

循环语句

在jsp程序中可以使用java的三个基本循环类型:for,while,和 do…while。

让我们来看看for循环的例子,以下输出的不同字体大小的"硕编程":

<%@ page language="java" contenttype="text/html; charset=utf-8"
    pageencoding="utf-8"%>
<%! int fontsize; %>  硕编程(yapf.com) 

for 循环实例

<%for ( fontsize = 1; fontsize <= 3; fontsize++){ %> 硕编程 <%}%>

运行后得到以下结果:

将上例改用 while 循环来写:

<%@ page language="java" contenttype="text/html; charset=utf-8"
    pageencoding="utf-8"%>
<%! int fontsize=0; %>  硕编程(yapf.com) 

while 循环实例

<%while ( fontsize <= 3){ %> 硕编程 <%fontsize++;%> <%}%>
浏览器访问,输出结果为(fontsize 初始化为0,所以多输出了一行):

jsp运算符

jsp支持所有java逻辑和算术运算符。

下表罗列出了jsp常见运算符,优先级从高到底:

类别 操作符 结合性
后缀 () [] . (点运算符) 左到右
一元 ++ - - ! ~ 右到左
可乘性 * / %  左到右
可加性 + -  左到右
移位 >> >>> <<   左到右 
关系 > >= < <=   左到右
相等/不等 == !=  左到右
位与 左到右
位异或 左到右
位或 左到右
逻辑与 &&  左到右
逻辑或 ||  左到右
条件判断 ?:  右到左
赋值 = += -= *= /= %= >>= <<= &= ^= |=  右到左
逗号  左到右 

jsp 字面量

jsp语言定义了以下几个字面量:

  • 布尔值(boolean):true 和 false;
  • 整型(int):与 java 中的一样;
  • 浮点型(float):与 java 中的一样;
  • 字符串(string):以单引号或双引号开始和结束;
  • null:null。
相关文章