JSP和JSTL

JSP 和 JSTL

1. 主要内容

JSP和JSTL_第1张图片

2. JSP

新建JSP⻚⾯

JSP和JSTL_第2张图片
注释
在 JSP 中⽀持两种注释的语法操作:
⼀种是显示注释,这种注释是允许客户端看⻅的; 另⼀种是隐式注释,此种注释是客户端⽆法看⻅的
① 显示注释语法:从 HTML ⻛格继承⽽来
② 隐式注释语法:从 JAVA ⻛格继承;JSP ⾃⼰的注释
JSP 的三种注释⽅式:

1) // 注释,单⾏注释 /* 多⾏注释*/
2)
3)<%-- JSP注释 --%>

** Scriptlet
在 JSP 中最重要的部分就是 Scriptlet(脚本⼩程序),所有嵌⼊在 HTML 代码中的 Java 程序。 在 JSP 中⼀共有三种 Scriptlet 代码:都必须使⽤ Scriptlet 标记出来**

第⼀种:<% %>: java 脚本段,可以定义局部变量、编写语句
第⼆种:<%! %>:声明,可以定义全局(成员)变量、⽅法、类
第三种:<%= %>:表达式,数据⼀个变量或具体内容

JSP的指令标签
使⽤包含操作,可以将⼀些重复的代码包含进来继续使⽤,从正常的⻚⾯组成来看,有时可能分为⼏
个区域。⽽其中的⼀些区域可能是⼀直不需要改变的,改变的就其中的⼀个具体内容区域。现在有两种
⽅法可以实现上述功能。
⽅法⼀:在每个 JSP ⻚⾯(HTML)都包含⼯具栏、头部信息、尾部信息、具体内容
⽅法⼆:将⼯具栏、头部信息、尾部信息都分成各个独⽴的⽂件,使⽤的时候直接导⼊
很明显,第⼆种⽅法⽐第⼀种更好,第⼀种会存在很多重复的代码,并且修改很不⽅便,在 JSP 中如
果要想实现包含的操作,有两种做法:静态包含、动态包含,静态包含使⽤ include 指令即可,动态包
含则需要使⽤ include 动作标签。
. include 静态包含

<%@ include file=“要包含的⽂件路径” %>

静态包含就是将内容进⾏了直接的替换,就好⽐程序中定义的变量⼀样,是在 servlet 引擎转译时,
就把此⽂件内容包含了进去(两个⽂件的源代码整合到⼀起, 全部放到_jspService ⽅法中),所以只
⽣成了⼀个 servlet,所以两个⻚⾯不能有同名的变量。 运⾏效率⾼⼀点点。耦合性较⾼,不够灵活。
include 动态包含
动态包含在代码的编译阶段,包含和被包含部分是两个独⽴的部分,只有当运⾏时,才会动态包含进来,好⽐⽅法的调⽤。

注意:动态包含,中间不要加任何内容,包括空格,除⾮确认要使⽤参数,否则报错!

<jsp:include page="include.html"></jsp:include>
<%
String a = "hello.jsp";
%>
<jsp:include page="<%=a %>"></jsp:include>

使⽤动态包含还可以通过在⻚⾯之间传参。
接收参数通过 request.getParameter(name);


hello.jsp

<%=request.getParameter(“uname”)%>

JSP的四⼤域对象

