JSP(Java Server Pages)类似于ASP技术,它是在传统的网页HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(.jsp)。JSP本质上是一个简化的Servlet设计,JSP的实现过程: .jsp 文件会被JSP引擎(由服务器提供,如Tomcat的Jasper)译为 .java 文件,最终生成 .class 文件。
JSP语法
除了HTML语法,扩展的其他内容如下
嵌套Java代码的格式
-
声明标签:
<%!变量声明或方法声明%> -
表达式标签:
<%=表达式%>表达式的值将输出到JSP页面的相应位置 -
代码标签:
<%Java代码%>页面上动态显示的内容
JSP指令
用于声明 JSP 页面的属性,如编码方式、文档类型等等。一共有三种指令:page、include、taglib。
指令使用格式
<%@ directive attribute1="value1" attribute2="value2" ... %>
-
directive: 指 page、include、taglib其中之一 -
attribute:属性名 -
value:属性值 -
...:这个不是语法哦,指其他未写出的attribute="value"
page指令
| 属性名 | 属性值 | 描述 |
|---|---|---|
| language | java | 解释JSP文件时采用的语言。默认为java |
| extends | 类的全名 | 由该JSP文件生成的类继承哪个类,JSP为Servlet,因此当指明继承普通类时需要实现Servlet的init、destroy等方法 |
| import | 包名/类名 | import是唯一可以声明多次的page指令属性。一次可以导入多个类,中间用英文逗号隔开 |
| session | true/false | 是否内置session对象。默认为true |
| autoFlush | true/false | true代表使用out.println()等方法输出的字符串暂时存到缓存里,当缓存满了或者程序行完毕或者执行out.flush()操作时才输出到客户端。默认为true |
| buffer | none/nKB | 指定缓存大小,例如 4KB |
| isThreadSafe | true/false | 是否线程安全。值为true时允许多线程执行该JSP,否则必须排队执行。默认为false |
| isErrorPage | true/false | 该 JSP页面是否为错误显示页面。为true时该JSP拥有内置exception对象,否则没有。默认为false |
| errorPage | 某个JSP页面的相对路径 | 指明一个错误页面,如果该JSP程序抛出一个未捕捉的异常,则将该异常传递给errorPage指定JSP页面并跳转至errorPage指定JSP页面 |
| contentType | 文档类型 | 客户端浏览器根据该属性判断文档类型。例如,HTML:text/html、纯文本:text/plain、JPG图像:image/jpeg、GIF图像:image/gif、WORD文档:application/msword |
| pageEncoding | 字符集 | 指定该JSP页面的字符集,如UTF-8、ISO-8859-1等 |
include指令
将其他 JSP文件、HTML文件、文本包含到该 JSP中一并编译。这是一种静态包含,相当于直接复制粘贴进来,所以在编译该JSP文件的时候将会一并编译被包含的文件
- 属性名:file
- 属性值:URL相对路径
-
例:
<%@includefile="文件相对 url 地址"%>
taglib指令
JSP支持标签技术,后面会讲到标签的用法,JSTL标签库的使用等。
作用:用来指明JSP页面内使用的JSP标签库,taglib指令有两个属性,uri为类库的地址,prefix为标签的前缀
-
例:
<%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>
JSP的9个内置对象
使用内置对象进行便捷的开发,大部分都是HttpServlet中使用的对象(除了pageContext和out),关于HttpServlet请看上一篇博文
| 对象 | 类型 | 简述 |
|---|---|---|
| request | HttpServletRequest | 该对象是客户端的HTTP请求,作用域为一次请求,包含头信息、系统信息、请求方式等 |
| response | HttpServletResponse | HTTP响应对象,作用域为该 JSP页面 |
| session | HttpSession | 作用域为一次会话 |
| application | ServletContext | 作用域为Servlet容器,直到服务器关闭前都有效 |
| config | ServletConfig | 服务器的配置信息。config在上一篇博文的Servlet级始化参数中使用过。 |
| page | HttpServlet | 指该 JSP编译为Java代码中的Servlet类的对象(Servlet是单实例的,所以这个指向是明确的),相当于this |
| exception | Exception | 只有当前页面是错误页面(<%@ page isErrorPage="true" %>)才能使用,若不是错误页面使用exception会导致编译报错。 |
| out | JspWriter | 用于向页面输出(包括js代码),上面提到的page指令的autoFlush属性就是控制这个对象 |
| pageContext | PageContext | 表示页面的上下文,可以获取request、response、session、application、config等 |
EL表达式
EL(Expression Language)表达式可以更方便的展示变量和对象,避免在HTML中嵌入Java代码(显的很混乱)
基本使用格式
${EL表达式} 变量名不用加引号
获取4个域(pageContext、request、session、application)中值
EL表达式只能获取域中的值,不能获取Java代码中的值!需要使用的变量一定要先存在域中。
例如:
<%session.setAttribute("score",99)%>,此时可以读取score这个值${score}另外一点,如果找不到值会返回空字符串"",而不是null
完全限定获取方式
- 获取pageContext域的变量:
${pageScope.key} - 获取request域的变量:
${requestScope.key} - 获取session域的变量:
${sessionScope.key} - 获取application域的变量:
${applicationScope.key}
隐式获取
${key} : 将会以pageContext