JSP 和 JSTL
1. 主要内容
2. JSP
新建JSP⻚⾯
注释
在 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.jsp”></jsp:include>
注意:动态包含,中间不要加任何内容,包括空格,除⾮确认要使⽤参数,否则报错!
<jsp:include page="include.html"></jsp:include>
<%
String a = "hello.jsp";
%>
<jsp:include page="<%=a %>"></jsp:include>
使⽤动态包含还可以通过在⻚⾯之间传参。
接收参数通过 request.getParameter(name);
<jsp:include page=“hello.jsp” flush=“true”> <jsp:param name=“uname” value=“zhangsan”/>
</jsp:include>
hello.jsp
<%=request.getParameter(“uname”)%>
JSP的四⼤域对象
四种属性范围
在JSP中提供了四种属性的保存范围,所谓的属性保存范围,指的就是⼀个设置的对象,可以再多少
个⻚⾯中保存并可以继续使⽤
- page范围
pageContext : 只在⼀个⻚⾯中保存属性,跳转之后⽆效 - request范围
request : 只在⼀次请求中保存,服务器跳转后依然有效 - session范围
session : 在⼀次会话范围中,⽆论何种跳转都可以使⽤ - application范围
application : 在整个服务器上保存
验证属性范围的特点 - page
本⻚⾯取得,服务器端跳转()后⽆效 - request
服务器跳转有效,客户端跳转⽆效
如果是客户端跳转,则相当于发出了两次请求,那么第⼀次的请求将不存在了;如果希望不管是客
户端还是服务器跳转,都能保存的话,就需要继续扩⼤范围。 - session
⽆论客户端还是服务器端都可以取得,但是现在重新开启⼀个新的浏览器,则⽆法取得之前设置的
session了,因为每⼀个session只保存在当前的浏览器当中,并在相关的⻚⾯取得。
对于服务器⽽⾔,每⼀个连接到它的客户端都是⼀个session
如果想要让属性设置⼀次之后,不管是否是新的浏览器打开都能取得则可以使⽤application - 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");