四种属性范围
在JSP中提供了四种属性的保存范围,所谓的属性保存范围,指的就是⼀个设置的对象,可以再多少
个⻚⾯中保存并可以继续使⽤

  1. page范围
    pageContext : 只在⼀个⻚⾯中保存属性,跳转之后⽆效
  2. request范围
    request : 只在⼀次请求中保存,服务器跳转后依然有效
  3. session范围
    session : 在⼀次会话范围中,⽆论何种跳转都可以使⽤
  4. application范围
    application : 在整个服务器上保存
    JSP和JSTL_第3张图片
    验证属性范围的特点
  5. page
    本⻚⾯取得,服务器端跳转()后⽆效
  6. request
    服务器跳转有效,客户端跳转⽆效
    如果是客户端跳转,则相当于发出了两次请求,那么第⼀次的请求将不存在了;如果希望不管是客
    户端还是服务器跳转,都能保存的话,就需要继续扩⼤范围。
  7. session
    ⽆论客户端还是服务器端都可以取得,但是现在重新开启⼀个新的浏览器,则⽆法取得之前设置的
    session了,因为每⼀个session只保存在当前的浏览器当中,并在相关的⻚⾯取得。
    对于服务器⽽⾔,每⼀个连接到它的客户端都是⼀个session
    如果想要让属性设置⼀次之后,不管是否是新的浏览器打开都能取得则可以使⽤application
  8. application
    所有的application属性直接保存在服务器上,所有的⽤户(每⼀个session)都可以直接访问取得
    只要是通过application设置的属性,则所有的session都可以取得,表示公共的内容,但是如果此
    时服务器重启了,则⽆法取得了,因为关闭服务器后,所有的属性都消失了,所以需要重新设置。

问:使⽤哪个范围呢?
答:在合理范围尽可能⼩

EL表达式的使⽤

EL表达式的语法
EL(Expression Language) 是为了使 JSP 写起来更加简单。表达式语⾔的灵感来⾃于 ECMAScript
和 XPath 表达式语⾔,它提供了在 JSP 中简化表达式的⽅法,让 Jsp 的代码更加简化。

语法结构⾮常简单: ${expression}

EL 表达式⼀般操作的都是域对象中的数据,操作不了局部变量。
域对象的概念在 JSP 中⼀共有四个:pageContext, request, session, application;范围依次是,
本⻚⾯,⼀次请求, ⼀次会话,整个应⽤程序。
当需要指定从某个特定的域对象中查找数据时可以使⽤四个域对象对应的空间对象,分别是:
pageScope, requestScope, sessionScope, applicationScope。 ⽽ EL 默认的查找⽅式为从⼩到⼤查找,找到即可。当域对象全找完了还未找到则返回空字符串""。

EL表达式的使⽤

获取数据
设置域对象中的数据

<%
pageContext.setAttribute("uname","zhangsan"); // page作⽤域
request.setAttribute("uname","lisi"); // request作⽤域
session.setAttribute("uname","wangwu"); // session作⽤域
application.setAttribute("uname","zaholiu"); // application
%>

获取域对象的值

<%-- 获取域对象中的数据:默认查找⽅式为从⼩到⼤,找到即⽌。若四个范围都未找到,则返回空字符
串。--%>
${
     uname} <!-- 输出结果为:zhangsan -->

获取指定域对象的值

${
     pageScope.uname} <!-- page作⽤域 -->
${
     requestScope.uname} <!-- request作⽤域 -->
${
     sessionScope.uname} <!-- session作⽤域 -->
${
     applicationScope.uname} <!-- application作⽤域 -->

获取List

<%
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list", list);
%>
<%--
获取List中指定下标的数据
${
     list[下标] }
获取集合的⻓度
${
     list.size()}
注:
list代表的是存在域对象中的变量名(限域变量名)
--%>
${
     list[1]}

获取Map

<%
Map map = new HashMap();
map.put("aaa", "111");
map.put("bbb", 2222);
map.put("ccc-a", 333);
request.setAttribute("map", map);
%>
<%--
获取Map中指定值
${
     map["key"] } 或 ${
     map.key }
注:
map代表的是存在域对象中的变量名(限域变量名)
--%>
${
     map.aaa }
${
     map["bbb"]}

获取JavaBean对象
User.java

public class User {
     
private Integer userId;
private String uname;
private String upwd;
public Integer getUserId() {
     
return userId;
 }
public void setUserId(Integer userId) {
     
this.userId = userId;
 }
public String getUname() {
     
return uname;
 }
public void setUname(String uname) {
     
this.uname = uname;
 }
public String getUpwd() {
     
return upwd;
 }
public void setUpwd(String upwd) {
     
this.upwd = upwd;
 }
}
<%
User user = new User();
user.setUserId(1);
user.setUname("zhangsan");
user.setUpwd("123456");
request.setAttribute("user",user);
%>
<%-- JavBean中的属性字段需要提供get⽅法 --%>
${
     user} <%-- 获取对象 --%>
