JSP
JSP脚本元素
jsp脚本元素就是嵌套在<%和%>中的一条或多条java程序代码
-
JSP 脚本
代码段,
<% java 代码(变量,语句等)%>
声明的Java代码将会编译到jspService方法中,声明的变量为_jspService方法的局部变量,调用JSP 脚本时,会为局部变量分配内存空间,调用结束后,释放局部变量占用的内存空间。
-
JSP 声明语句
声明变量和方法作为类的属性或方法,
<%! 定义的变量或方法等%>
在上述语法格式中,声明的Java代码将会编译到Servlet的_jspService()方法之外,即在JSP声明语句中定义的都是成员方法,成员变量,静态方法,静态变量,静态代码块等,在JSP声明语句中声明的方法在整个JSP页面有效。在一个JSP页面中可以有多个JSP声明语句,单个声明的java语句可以是不完整的,但是多个声明组合后的结果必须是完整的Java语句
-
JSP表达式
用于将程序数据输出到客户端
<%= expression %>
JSP表达式中的表达式结果直接输出到客户端,插入的为表达式,不是语句,JSP表达式中的变量或表达式之后不能为
;
JSP注释
-
Html注释
``
可见范围 jsp源码、翻译后的servlet页面、显示html源码
-
java注释
//单行注释
/*多行注释*/
可见范围 jsp源码,翻译后的servlet
-
jsp注释:
<%--注释内容--%>
可见范围 jsp源码可见
JSP指令
page指令
页面特性进行描述,对整个页面都有效
<%@ page 属性名1=“属性值1” 属性名2=“属性值2” ...%>
include指令
静态包含一个文件
<%@ include file="被包含的文件地址" %>
- 被引入的文件必须遵守JSP语法,其中的内容可以包含静态HTML,JSP脚本元素,JSP指令等普通JSP页面所具有的一切内容。
- 除了指令元素之外,被引入的文件的其他元素都被转换成相应的java源代码,然后插入进当前JSP页面翻译成的Servlet源文件中,插入的位置与include指令在当前JSP页面中的位置保持一致。
taglib指令
用于页面中引入标签库的。
JSP9个内置对象
out
,request
,response
,config
,session
,application
,page
,pageContext
,exception
-
out对象(javax.servlet.jsp.JspWriter)
向客户端发送文本形式的实体内容,与ServletResponse.getWriter方法返回的对象PrintWriter不同的是它相当于一种带缓存功能的PrintWriter,调用ServletResponse.getWriter()方法缓冲区的对象才能真正写入Servlet引擎所提供的缓冲区中。
输入:
out.println("first line"); response.getWriter().println("second line<br>");
输出:
second line first line
-
pageContext
获取其他8个内置对象
-
存储数据功能(可设置存储范围)
void setAttribute(String name,Object value,int scope);
设置pageContext对象属性Object getAttribute(String name,int scope);
获取pageContext对象的属性void removeAttribute(String name,int scope);
删除指定范围内名称为name的属性void removeAttribute(String name);
删除所有范围内名称为name的属性Object findAttribute(String name);
从4个域对象中查找名称为name的属性,会按照page,request,session,application的顺序依次进行查找,找到返回属性值,否则返回为null -
域范围
PageScope(PageContext):当前页面有效
RequestScope(HttpServletRequest):一次请求范围
SessionScope(HttpSession):一次会话范围
ApplicationScope(ServletContext):应用范围
JSP动作元素
- < jsp:include >动作元素
<jsp:include page="relativeUrl" flush="true|false" />
page属性用于指定被引入资源的相对路径,flush属性用于指定是否将当前页面的输出内容刷新到客户端,默认flush为false,服务器会等待读到底端,才输出到客户端。而当把 flush 属性赋为真值时,在缓存累积了一定数据时,服务器会先提供一部分数据给浏览器,并等待后续内容。
- include指令与< jsp:include >动作元素区别
- < jsp:include >标签中要引的资源和当前JSP页面是两个彼此独立的执行实体,即被动态引用的资源必须能被Web容器独立执行。而include指令只能引入遵循JSP格式的文件,被引入文件与当前JSP文件需要共同合并才能翻译成一个Servlet源文件
- < jsp:include >标签中是在运行时才包含的,且只包含运行结果。而include指令引入的资源是在编译时期包含的,包含的为源代码
- < jsp:include >标签运行原理与RequestDispatcher.include()方法类似,即被包含的页面不能改变响应状态码或者设置响应头,而include指令没有这方面显示
EL表达式
简化jsp写法${表达式}
-
获取指定作用域的数据
${pageScope.name}
${requestScope.name}
${sessionScope.name}
${applicationScope.name}
${name}
依次从page,request,session,application获取获取数据,如果都没有返回null -
获取请求参数
${param.username}
${param.hobby}
获得第一个参数${paramValues.hobby}
获取一组数据,使用数组${paramValues.hobby[1]}
如果是数组可以使用下标获得 -
请求头
${header.accept}
${header[accept-Encoding]}
${headerValues[accept-Encoding][0]}
-
pageContext
${pageContext.request.contextPath}
-
全局初始化参数
${initParam.name}
-
Cookie
${cookie}
使用map存储所有Cookie,Map<名称,对象>${cookie.company}
根据key获取响应value${cookie.company.name}
通过javaBean属性获取属性${cookie.company.value}
EL自定义数据获取必须存储在作用域中
EL支持算术运算符,逻辑运算符,关系运算符,三元运算符,empty运算符