JSP
四大域对象:
pageContext (page域): 只在本页面 ,每个页面都有自己的pageContext
Request (request域): 显示出来看一下就不需要的时候
Session(session域): 页面使用后,其他页面还是要使用. 会话范围
ServletContext (application域): 大家都用的东西,全局范围
一.语法:
a) Jsp模板元素 :jsp中的HTML内容(建议在写jsp之前,先写好html模板)
b) Jsp脚本表达式:
i. 作用: 输入java数据到html中
ii. 语法:<%= java表达式%> (注意:java表达式后面不能有分号,因为这里面放的是java的属性值)
c) Jsp脚本片段:
i. 作用:编写普通java语句,(在对应的servlet的_jspService方法中,如果定义变量,那么是局部变量)
ii. 语法:<% 语句1; 语句2; %> 在脚本片段和脚本片段之间,可以插入jsp代码
d) Jsp声明
i. 语法:<%! 语句1; 语句2; %>
ii. 声明中的代码会原封不动的被翻译到对应的servlet的成员及位置
二.指令:
指令是为jsp引擎设计的,不直接产生任何可见输出,只是告诉引擎如何处理jsp页面的其余部分.
语法: <%@ 指令名称 属性名 = " 值 "%>
例如: <%@page contentType="text/html;charset=UTF-8"%> 目的是告诉引擎(tomcat) 这个是一个html页面,采用UTF-8编码
page指令:
language ="java" //指定这个jsp可以嵌入java代码
*Import ="包名"//在jsp中导入哪些包,jsp会默认导入
java.lang.*;javax.servlet.*;javax.servlet.jsp.*;javax.servlet.http.*;
*Session="true"//指定jsp在翻译的时候是否会创建session对象,默认是true,如果设置为false,那么就不能再jsp编写时默认使用session对象. 为什么可以关闭呢?因为session的生命周期较长,所有为了不让服务器内存压力过大,所有不需要session的时候可以设为false
errorPage ="" //指定当jsp页面出现错误的时候,把页面跳转到哪个地址上,errorPage的属性必须是相对路径. 使用这个指令只能解决一个jsp页面的错误问题,如果要解决上百个jsp页面的错误问题,可以在web.xml文件中创建一个<error-page>标签.
<error-page>
<error-code>错误码(404等)</error-code>
<location>目标页面</location>
</error-page>
isErrorPage="false" //是否是错误处理页面,什么是错误处理页面呢? 就是当jsp页面出错的时候通过errorPage指令跳转到的目标页面. isErrorPage指令默认值是false,当设为true的时候,服务器在把jsp页面翻译成一个servlet的时候,会创建一个Exception对象,然后把错误信息封装到这个对象中.
contentType="text/html;charset=UTF-8": 指示jsp对应的servlet输出数据时的MIME类型和使用的编码,也就是告诉浏览器以什么码表来读取数据.
pageEncoding="UTF-8": 告诉服务器用什么码表来翻译jsp
include指令:
<%@ include file="被包含的页面"%>
静态包含: 使用include指令的包含技术称为静态包含,静态包含是编译时包含,多个jsp文件会被翻译到一个servlet文件中,所以被包含的jsp页面应该删掉除了指令和正文之外的所有内容.
动态包含.:动态包含属于运行时包含,指的是每个jsp文件都会被翻译成各自的servlet文件,实际开发的时候不建议使用动态包含.
tagiib指令:
三:九大隐式对象:
1.什么是隐式对象:
a) 引擎在第一次把jsp文件翻译成servlet文件时,会在servlet中创建一些常用的对象,然后给这些对象一些命名,使用这些命名可以在jsp页面中调用相应的对象,就是隐式对象.
Request--------------HttpServletRequest
Responce--------------HttpServletResponse
Session--------------HttpSession(前提是page指令session="true")
Application--------------ServletContext
Config--------------ServletConfig
Page--------------this
Exception--------------Exception(前提是page指令isErrorPage="true")
Out--------------JspWriter
pageContext--------------PageContext
out隐式对象;
Out隐式对象的实际类型是JspWriter,用这个输出数据显示输入到JspWriter的缓存中,当缓存满了,或者是设置page指令中的buffer="0"时,才会把缓冲中的数据写到Response中,然后服务器再从response中提取数据.
pageContext 隐式对象:
pageContext对象是JSP中最重要的对象,它不仅包含了其他的8大对象,而且其本身也是一个域对象,可以用来保存数据. 这个对象还封装了web开发中一些常用操作.
pageContext作用一: 获取到其他8大对象
pageContext作用二: 作为域对象:
1. pageContext对象的方法: getAttribute("name")//获取值
setAttribute("name","value") //设置值
removeAttribute("name");//删除值
2. pageContext访问其他域:getAttribute("name",代表各个域的常量);//得到指定域的值
setAttribute("name","value",代表各个域的常量); //设置其他域的值
removeAttribute("name",代表各个域的常量); //删除其他域的值
3.查找各个域中的属性:findAttribute("name")
四:JSP常用标签:
标签在jsp中又被称为动作元素,在jsp页面中提供业务逻辑功能,避免在jsp中出现java代码.
<jsp:include>标签:
属于动态包含
<jsp: forwaod>标签:
转发, page: 目标页面
<jsp:param> 标签:
请求参数,常用于转发时给目标页面传递参数 name: 参数名 value: 参数值
JavaBean和JSP
javaBean通常用来封装数据 , 在jsp中也可以用javaBean来封装数据和获取数据.
Jsp中与javabean相关的标签:
<jsp:userBean>标签: 这个标签用来在指定的域范围内查找指定的javaBean对象,如果在指定的域内存在这个javabean对象,那么直接获取到这个对象;如果指定的域范围内没有这个javabean对象,就实例化一个,然后获取到它.
常用语法:<jsp:useBean id="beanName" class="package.class" scope="域对象" >Body</jsp:useBean>
Id: 用于指定javabean实例对象,或者是实例化的javabean的名称
Class:指定javabean完整类名
Scope:指定javabean实例对象作用的域范围,取值有page,request,session,application,默认是page.
注意:Body部分的内容只有在标签创建javabean的时候才执行
<jsp:getproperty> 标签:读取指定javabean对象中的指定属性
常用语法: <jsp:getProperty name="beanInstanceName" property="propertyName">
Name:javabean的实例对象
Property:要查找的属性名
如果没有找到这个属性,返回null;
<jsp:setProperty>标签: 设置javabean中的属性
<常用语法>; <jsp:setProperty name="beanName" {
Property="propertyName" value=""
Property="PropertyName" param=""
Property="*"
}>
name属性用于指定JavaBean对象的名称。
property属性用于指定JavaBean实例对象的属性名。
value属性用于指定JavaBean对象的某个属性的值,value的值可以是字符串,也可以是表达式。为字符串时,该值会自动转化为JavaBean属性相应的类型,如果value的值是一个表达式,那么该表达式的计算结果必须与所要设置的JavaBean属性的类型一致。
param属性用于将JavaBean实例对象的某个属性值设置为一个请求参数值,该属性值同样会自动转换成要设置的JavaBean属性的类型。
EL表达式:
EL表达式的作用: 它的作用就是替换掉jsp页面中的java表达式,也就是<%=%>中的java代码.
EL表达式语法: ${ }
在EL中可以检索所有的域对象中的属性,因为使用EL表达式来检索属性时,会使用pageContext. findAttribute(),如果找到了就获取,如果没有找到,就返回"".
El表达式中的运算符:
${empty} //判断是指定元素是否为空
${empty user? "null" : ""} //三元运算符
EL表达式的11大隐式对象 :
pageContext : 代表当前页面的上下文对象,与jsp中的是一样的
*pageScope : 代表page范围的域对象(Map<String,Object>),即当前页面对应的Map
*sessionScope: 代表session域中的Map对象
*requestScope: 代表request域中的Map对象
*applicationScope : 代表ServletContext域中的Map对象
param: 代表请求参数的Map对象,key代表参数名,value代表参数
param values : 代表请求参数对象,key代表参数名,value代表参数数组--重名请求参数
header :代表请求头的对象(Map),key是请求头字段名,value是头值(单一值)
headerValues: 代表请求头的对象(Map),key是请求头字段名,value是头值(数组值)
cookie:是一个Map,key是cookie名,value是cookie对象,可以通过对象得到里面的各种值
initParam:代表全局配置参数(Map),key是参数名,value是参数值
只有pageContext代表对象,其他的都是Map
El表达式调用java类中的静态方法:
步骤: 1.定义一个拥有静态方法的类
2.必须在一个扩展名为tld中xml文件中进行描述
3.在jsp中使用,必须先通过taglib指令引入,使用EL形式调用
JSTL(作用:消除jsp中的java脚本):
1.Core
a) if
i. 作用: 用于判断
ii. 属性:
test:必须有, 取值可以是EL表达式,也可以是java表达式,要求表达式必须返回boolean类型
Scope: 域对象范围
Var : 保存结果的变量,这个变量就是域对象中的name
b) forEach
iii. 作用: jdk1.5的增强for循环
iv. 属性:
1. Items: 要遍历的对象
2. Begin: 开始的索引
3. End: 结束的索引
4. Strp: 步长.默认值是1
5. varStatus:指向一个对象
a) 该对象有以下方法:
i. getIndex;获取当前记录觉得索引
ii. getCount:获取当前记录的计数
iii. isFirst:: 是否是第一条
iv. isLast:是否是最后一条