${
     user.uname} <%--获取对象中的属性--%>

empty

<%--
empty
判断域对象是否为空。为空,返回true;不为空返回false; ${
     empty 限域变量名 }
判断对象是否不为空。
${
     !empty 限域变量名 }
--%>
${
     empty uname}
${
     empty list}
${
     empty map}
${
     empty user}

EL运算

<%
request.setAttribute("a", 10);
request.setAttribute("b", 2);
request.setAttribute("c", "aa");
request.setAttribute("d", "bb");
%>

等值判断

<%--
⽐较两个值是否相等,返回truefalse
== 或 eq
--%>
${
     a == b }
${
     c == d }
${
     c eq d }
${
     a == 5 }
${
     c == 'aa' }

算术运算

<%--
加法: +
减法: -
乘法: *
除法: / 或 div
--%>
${
     a + b }
${
     a / b } 或 ${
     a div b }

⼤⼩⽐较

<%--
⼤于:>
⼩于:<
⼤于等于:>=
⼩于等于:<=
--%>
${
     a > b}
${
     a + 1 > 10 }
${
     a + b >= 10 }
${
     a > b && b > 5 }
${
     a + b > 10 || a - b > 5 }

JSTL

Java Server Pages Standard Tag Libray(JSTL):JSP 标准标签库,是⼀个定制标签类库的集合,⽤于解决⼀些常⻅的问题,例如迭代⼀个映射或者集合、条件测试、XML 处理,甚⾄数据库和访问数据库操作等。
JSTL 中最重要的标签:迭代集合以及格式化数字和⽇期⼏个标签

迭代标签

forEach标签

<c:forEach
items=""
begin=""
end=""
step=""
var=""
varStatus="">
</c:forEach>

属性
JSP和JSTL_第4张图片
forEach varStatus 属性
index: 当前这次迭代从 0 开始的迭代索引
count: 当前这次迭代从 1 开始的迭代计数
first: ⽤来表明当前这轮迭代是否为第⼀次迭代的标志
last: ⽤来表明当前这轮迭代是否为最后⼀次迭代的标志

格式化动作标签

JSTL 提供了格式化和解析数字和⽇期的标签,我们讨论⾥⾯有:formatNumber、formatDate、parseNumber及parseDate。
formatNumber标签
formatNumber标签⽤于格式化数字,百分⽐,货币。该标签⽤指定的格式或精度来格式化数字。(将数值型数据转换成指定格式的字符串类型。)
语法格式

<fmt:formatNumber
 value=""
 type=""
 var=""
 scope=""/>

属性
JSP和JSTL_第5张图片
注意:

  1. 如果设置了var属性,则格式化后的结果不会输出,需要通过el表达式获取var对应的限域变量名
  2. 默认的类型(type)的取值为number。可取值:number数值型、percent百分⽐类型、
    currency货币型
    formatDate标签
    formatDate标签⽤于使⽤不同的⽅式格式化⽇期。(将Date型数据转换成指定格式的字符串类
    型。)
    语法格式
<fmt:formatDate
value=""
type=""
dateStyle=""
timeStyle=""
pattern=""
timeZone=""
var=""
scope=""/>

JSP和JSTL_第6张图片标签格式模式
JSP和JSTL_第7张图片

parseNumber标签

parseNumber标签⽤来解析数字,百分数,货币。(parseNumber 标签可以将数字、货币或百分⽐类型的字符串转换成数值型。)
语法格式

<fmt:parseNumber
value=""
type=""
var=""
scope=""/>

属性
JSP和JSTL_第8张图片

parseDate标签

parseDate标签⽤于解析⽇期。(将指定格式的字符串转换成Date类型。)
语法格式

<fmt:parseDate
 value=""
 type=""
 dateStyle=""
 timeStyle=""
 pattern=""
 var=""
 scope=""/>

属性
JSP和JSTL_第9张图片

你可能感兴趣的:(javascript)