JSP 基本语法
JSP 文件中除了可以直接包括 HTML 文本以外,还可以包含以下的内容:
- JSP 指令(指示)语句
- JSP 声明语句
- JSP 脚本程序(Scriptlet)片段
- JSP 表达式
- JSP 行为指令语句
- JSP 隐含对象
JSP 脚本程序片段
脚本程序可以包含任意量的Java语句、变量、方法或表达式,JSP的行为标签,表达式语句,JSTL 都可以看成是基于脚本程序的模板语言;
语法格式:
<% 代码片段; %>以上的语法等同于以下的 XML 语句:
<jsp:scriptlet> 代码片段;<jsp:scriptlet>简单示例:
<html><head><title>Hello World</title></head><body>Hello World!<br/><% out.println("Your IP address is " + request.getRemoteAddr());%></body></html>中文编码问题
如果要在页面中正确地显示中文,需要在 JSP 文件头部添加以下的指令语句:
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>等同于在 Servlet 中设置 response 对象的contentType、characterEncoding属性;
流程控制
JSP 中输出流程控制类似于 PHP 中的输出方式,如一个简单的循环输出如下:
...<p>loop output test</p><% for(int i=0;i<10;i++){ %> <p>Count:<%= i %></p><% } %>...等同于:
<p>loop output test</p><% for(int i=0;i<10;i++){ out.println("<p>Count:"+i+"</p>"); } %>JSP 声明语句
JSP 的声明语句用于声明与 JSP 对应的 Servlet 类的成员变量和方法,而在 JSP scriptlet 中声明的变量只是 JSP 对应 Servlet 类的 service() 方法中的局部变量;
语法格式:
<%! 声明语句[,声明语句,声明语句]; %>等同于以下 XML 标签
<jsp:declaration> 声明语句;<jsp:declaration>示例
<%! int i=0; %><%! int a,b,c %><%! List<Integer> list = new ArrayList<Inetger>(); %><%! public int sum(int a,int b){ return a+b;}%>JSP 表达式语句
一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方;
表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式;
语法格式:
<%= 表达式 %>等同于以下 JSP 脚本程序片段
<% out.print(表达式) %>等同于以下 XML 标签
<jsp:expression> 表达式</jsp:expression>示例:
<p> Today is <%= new SimpleDateFormat("yyyy-MM-dd").format(new Date()) %> </p>JSP 注释语句
JSP注释语句用于注释 .jsp 文件中的各种 JSP 语句
语法格式
<%-- 注释 --%>在注释中如果要输出一些特殊常量的转义量:
| <% | <\% |
| %> | %\> |
| ' | \' |
| " | \'' |
JSP 指令语句
JSP指令语句用于设置与整个 JSP 页面相关的属性,页面编码,Java类库导入,与 JSP 对应的 Servlet 实现的接口等,一般放置在 JSP 文件的最开头部分;
语法格式:
<%@ directive attribute="value">主要的 directive 指令标签包括以下3种:
<%@ page ... %> | 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等 |
<%@ include ... %> | 包含其他文件 |
<%@ taglib ... %> | 引入 JSTL 标签库的定义,也可以是自定义标签 |
Page 指令
page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。
<%@ page attribute="value">等同于以下XML 标签<jsp:directive.page attribute="value" />主要 attribute 属性参数如下:
| buffer | 指定out对象使用缓冲区的大小 |
| autoFlush | 控制out对象的 缓存区 |
| contentType | 指定当前JSP页面的MIME类型和字符编码 |
| errorPage | 指定当JSP页面发生异常时需要转向的错误处理页面 |
| isErrorPage | 指定当前页面是否可以作为另一个JSP页面的错误处理页面 |
| extends | 指定servlet从哪一个类继承 |
| import | 导入要使用的Java类 |
| info | 定义JSP页面的描述信息 |
| isThreadSafe | 指定对JSP页面的访问是否为线程安全 |
| language | 定义JSP页面所用的脚本语言,默认是Java |
| session | 指定JSP页面是否使用session |
| isELIgnored | 指定是否执行EL表达式 |
| isScriptingEnabled | 确定脚本元素能否被使用 |
示例
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" import="java.io.*;java.util.List.*" %>Include 指令
JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行;
语法格式:<%@ include file="文件的相对URL路径" %>等同于以下XML语句<jsp:directive.include file="文件的相对URL路径" %>具体关于JSP的转发和包含见:03. JSP 请求转发&包含
Taglib 指令
Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签;
语法格式:
<%@ taglib uri="uri" prefix="prefixOfTag" %>等同于以下XML标签<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />具体用法见:09. JSP 标准标签库 JSTL
JSP 行为标签
JSP行为标签使用 XML 语法结构来控制 servlet 引擎,它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等;
JSP 行为标签严格遵守 XML 格式,其语法如下:
<jsp:action_name attribute="value" />动作元素基本上都是预定义的函数,JSP规范定义了一系列的标准动作,它用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 容器为每个页面提供的 Java Servlet 元素对象,可以直接使用它们而不用显式声明,隐式对象也被称为预定义变量;
JSP所支持的9大隐式对象:
| request | HttpServletRequest类的实例 |
| response | HttpServletResponse类的实例 |
| out | JspWriter类的实例,用于把结果输出至网页上 |
| session | HttpSession类的实例 |
| application | ServletContext类的实例,与应用上下文有关 |
| config | ServletConfig类的实例 |
| pageContext | PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问 |
| page | 类似于Java类中的this关键字 |
| Exception | Exception类的对象,代表发生错误的JSP页面中对应的异常对象 |
application对象
- application对象直接包装了 javax.servlet.ServletContext 类的对象实例;
- 这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。
- 通过向application中添加属性,则所有组成 web 应用的 JSP 文件都能访问到这些属性;
pageContext 对象
- pageContext 对象是 javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面,该对象主要用来访问页面信息;
- PageContext 对象存储了 request , response 对象的引用;application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。
- pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL, 页面scope 等。
| PAGE_SCOPE | 页面范围:(这是默认值)指定引用在此 PageContext 中继续可用,直到从当前 Servlet.service() 调用中返回。 |
| REQUEST_SCOPE | 请求范围:指定引用在与 Servlet 关联的 ServletRequest 中继续可用,直到当前请求完成 |
| SESSION_SCOPE | 会话范围(仅在此页面参与会话时有效):指定引用在与 Servlet 关联的 HttpSession(如果有)中继续可用,直到 HttpSession 无效 |
| APPLICATION_SCOPE | 应用程序范围:指定引用在 ServletContext 中继续可用,直到它被回收。 |
pageContext 对象 中的大部分方法引用自 javax.servlet.jsp.PageContext,在 JSP 中作为隐含对象中添加的比较的重要的方法有
removeArribute() ,用于移除 pageContext 中储存的对象的4个上面定义的字段;
如: pageContext.removeArribute("session"),移除pageContext 中的 PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE 字段;
pageContext.removeArribute("session",PAGE_SCOPE) ,只移除其中的 PAGE_SCOPE 字段;

3758

被折叠的 条评论
为什么被折叠?



