传智播客---jsp,El,JSTL的语法与使用
2012-10-21 23:34
405 查看
经过在咱们传智播客的这么一小段时间的培训,大家都熟悉了,跟讲课老师也熟悉了,每天都是在开心中学习,在学习中开心,在班主任的带领下,我们没有一个掉队的,都在奋发的努力中,是传智播客给了我能力,是传智播客让我走向了成功,授课老师每天还是一如既往的给我们讲个补基础,班主任照样还是陪着我们,在这深深的对老师说声老师你们辛苦了!!!
首先回顾一下jsp技术:
1、JSP由来?JSP和Servlet技术区别关系?
Servlet技术在生成动态网页时,需要通过response的输出流,通过print语句生成HTML源代码
Servlet生成HTML源代码,编程非常复杂,不利于美工页面人员维护 ,也不能使用Dreamweaver所见即所得开发工具进行调试
sun公司为了简化动态网页生成,推出JSP技术 ,可以说JSP技术就是Servlet技术,功能完全相同
2、JSP运行原理
JSP在执行时,会被服务器翻译为Servlet 编译执行, JSP以Servlet方式运行的 ------ JSP就是Servlet
* JSP 支持HTML语法,通过<% %> 嵌入java程序代码,Servlet 本身是一个java程序,不支持HTML
* JSP在运行时 翻译Servlet程序 保存tomcat/work 目录
3、JSP脚本元素
<%! %> JSP声明 <%= %> JSP脚本表达式 <% %> 脚本代码
<%! %> 生成内容 翻译Servlet程序成员变量、成员方法、内部类
<%= %> 翻译为 out.print ,在service方法内部,用于生成HTML页面源代码
<% %> 嵌入任何java程序代码,运行多个脚本块共同组合为一个java程序
jsp的注释:
支持三种注释 :
JSP注释 <%-- --%>
JSP注释 在JSP翻译为Servlet代码后 消失 ,只存在于JSP源代码中
Java注释(文档注释 /** */ 多行注释 /* */ 单行注释 //)
Java注释 在Servlet程序执行后消失,不会被显示客户端HTML源代码中
HTML注释 <!-- -->
HTML注释 会在客户端HTML 源代码中保留 (在浏览器客户端执行 )
* HTML注释 所以不能阻止 JSP代码和 Java代码的执行
重点一:JSP的三种指令元素:
语法: <%@ 指令名称 属性名=值 属性名=值 属性名=值 ... %>
1、page指令是完成整个页面的配置:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
还可以分开写多个指令
<%@ page language="java" %>
<%@ page contentType="text/html; charset=UTF-8" %>
...
注意page指令中只有import属性可以出现多次,其它属性一般只出现一次
page指令标签属性的解释:
1) language的属性值必须是java ,可以不写默认也是 java
2) extends属性是指定JSP翻译后Servlet继承哪个类,tomcat中默认继承 extends
org.apache.jasper.runtime.HttpJspBase,一般不做修改,如果非要改,必须继承HttpServlet
3) session属性是指定JSP翻译后Servlet是否可以直接使用内置对象session,默认true可以直接使用
* 如果session = true 翻译后生成以下两句代码
HttpSesion session = null;
session = pageContext.getSession();
4) import属性是指定JSP翻译Servlet后导入的包
* 如果使用当前包和java.lang包不用导包,除此之外之外的类,必须通过import导包
其中:
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
* javax.servlet包 、javax.servlet.http包、javax.servlet.jsp包当中类,在JSP中使用时不需要导包
5) buffer和autoFlush属性是设置jsp中内置对象out的缓冲区大小和是否自动输出
* pageContext = _jspxFactory.getPageContext(this, request, response, null, false, 8192, true);
该方法最后两个参数,8192就是默认buffer大小,true代表 autoFlush 自动输出
例:如果设置了<%@ page buffer="16kb" autoFlush="false" %> 生成代码如下:
pageContext = _jspxFactory.getPageContext(this, request, response,null, false, 16384, false);
6) errorPage和isErrorPage设置JSP发生错误后跳转页面,设置错误的处理页面 (错误友好页面 )
* 通过单个页面的友好页面设置,每个jsp都需要配置,十分麻烦
* 所以可以用通用错误页面配置 在web.xml文件中
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
这样配置就可以实现错误页面的通用
* 错误处理页面中,通过设置isErrorPage=true 使用JSP内置对象 exception 获得异常信息
Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if (exception != null) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
* 如果IE浏览器无法显示错误友好页面可通过一下步骤解决:工具--internet选项 -- 高级 -- 将显示友好HTTP错误信息前面钩去掉
7) contentType和pageEncoding : pageEncoding是设置JSP和Servlet源文件编码,contentType设置Http响应内容编码
8) isELIgnored 设置是否解析EL表达式,如果设置false 会对EL进行解析,如果设置true,不会对EL进行解析
*page常用的属性:import isErrorPage (配置错误页面 通用错误页面) contentType
2.include指令 (进行页面布局):
<%@ include file="filename"%>
1) 包含内容注意: 被包含页面不需要 完整html结构 <html> <body> ,只需要编写HTML代码片段就可以了
2) include指令包含原理 (静态包含原理)
* file属性不能使用变量,不能携带参数
3.taglib指令
用来引入标签定义文件
<%@ taglib uri="" prefix="" >
uri : 标签文件名称空间
prefix : 前缀
重点二:JSP的内置对象:
什么叫内置对象:JSP翻译为Servlet后,在代码中已经存在对象,JSP页面可以直接使用这些对象
jsp的九大内置对象:
HttpServletRequest request
HttpServletResponse response
HttpSesssion session
ServletContext application
ServletConfig config
Throwable exception
page this (HttpServlet) ---- 就是Servlet本类,类型定义Object,不建议使用
PageContext pageContext
JspWriter out
Servlet三种数据范围 : request、session、ServletContext
JSP存在四种数据范围 : page request session application
* application 就是 ServletContext
* page代表当前页面,保存数据到当前页面数据范围, 该数据只能在当前页面使用
*** pageContext代表当前页面上下文:
1、常用操作一 :向 JSP 四个范围 存取数据
setAttribute(String name, Object value, int scope) scope代表存入那个数据范围用常量代表
getAttribute(String name, int scope) 从那个数据范围获取数据
***setAttribute(String name, Object value) 没有指定scope,默认将数据保存到page范围
提供了 非常重要方法 findAttribute(String name) : 按照 page - request - session - application 搜索
指定属性,找到了返回,如果都没有返回 null
2、常用操作二:获取其它八个隐含对象
*意义:编写框架,获得pageContext一个对象,可以获得JSP 九个内置对象
out对象, 可以用来向浏览器输出数据 (生成HTML源代码中)
JspWriter out = null;
out = pageContext.getOut();
pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);
//最后两个参数与out缓冲区相关
重点三:JSP动作标签 (JSP Action )
什么是标签: <XXX> </XXX> , 标签的背后是一段java代码的执行,编写了一个标签,相当于调用一段java代码 (标签用来简化
JSP中java代码的 )
请写出6个JSP动作标签 ?
1、和JavaBean操作相关标签
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>
2、和jsp页面跳转相关
<jsp:include>
<jsp:forward>
<jsp:param>
jsp:include标签效果 和 <%@include %>指令 相同
语法 : <jsp:include page="url" />
jsp:include 动态包含,包含目标jsp执行结果
@include 静态包含,包含目标jsp翻译Servlet源代码
jsp:forward 标签取到 JSP中转发的代码
<jsp:forward page="/jsp/12.jsp"></jsp:forward> 等价于
request.getRequestDispatcher("/jsp/12.jsp").forward(request,response);
* <jsp:forward>之后的代码不执行
* 传递参数通过request.setAttribute传递
EL表达式:
1.EL获取数据 :
获得JSP四个范围的数据
<%
pageContext.setAttribute("pageinfo","my page");
request.setAttribute("requestinfo","my request");
session.setAttribute("sessioninfo","my session");
application.setAttribute("applicationinfo","my application");
%>
${pageScope.pageinfo }
${requestScope.requestinfo }
${sessionScope.sessioninfo }
${applicationScope.applicationinfo }
** 如果直接写 ${pageinfo} 自动从四个范围查找
EL获得复杂对象,读取当中数据 ,复杂对象:数组、List集合、Map集合、Java对象
如果数组 : ${pageScope.arr[0]} 取出数组下标为0 元素(第一个元素)
如果List : ${pageScope.list[0]} 获得list集合对象 调用 get(0) 取出第一个元素
如果map : ${pageScope.map.bbb} 相当于 map.get("bbb");
如果java对象 : ${pageScope.person.name} 相当于 person.getName(); 调用 getName方法
.和[] 取值区别: 所有可以用.的地方都可以用[]
取代,但是所有可以用[]的地方就不能全用“.”取代,如果属性名字是特殊字符,必须使用[]
* 特殊字符(数字、含有.的名称 )
2. EL执行运算 (算术运行、比较运算、逻辑运算)
算术运算: + = * / %
比较运算: > < >= <= == !=
逻辑运算:&& || !
> gt greater than
< lt less than
>= ge greater eaquals
<= le less equals
== eq equals
!= ne not equals
&& and
|| or
! not
* EL执行运算时,首先将内容转换为数字,再运算
* ${a + 10} 如果 a不存在,运算的结果是 10
* 运算必须写在一个 {}中, 典型错误 ${ ${a} + ${b} }
empty运算符:判断对象是否不存在,集合是否为空
二元表达式 : ${(empty username)? "用户名不存在":username }
3.EL常用web对象使用
11 内置对象
pageContext
获得四个数据范围的数据
pageScope
requestScope
sessionScope
applicationScope
* ${pageScope.name } ====== pageContext.getAttribute("name")
问题:getParameter 和 getAttribute 区别 ?
getParameter 获得 HTTP中请求参数的值 : get参数 url?name=zhangsan post参数位于HTTP请求体 name=zhangsan
* form表单提交、<a href="url?id=1" >
getAttribute 获得服务器端各种数据范围的值 request.getAttribute 获得request数据范围的值
* 值在服务器端通过 request.setAttribute 保存的
getParameter 获得客户端提交的数据,getAttribute 服务器内部传递的数据
param 、paramValues 用户获得请求参数的值
${param.name} ==== request.getParameter("name");
${paramValues.name} ===== request.getParameterValues("name");
header、headerValues 获得请求头信息的数据
${header["user-agent"]} ========== request.getHeader("user-agent");
${headerValues["user-agent"]} ============= request.getHeaders("user-agent");
cookie 用来在开发中快速获得cookie的值 ------- 是一个Map<String,Cookie>
${cookie.name.value} 获得指定名称的cookie的value值
initParam 用来快速读取ServletContext的全局初始化参数
${initParam.name } ===================== getServletContext().getInitParameter("name");
* <context-param> 配置全局参数
最常使用:cookie ----------- ${cookie.name.value } 这里name是cookie的name值
pageContext ------------- ${pageContext.request.contextPath } ==== pageContext.getRequest().getContextPath() 返回/工程名
-----<a href="${pageContext.request.contextPath }/el/1.jsp" >link</a>
快速获得ip : ${pageContext.request.remoteAddr }
JSTL标签库:SP标准标签库
使用JSTL,去官网下载 JSTL 1.0 JSTL 1.1 JSTL 1.2
JSTL1.0 出现 JavaEE1.3 年代 ,EL是从JavaEE1.4才被纳入官方规范 ----- 默认 JSTL1.0标签不支持 EL表达式
JSTL1.1存在两个jar包 jstl.jar(存放接口) standard.jar(存放实现类)
首先将下载jar包 复制 工程/WEB-INF/lib下
JSTL core标签库快速应用
JSTL 由 core fmt sql xml 和 EL函数库 五部分组成
1、导入jar
2、在jsp引用tld 描述文件 使用taglib指令
在standard.jar/META-INF/ 很多 tld文件 ,每个tld文件应该是一组标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> uri相当于当前标签名称空间,prefix 标签使用前缀
在引用uri时候特别注意
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> ---- JSTL1.1
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> --- JSTL1.0 不支持EL
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %> --- JSTL1.0 支持EL
* 因为数据库操作和 XML操作已经都用Servlet来实现了,不用JSP,所以不会使用 sql和xml 标签库
* 使用JSP主要用来进行页面显示 只学习 core 和 fmt
今天主要讲core
会在后面介绍fmt 标签库
JSTL core标签库中 12个标签
1、c:out 输出内容到浏览器端
2、c:set 设置值到四种数据范围,设置四个范围中java对象的一个属性值
3、c:remove 用来删除四个数据范围的数据
4、c:catch 捕获程序异常
5、c:if 取代页面中if条件语句,记住没有c:else
<c:if test="${m>5}" > </c:if>
<c:if test="${m<=5}"> <c:if>
6、c:choose c:when c:otherwise 一起使用 ,取代if elseif else 结构 、switch-case 结构7、
7、c:forEach 取代页面中for循环
* foreach.jsp 有5段程序 都需要掌握
8、c:forTokens 切割字符串
9、c:import 效果和include类似
10、c:url 完成URL重写 (禁用cookie的session追踪 ) ---- 结合c:param完成 中文URL编码
11、c:redirect 完成请求重定向
首先回顾一下jsp技术:
1、JSP由来?JSP和Servlet技术区别关系?
Servlet技术在生成动态网页时,需要通过response的输出流,通过print语句生成HTML源代码
Servlet生成HTML源代码,编程非常复杂,不利于美工页面人员维护 ,也不能使用Dreamweaver所见即所得开发工具进行调试
sun公司为了简化动态网页生成,推出JSP技术 ,可以说JSP技术就是Servlet技术,功能完全相同
2、JSP运行原理
JSP在执行时,会被服务器翻译为Servlet 编译执行, JSP以Servlet方式运行的 ------ JSP就是Servlet
* JSP 支持HTML语法,通过<% %> 嵌入java程序代码,Servlet 本身是一个java程序,不支持HTML
* JSP在运行时 翻译Servlet程序 保存tomcat/work 目录
3、JSP脚本元素
<%! %> JSP声明 <%= %> JSP脚本表达式 <% %> 脚本代码
<%! %> 生成内容 翻译Servlet程序成员变量、成员方法、内部类
<%= %> 翻译为 out.print ,在service方法内部,用于生成HTML页面源代码
<% %> 嵌入任何java程序代码,运行多个脚本块共同组合为一个java程序
jsp的注释:
支持三种注释 :
JSP注释 <%-- --%>
JSP注释 在JSP翻译为Servlet代码后 消失 ,只存在于JSP源代码中
Java注释(文档注释 /** */ 多行注释 /* */ 单行注释 //)
Java注释 在Servlet程序执行后消失,不会被显示客户端HTML源代码中
HTML注释 <!-- -->
HTML注释 会在客户端HTML 源代码中保留 (在浏览器客户端执行 )
* HTML注释 所以不能阻止 JSP代码和 Java代码的执行
重点一:JSP的三种指令元素:
语法: <%@ 指令名称 属性名=值 属性名=值 属性名=值 ... %>
1、page指令是完成整个页面的配置:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
还可以分开写多个指令
<%@ page language="java" %>
<%@ page contentType="text/html; charset=UTF-8" %>
...
注意page指令中只有import属性可以出现多次,其它属性一般只出现一次
page指令标签属性的解释:
1) language的属性值必须是java ,可以不写默认也是 java
2) extends属性是指定JSP翻译后Servlet继承哪个类,tomcat中默认继承 extends
org.apache.jasper.runtime.HttpJspBase,一般不做修改,如果非要改,必须继承HttpServlet
3) session属性是指定JSP翻译后Servlet是否可以直接使用内置对象session,默认true可以直接使用
* 如果session = true 翻译后生成以下两句代码
HttpSesion session = null;
session = pageContext.getSession();
4) import属性是指定JSP翻译Servlet后导入的包
* 如果使用当前包和java.lang包不用导包,除此之外之外的类,必须通过import导包
其中:
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
* javax.servlet包 、javax.servlet.http包、javax.servlet.jsp包当中类,在JSP中使用时不需要导包
5) buffer和autoFlush属性是设置jsp中内置对象out的缓冲区大小和是否自动输出
* pageContext = _jspxFactory.getPageContext(this, request, response, null, false, 8192, true);
该方法最后两个参数,8192就是默认buffer大小,true代表 autoFlush 自动输出
例:如果设置了<%@ page buffer="16kb" autoFlush="false" %> 生成代码如下:
pageContext = _jspxFactory.getPageContext(this, request, response,null, false, 16384, false);
6) errorPage和isErrorPage设置JSP发生错误后跳转页面,设置错误的处理页面 (错误友好页面 )
* 通过单个页面的友好页面设置,每个jsp都需要配置,十分麻烦
* 所以可以用通用错误页面配置 在web.xml文件中
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
这样配置就可以实现错误页面的通用
* 错误处理页面中,通过设置isErrorPage=true 使用JSP内置对象 exception 获得异常信息
Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if (exception != null) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
* 如果IE浏览器无法显示错误友好页面可通过一下步骤解决:工具--internet选项 -- 高级 -- 将显示友好HTTP错误信息前面钩去掉
7) contentType和pageEncoding : pageEncoding是设置JSP和Servlet源文件编码,contentType设置Http响应内容编码
8) isELIgnored 设置是否解析EL表达式,如果设置false 会对EL进行解析,如果设置true,不会对EL进行解析
*page常用的属性:import isErrorPage (配置错误页面 通用错误页面) contentType
2.include指令 (进行页面布局):
<%@ include file="filename"%>
1) 包含内容注意: 被包含页面不需要 完整html结构 <html> <body> ,只需要编写HTML代码片段就可以了
2) include指令包含原理 (静态包含原理)
* file属性不能使用变量,不能携带参数
3.taglib指令
用来引入标签定义文件
<%@ taglib uri="" prefix="" >
uri : 标签文件名称空间
prefix : 前缀
重点二:JSP的内置对象:
什么叫内置对象:JSP翻译为Servlet后,在代码中已经存在对象,JSP页面可以直接使用这些对象
jsp的九大内置对象:
HttpServletRequest request
HttpServletResponse response
HttpSesssion session
ServletContext application
ServletConfig config
Throwable exception
page this (HttpServlet) ---- 就是Servlet本类,类型定义Object,不建议使用
PageContext pageContext
JspWriter out
Servlet三种数据范围 : request、session、ServletContext
JSP存在四种数据范围 : page request session application
* application 就是 ServletContext
* page代表当前页面,保存数据到当前页面数据范围, 该数据只能在当前页面使用
*** pageContext代表当前页面上下文:
1、常用操作一 :向 JSP 四个范围 存取数据
setAttribute(String name, Object value, int scope) scope代表存入那个数据范围用常量代表
getAttribute(String name, int scope) 从那个数据范围获取数据
***setAttribute(String name, Object value) 没有指定scope,默认将数据保存到page范围
提供了 非常重要方法 findAttribute(String name) : 按照 page - request - session - application 搜索
指定属性,找到了返回,如果都没有返回 null
2、常用操作二:获取其它八个隐含对象
*意义:编写框架,获得pageContext一个对象,可以获得JSP 九个内置对象
out对象, 可以用来向浏览器输出数据 (生成HTML源代码中)
JspWriter out = null;
out = pageContext.getOut();
pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);
//最后两个参数与out缓冲区相关
重点三:JSP动作标签 (JSP Action )
什么是标签: <XXX> </XXX> , 标签的背后是一段java代码的执行,编写了一个标签,相当于调用一段java代码 (标签用来简化
JSP中java代码的 )
请写出6个JSP动作标签 ?
1、和JavaBean操作相关标签
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>
2、和jsp页面跳转相关
<jsp:include>
<jsp:forward>
<jsp:param>
jsp:include标签效果 和 <%@include %>指令 相同
语法 : <jsp:include page="url" />
jsp:include 动态包含,包含目标jsp执行结果
@include 静态包含,包含目标jsp翻译Servlet源代码
jsp:forward 标签取到 JSP中转发的代码
<jsp:forward page="/jsp/12.jsp"></jsp:forward> 等价于
request.getRequestDispatcher("/jsp/12.jsp").forward(request,response);
* <jsp:forward>之后的代码不执行
* 传递参数通过request.setAttribute传递
EL表达式:
1.EL获取数据 :
获得JSP四个范围的数据
<%
pageContext.setAttribute("pageinfo","my page");
request.setAttribute("requestinfo","my request");
session.setAttribute("sessioninfo","my session");
application.setAttribute("applicationinfo","my application");
%>
${pageScope.pageinfo }
${requestScope.requestinfo }
${sessionScope.sessioninfo }
${applicationScope.applicationinfo }
** 如果直接写 ${pageinfo} 自动从四个范围查找
EL获得复杂对象,读取当中数据 ,复杂对象:数组、List集合、Map集合、Java对象
如果数组 : ${pageScope.arr[0]} 取出数组下标为0 元素(第一个元素)
如果List : ${pageScope.list[0]} 获得list集合对象 调用 get(0) 取出第一个元素
如果map : ${pageScope.map.bbb} 相当于 map.get("bbb");
如果java对象 : ${pageScope.person.name} 相当于 person.getName(); 调用 getName方法
.和[] 取值区别: 所有可以用.的地方都可以用[]
取代,但是所有可以用[]的地方就不能全用“.”取代,如果属性名字是特殊字符,必须使用[]
* 特殊字符(数字、含有.的名称 )
2. EL执行运算 (算术运行、比较运算、逻辑运算)
算术运算: + = * / %
比较运算: > < >= <= == !=
逻辑运算:&& || !
> gt greater than
< lt less than
>= ge greater eaquals
<= le less equals
== eq equals
!= ne not equals
&& and
|| or
! not
* EL执行运算时,首先将内容转换为数字,再运算
* ${a + 10} 如果 a不存在,运算的结果是 10
* 运算必须写在一个 {}中, 典型错误 ${ ${a} + ${b} }
empty运算符:判断对象是否不存在,集合是否为空
二元表达式 : ${(empty username)? "用户名不存在":username }
3.EL常用web对象使用
11 内置对象
pageContext
获得四个数据范围的数据
pageScope
requestScope
sessionScope
applicationScope
* ${pageScope.name } ====== pageContext.getAttribute("name")
问题:getParameter 和 getAttribute 区别 ?
getParameter 获得 HTTP中请求参数的值 : get参数 url?name=zhangsan post参数位于HTTP请求体 name=zhangsan
* form表单提交、<a href="url?id=1" >
getAttribute 获得服务器端各种数据范围的值 request.getAttribute 获得request数据范围的值
* 值在服务器端通过 request.setAttribute 保存的
getParameter 获得客户端提交的数据,getAttribute 服务器内部传递的数据
param 、paramValues 用户获得请求参数的值
${param.name} ==== request.getParameter("name");
${paramValues.name} ===== request.getParameterValues("name");
header、headerValues 获得请求头信息的数据
${header["user-agent"]} ========== request.getHeader("user-agent");
${headerValues["user-agent"]} ============= request.getHeaders("user-agent");
cookie 用来在开发中快速获得cookie的值 ------- 是一个Map<String,Cookie>
${cookie.name.value} 获得指定名称的cookie的value值
initParam 用来快速读取ServletContext的全局初始化参数
${initParam.name } ===================== getServletContext().getInitParameter("name");
* <context-param> 配置全局参数
最常使用:cookie ----------- ${cookie.name.value } 这里name是cookie的name值
pageContext ------------- ${pageContext.request.contextPath } ==== pageContext.getRequest().getContextPath() 返回/工程名
-----<a href="${pageContext.request.contextPath }/el/1.jsp" >link</a>
快速获得ip : ${pageContext.request.remoteAddr }
JSTL标签库:SP标准标签库
使用JSTL,去官网下载 JSTL 1.0 JSTL 1.1 JSTL 1.2
JSTL1.0 出现 JavaEE1.3 年代 ,EL是从JavaEE1.4才被纳入官方规范 ----- 默认 JSTL1.0标签不支持 EL表达式
JSTL1.1存在两个jar包 jstl.jar(存放接口) standard.jar(存放实现类)
首先将下载jar包 复制 工程/WEB-INF/lib下
JSTL core标签库快速应用
JSTL 由 core fmt sql xml 和 EL函数库 五部分组成
1、导入jar
2、在jsp引用tld 描述文件 使用taglib指令
在standard.jar/META-INF/ 很多 tld文件 ,每个tld文件应该是一组标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> uri相当于当前标签名称空间,prefix 标签使用前缀
在引用uri时候特别注意
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> ---- JSTL1.1
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> --- JSTL1.0 不支持EL
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %> --- JSTL1.0 支持EL
* 因为数据库操作和 XML操作已经都用Servlet来实现了,不用JSP,所以不会使用 sql和xml 标签库
* 使用JSP主要用来进行页面显示 只学习 core 和 fmt
今天主要讲core
会在后面介绍fmt 标签库
JSTL core标签库中 12个标签
1、c:out 输出内容到浏览器端
2、c:set 设置值到四种数据范围,设置四个范围中java对象的一个属性值
3、c:remove 用来删除四个数据范围的数据
4、c:catch 捕获程序异常
5、c:if 取代页面中if条件语句,记住没有c:else
<c:if test="${m>5}" > </c:if>
<c:if test="${m<=5}"> <c:if>
6、c:choose c:when c:otherwise 一起使用 ,取代if elseif else 结构 、switch-case 结构7、
7、c:forEach 取代页面中for循环
* foreach.jsp 有5段程序 都需要掌握
8、c:forTokens 切割字符串
9、c:import 效果和include类似
10、c:url 完成URL重写 (禁用cookie的session追踪 ) ---- 结合c:param完成 中文URL编码
11、c:redirect 完成请求重定向
相关文章推荐
- idea下Maven项目的webapp下的jsp页面无法使用el或者jstl表达式
- 简述jsp之EL表达式和jstl及其使用
- 在JSP使用EL和JSTL判断指定元素是否存在于指定集合中
- jsp使用jstl、el标签时出现According to TLD or attribute directive in tag file, attribute items does not acc错误
- 【jsp】jstl + el 语法九九乘法口诀的实现(不含java代码)
- jsp默认语法、EL、JSTL表达式,JSTL和struts Tag标签的使用总结
- JSP EL标签不能和struts tag 一起使用,只能和JSTL一起使用了。
- 关于使用el语法的jsp版本限制
- jsp中使用jstl与EL标签创建九九乘法表
- jsp界面的非java编程(EL和JSTL的配合使用)(初级架构不完全版)
- JSP基础语法之十六:JSTL配置和核心标签(C)的使用
- JSP_EL使用
- JSP EL 自定义函数的使用
- jsp中使用EL判断枚举值相等问题
- 【JSTL EL】 jsp 页面学习
- 和JSF一起使用JSTL和其它的JSP定制标记
- 【jstl&el】jstl和EL的区别和使用
- 【错误解决】[Maven]使用Maven配置Jstl出现异常:The absolute uri: http://java.sun.com/jsp/jstl/core cannot...
- JSP中的JSTL 和 EL
- 出现 JSP页面中使用JSTL标签无法解析 错误的原因及解决方法