jsp
简介:
java server oage,是一种动态网页编程技术
准备工作:
1、修改JSP页面的编码
选择"Window",选择"Preferfences",搜索"JSP",选择"JSP Files",设置编码为UTF-8
2、修改模板
搜索"JSP",选择"JSP Files"找到Templates下的New JSP File(html),双击New JSP,将模板中的html4修改为html5
JSP的注释
两类三种
第一类:隐式注释
在浏览器中看不见的注释
1、jsp自己的注释<%-- --%>
2、继承java风格的注释
//单行注释
/*多行注释*/
第二类:显示注册
在浏览器审查元素或查看源代码可以看到的注释
继承HTML风格的注释<!-- -->
Scriptlet脚本小程序
嵌套在HTML代码中的java程序
JSP一共有三种脚本小程序
第一种:Java脚本段,可以定义局部变量、写java语句等
生成
格式:<% %>
第二种:声明全局变量,方法、类等
格式:<%! %>
第三种:输出,可以输出变量或字面值
格式:<%= %>
Page指令:
格式:<%@ page 属性名="属性值" 属性名="属性值"%>
常用的属性:(多个属性之间用空格隔开)
language:语言,目前只有java
contebtType:响应类型及编码格式
pageEncoding:页面编码格式
页面的编码以contentType中的charset的值为准,若charset未设置,则以pageEncoding的属性值为准
pageEncoding的属性也未设置,则使用默认编码ISO-8859-1;
import:导包,该属性可以在page指令中出现多次
errorPage:当页面报错时,跳转的页面
isErrorPage:是处理报错页面,默认是false(errorPage一起使用)
include静态包含
格式:<%@include file="文件路径"%>
特点:
相当于将内容直接复制
只会生成一个源码文件,不能有同名变量
运行效率快一些,耦合度高,不够灵活
include动态包含
格式:
1、<jsp:include page="要包含的页面"></jsp:include>
2、有参数的:<jsp:include page="要包含的页面"><jsp:param value="参数值" name="参数名"/></jsp:include>
value:参数值,可以接收表达式
name:参数名,字符串,不接受任何表达式
取值方式:request。getParameter("参数名")
特点:
相当于方法的调用
会生成多个源码文件,可以有相同的变量名
灵活,耦合度低
注:
当使用动态包含没设置参数时,<jsp:include>双标签不要有任何内容,包括空格和换行
动态包含和静态包含的区别:
1、静态包含相当于将内容进行直接复制,动态包含相当于方法的调用
2、静态包含只会生成一个源码文件,而动态包含会生成多个源码文件
3、静态包含不能有同名变量,而动态包含可以有同名变量
4、静态包含不能传递参数,而动态包含可以
5、静态包含耦合度高,动态包含耦合度低
四大域对象
pageContext 当前JSP页面有效,跳转页面后无效
request 一次请求,请求转发(服务端跳转)有效,重定向(客户端)无效
session 一次会话,无论是服务端还是客户端跳转都有效;session对象销毁后无效
applicatin 整个应用,只有服务器不关闭都有效
四大域对象的三种方法
public void setAttribute(String name,Objet o) 设置属性的名称和内容
public Object getAttribute(String name) 根据属性名称获得属性
public void removeAttribute(String name) 删除指定的属性
两个输出
response 响应对象
out 输出对象
一个配置对象
config 获取配置信息
一个异常对象
exception 只有设置过isErrorpage="true"的页面才能使用
一个页面对象
page 指代jsp页面本身
EL表达式
EL表达式一般操作的都是域对象的数据,操作不了局部变量(通过限域变量名获取对象中的值)
格式:
${限域变量名}
取值范围
page的作用域:${pageScope.限域变量名}
request的作用域:${requestScope.限域变量名}
session的作用域:${sessionScope.限域变量名}
applicatin的作用域:${applicatinScope.限域变量名}
默认取值方式:
EL表达式在取值时,会自动从小到大范围查找,找到即止
从page->request->session->application,如果四个域范围都未找到,则返回空字符串
EL表达式取值:
1、 判断域对象是否为空
${empty 限域变量名}
该域对象可以是字符串、JavaBean对象、List集合、Map等
${!empty 限域变量名}
判断域对象不为空
a、字符串,如果字符串为null或空,返回true
b、JavaBean,如果JavaBean为null,返回true
c、List集合,如果List集合为null或长度为0,返回true
d、Map,如果Map为null或没有内容,返回true
2、获取JavaBean对象
a、获取对象
${ 限域变量名}
b、获取类中的属性
${限域变量名.属性名}或${限域变量名.get属性名()}
c、获取对象中的对象属性
${限域变量名.属性名}或${限域变量名.属性名.属性}
注:javaBean中属性需要提供getter方法
3、获取List集合
a、获取集合对象
${限域变量名}
b、获取集合中的元素
${限域变量名[下标]}
c、获取集合的长度
${限域变量名.size()}
4、获取Map对象
a、通过map的key获取值
${限域变量名.key}或${限域变量名["key"]}
EL表达式运算
运算:
${限域变量名1+限域变量名2}
比较:
等值:
${限域变量名1==限域变量名1}
${限域变量名1 eq 限域变量名2}
大小:
${限域变量名1>限域变量名2}
${限域变量名1<限域变量名3}
JSTL
JSTL的使用
1、将jstl所需的两个jar包拷贝到项目的WEB—INF的lib目录下
2、在需要使用标签库的页面引入对应库
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
prefix表示该库的前缀,可以是任意字符,但一般使用"C"
if标签
无主体内容
<c:if test="条件" var="限域变量名" scope="域范围"></c:if>
有主体内容
<c:if test="条件" var="限域变量名" scope="域范围">内容</c:if>
常用属性:
test:if判断的条件,一般结合el表达式操作域对象
var:条件判断后的返回结果(true|false),存在一个域对象中
scope:域对象的范围,默认为page,可以取值page|request|session|application
注:if标签没有else标签,所以需要else的效果需要写一个相反条件
choose、when、otherwise标签
choose和when标签的作用与java中的switch和case关建字相似
注意点:
1、choose、otherwise标签没有属性,when标签必须要有test属性
2、choose标签只能嵌套when和otherwise标签,when和otherwise标签中可以嵌套其他标签
3、choose标签至少要有一个when标签,可以没有otherwise标签
4、otherwise标签必须放在最后一个when标签之后
5、otherwise标签会在所以when标签不执行时,执行
格式:
forEach标签
迭代内容多次
<c:forEach begin="开始数" end="结束书" var="限域变量" step="间隔数"></c:forEach>
循环
<c:forEach items="遍历的对象" var="限域变量" varStatus="成员信息"></c:forEach>
格式化标签
formatNumber
将数值型的数据转换成指定格式的数值字符串
有主体内容
<fmt:formatNumber type="类型" var="限域变量名">
要格式化的数据(接收表达式)
</fmt:formatNumber>
无主体内容
<fmt:formatNumber type="类型" value="要格式化的数据(接收表达式)"></fmt:formatNumber>
常用属性;
type:格式化后的格式
percent 百分比类型
number 数值型
currency 货币型
var:限域变量名
用来接收格式化的结果,如果设置了var属性,格式化的结果不会输出,需要通过el表达式获取var属性的值
formatDate
将日期型的数据转换成指定的字符串
常用属性:
var:限域变量名
用来接收格式化的结果,如果设置了var属性,格式化的结果不会输出,需要通过el表达式获取var属性的值
type:日期类型
date 日期型 默认
time 时间型
both 日期+时间型
dateStyle 日期型格式
timeStyle 时间型格式
pattern 自定义格式
y 年
M 月
d 日
H 时(0-24)
h 时(0-12)
m 分
s 秒
parseNumber
将指定格式的数值字符串转换成数值型数据
parseDate
将指定格式的字符串转换成日期型的数据