`
persistC
  • 浏览: 73563 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多
一、EL语法

EL的语法很简单,他最大的特点就是使用上很方便
例:
${sessionScope.user.sex}
所有EL都是以 ${ 为起始、以} 为结尾的。
上述EL范例的意思是:从Session取得用户的性别。如果使用之前JSP代码的写法如下:
<%
  User user = (User)session.getAttribute("user");
  String sex = user.getSex( );
%>
两者相比较之下,可以发现EL的语法比传统JSP代码更为方便、简洁。

EL提供 . 和 [ ] 两种运算符来存取数据,[ ]可以访问集合或者是数组的元素、Bean的属性。下列两者所代表的意思是一样的,
但是需要保证要取得对象的那个的属性有相应的setXxx()和getXxx()方法才行。

例:
${sessionScope.user.sex}
等于
${sessionScope.user["sex"]}

. 和 [ ] 也可以同时混合使用,如下:
${sessionScope.shoppingCart[0].price}
返回结果为shoppingCart中第一项物品的价格。

在EL中,字符串既可以使用"abc",可以使用'abc'。

EL运算符

EL的算术运算符和Java中的运算符的大致相同,优先级也相同。

注意:'+' 运算符不会连接字符串了,他只用于加法运算。

EL关系运算符有以下六个运算符

关系运算符      说 明                范 例             结果
= = 或 eq   |    等于   |${ 5 = = 5 } 或 ${ 5 eq 5 } | true
!= 或 ne    |   不等于  |${ 5 != 5 } 或 ${ 5 ne 5 }  | false
< 或 lt     |   小于    |${ 3 < 5 }或 ${ 3 lt 5 }    | true
> 或 gt     |   大于    |${ 3 > 5 }或 ${ 3 gt 5 }    | false
<= 或 le    |  小于等于 |${ 3 <= 5 }或 ${ 3 le 5 }   | true
>= 或 ge    |  大于等于 |${ 3 >= 5 }或 ${ 3 ge 5 }   | false

empty运算符

Empty运算符主要用来判断值是否为null或空的,例如:
${ empty param.name }
接下来说明Empty运算符的规则:
{empty} A
   如果A为null时,返回true
   如果A不存在时,返回true
   如果A为空字符串时,返回true
   如果A为空数组时,返回true
   如果A为空的Map时,返回true
   如果A为空的Collection时,返回true
   否则,返回false

注意:
在使用EL关系运算符时,不能够写成:
${param.password1} = = ${param.password2}
或者
${ ${param.password1 } = = ${ param.password2 } }
而应写成
${ param.password1 = = param.password2 }

使用EL从表单中取得数据

与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。一般而言,我们在取得用户的请求参数时,
可以利用下列方法:
request.getParameter(String name)
request.getParameterValues(String name)

在EL中则可以使用param和paramValues两者来取得数据。
${param.name}
${paramValues.name}可以取得所有同名参数的值
${paramValues.hobbies[0]}可以通过指定下标来访问特定的参数的值

这里param的功能和request.getParameter(String name)相同,而paramValues和request.getParameterValues(String name)相同。
如果用户填了一个form,form名称有为username的文本框,则我们就可以使用${param.username}来取得用户填入文本框的值。

EL函数

EL中使用函数要写一个要使用到方法的类,然后在配置xxx.tld文件,然后在JSP中使用时和JSP的自定义标签相似。

xxx.tld中的配置

<function>
  <name>reverse</name><!--函数名-->
  <function-class>jsp2.examples.el.Functions</function-class><!--函数所在的类-->
  <function-signature>java.lang.String reverse( java.lang.String )</function-signature>
  <!--函数原型,也就是函数的返回值类型,函数名,参数表,注意一定要写类型的全名-->
</function>

使用EL函数的写法
${sn:upper('abc')}

注意:在定义EL函数时,都必须为公开静态(public static)

EL的隐含对象

EL也可以使用内置对象中设置的属性,需要使用特定的EL内置对象

属性范围     |    在EL中的对象
Page         |     pageScope
Request      |     requestScope
Session      |     sessionScope
Application  |     applicationScope

EL中使用内置对象的属性
${requestScope.user}
等价于
<%request.getAttribute("user")%>
如果不写出特定的范围 ,那就会在不同的范围间进行搜索了
例:{user}(user是在request范围 request.setAttribute("user",user))
也就等于
${requestScope.user}
<%request.getAttribute("user")%>
EL的隐含对象

   对象                        类 型                  说 明
PageContext      |  javax.servlet.ServletContext |表示此JSP的PageContext
----------------------------------------------------------------------------------------------------------------------------
PageScope        |         java.util.Map         |取得Page范围的属性名称所对应的值
----------------------------------------------------------------------------------------------------------------------------
RequestScope     |         java.util.Map         |取得Request范围的属性名称所对应的值
----------------------------------------------------------------------------------------------------------------------------
sessionScope     |         java.util.Map         |取得Session范围的属性名称所对应的值
----------------------------------------------------------------------------------------------------------------------------
applicationScope |         java.util.Map         |取得Application范围的属称所对应的值
----------------------------------------------------------------------------------------------------------------------------
param            |         java.util.Map         |如同ServletRequest.getParameter(String name)返回String类型的值
----------------------------------------------------------------------------------------------------------------------------
paramValues      |         java.util.Map         |如同ServletRequest.getParameterValues(String name)。返回String []类型的值
----------------------------------------------------------------------------------------------------------------------------
header           |         java.util.Map         |如同ServletRequest.getHeader(String name)返回String类型的值
----------------------------------------------------------------------------------------------------------------------------
headerValues     |         java.util.Map         |如同ServletRequest.getHeaders(String name)返回String []类型的值
----------------------------------------------------------------------------------------------------------------------------
cookie           |         java.util.Map         |如同HttpServletRequest.getCookies( )
----------------------------------------------------------------------------------------------------------------------------
initParam        |         java.util.Map         |如同ServletContext.getInitParameter(String name)。返回String类型的值
----------------------------------------------------------------------------------------------------------------------------                                 


cookie对象

所谓的cookie是一个小小的文本文件,它是以key、value的方式将Session Tracking的内容记录在这个文本文件内,这个文本文件通常存在于
浏览器的暂存区内。JSTL并没有提供设定cookie的动作,因为这个动作通常都是后端开发者必须去做的事情,而不是交给前端的开发者。如果
我们在cookie中设定一个名称为userCountry的值,那么可以使用${cookie.userCountry}来取得它。
${cookie.JSESSIONID.vlaue}

header和headerValues(请求报头对象)

header储存用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,例如:用户浏览器的版本、
用户计算机所设定的区域等其他相关数据。如果要取得用户浏览器的版本,即${header["User-Agent"]}。另外在很少机会下,有可能同一标头名
称拥有不同的值,此时必须改为使用headerValues来取得这些值。
注意:因为User-Agent中包含“-”这个特殊字符,所以必须使用“[]”,而不能写成${header.User-Agent}。

initParam

就像其他属性一样,我们可以自行设定web应用的环境参数(Context),当我们想取得这些参数时,可以使用initParam隐含对象去取得它,
例如:当我们在web.xml中设定如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
  <context-param>
     <param-name>userid</param-name>
     <param-value>mike</param-value>
  </context-param>
</web-app>
那么我们就可以直接使用 ${initParam.userid}来取得名称为userid,其值为mike的参数。
下面是之前的做法:String userid = (String)application.getInitParameter("userid");

pageContext对象

我们可以使用 ${pageContext}来取得其他有关用户要求或页面的详细信息。下面列出了几个比较常用的部分。

Expression                                说 明
${pageContext.request}                  |取得请求对象
${pageContext.session}                  |取得session对象  
${pageContext.request.queryString}      |取得请求的参数字符串
${pageContext.request.requestURL}       |取得请求的URL,但不包括请求之参数字符串
${pageContext.request.contextPath}      |服务的web application的名称
${pageContext.request.method}           |取得HTTP的方法(GET、POST)
${pageContext.request.protocol}         |取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser}       |取得用户名称
${pageContext.request.remoteAddr }      |取得用户的IP地址
${pageContext.session.new}              |判断session是否为新的,所谓新的session,表示刚由                                          server产生而client尚未使用
${pageContext.session.id}               |取得session的ID
${pageContext.servletContext.serverInfo}|取得主机端的服务信息


二、JSTL(JSP标准标签库)

JSTL由核心标签,<c:... > ,xml解析标签 <x:...>,国际化标签 <fmt:....>,数据库访问标签<sql:...>,函数标签<fn:...>

核心标签
Core
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

属性设置
<c:set> 设置属性
<c:remove> 移除设置的属性

过程控制

<c:if test="..."> 条件标签 只有在test属性的值为true是才会执行标签体 
例:
<c:if test="${!(empty user.age)}">
      <h1>hello</h1>
</c:if>
  
<c:choose>choose和when是组合在一起使用的,有点类似于swith case的语法  。
<c:when test="...">when也是条件判断标签,test属性的值为true是才会执行标签体。
例:
<c:choose>
<c:when test="${param.age<18}">
   <h1>you is a child<h1>
</c:when>
<c:when test="${param.age>18 and param.age<50 }">
    <h1>you is a young person</h1>
</c:when>
<c:when test="${param.age>50}">
     <h1>you is a old person</h1>
</c:when>
</c:choose> 

<c:forEach>迭代标签
例:
<c:forEach var="book" item="${store.books}" varStatus="status">
    <h1>${book.parice}</h1>
</c:forEach>
<c:forEach begin="1" end="5" step="1">
     <h1>hello</h1>
</c:forEach>

<c:forTokens>字符串迭代标签

<c:import>引入标签
<c:import url="引入内容的url" var="别名">
${别名}

<c:url>url标签
<c:url value="...">
<c:param name="..." value="..."/>
</c:url>
<c:url value="...">
使用url标签可以实现URL回写

<c:redirect uri="xxx/xxx/xxx.xx"/>

国际化标签
<fmt:lauguage>
<fmt:bundel>资源指定标签
<fmt:message>消息标签
例:
<fmt:setLocale value="zh"/>
<fmt:bundel basename="message.MessageResources">
  <fmt:message>name</fmt:message>
</fmt:bundel>

xxxx.properties
name=\0060\0700\
分享到:
评论

相关推荐

    JSP小项目(包含JSP五大内置对象的使用和集合的运用)

    JSP小项目(包含JSP五大内置对象的使用和集合的运用)

    jsp下的jar包, 一共五个

    5. **jasper.jar**:Tomcat服务器(或其他兼容的Servlet容器)的一部分,负责JSP的编译工作,将JSP页面转换为Java源代码,然后编译成Servlet。 6. **jsp-api-*.jar**和**jsp-impl-*.jar**:有时,容器会区分JSP API...

    jsp5课件

    在描述中提到的"**jsp5课件**",很可能是指基于JSP技术的第五版教程或学习资料。这通常会包括一系列的章节,旨在帮助学习者系统地理解和掌握JSP的关键概念和技术。 **第5章 JSP与JavaBean** 是这个课件中的一个重要...

    jsp 原理 jsp教程

    5. **脚本元素**:包括声明、脚本let、表达式和脚本片段,这些元素允许在JSP页面中嵌入Java代码。 ### JSP与Servlet的关系 1. **Servlet基础**:JSP本质上是Servlet的一种简化形式,它将视图(HTML部分)和逻辑...

    jsp 例程 jsp 例程 jsp 例程

    JSP页面在服务器端经历编译、加载、初始化、服务和销毁五个阶段。在编译阶段,JSP会被转换为一个Servlet类;加载和初始化时,Servlet类被加载并实例化;服务阶段,每次HTTP请求都会调用Servlet的`service`方法;...

    jsp宝典,JSP

    5. **JSP标签**:熟悉自定义标签库(Tag Libraries),如JSTL(JavaServer Pages Standard Tag Library)和EL(Expression Language),以及如何使用它们来提高代码的可读性和可维护性。 6. **Servlet与JSP的关系**...

    jsp网上商城jsp课程设计

    5. **Java 类**:可能包括Servlet、JavaBean或其他辅助类,用于处理业务逻辑和服务端计算。 6. **数据库连接配置**:如数据库驱动、连接字符串、用户名和密码,这些信息通常在项目的配置文件中。 在学习和分析这个...

    jsp实用教程上机实验

    5. 掌握MVC模式,编写Servlet处理请求,JSP显示结果。 6. 部署和调试JSP应用,了解Web容器如Tomcat的工作原理。 通过这些实验,你不仅可以理解JSP的基本概念,还能积累实际项目开发经验,提高解决问题的能力。记住...

    jsp实用教程 jsp电子教程 jsp 从入门到精通 jsp

    五、Servlet与JSP的关系 JSP的本质是Servlet,当JSP页面被请求时,服务器会将其转换为Servlet并进行编译。Servlet处理请求,然后JSP视图负责生成响应内容。 六、JSP动作标签 1. jsp:include:动态包含页面,与...

    自己写JSP博客 完整源代码

    【标题】"自己写JSP博客 完整源代码"所涉及的知识点主要集中在JavaServer Pages(JSP)技术和HTML5(H5)的应用上,同时这是一个完整的博客网站系统,这意味着它涵盖了前后端交互、数据库操作以及用户界面设计等多个...

    原生jsp进行Web编程—作业3-JSP内置对象-Part2

    (2)编写7-5deal.jsp,在其中模拟用户登陆(将用户信息保存在一个二维数组中,, 如果用户登陆成功,将用户名保存在session范围的变量中,并将页面重定向到7-5main.jsp, 否则将页面重定向到7-5index.jsp中,重新...

    jsp高级编程--jsp基础&&jsp高级应用

    第五章 作为xml的jsp 第六章 jsp基础实例 第七章 用jsp实现常见的web应用 第二部分 高级jsp技术 第八章 jsp开发平台的搭建--j2ee 第九章 扩展jsp标签 第十章 Enterprise JavaBeans 第十一章 其他高级应用 第...

    jsp图片轮播html

    【标题】"jsp图片轮播html"涉及到的技术主要包括JSP(JavaServer Pages)和HTML5,其中HTML5用于构建网页结构,JSP则用于动态生成网页内容。这种结合可以实现服务器端与客户端的交互,为用户提供更加丰富的网页体验...

    jsp新闻管理系统

    3. **JSP生命周期**: JSP页面经历编译、实例化、初始化、服务和销毁五个阶段。在服务阶段,每次用户请求都会创建一个新的Servlet实例来处理。 **新闻管理系统的功能模块** 1. **新闻增删改查**: 这是系统的核心...

    可以运行的jsp网上商城 jsp+mysql

    5. **MySQL数据库**:存储商城的数据,如商品信息、用户数据、订单等。使用SQL语句进行数据操作,如CRUD(创建、读取、更新、删除)。 6. **数据库连接池**:为了优化性能,项目可能使用了连接池,如C3P0或DBCP,来...

    JSP学习资料大全(JSP教程)

    **5. JSP脚本元素** - **脚本片段(Scriptlets)**: `&lt;% %&gt;` 包裹的代码块,通常用于编写Java逻辑。 - **表达式(Expressions)**: `&lt;%= %&gt;` 用于输出变量或表达式的值到HTML页面。 - **声明(Declarations)**: `! ...

    jsp网页中用户登陆密码的MD5加密

    在jsp网页中实现MD5加密可以使用JavaBean来实现。MD5类实现了RSA Data Security公司的MD5 message-digest算法。该类中定义了一些静态final变量,用于存储MD5算法中的矩阵值。这些矩阵值用于计算MD5哈希值。 MD5类还...

    JSP.zip_jsp userinfo_jsp增删_jsp实现增删改

    5. **更新页面** - 使用JSP的内置对象response向客户端发送响应,可能是重定向到另一个页面,或者在当前页面上显示操作结果。 **文件“jsp增删改查”** 这个文件名可能是项目的主JSP文件,包含了所有增删改查操作...

    JSP动态网站源代码

    5. 客户端执行的网页语言和服务器端执行的网页语言 客户端执行的网页语言是指浏览器执行的网页语言,如VB Script或Java Script。服务器端执行的网页语言是指服务器端解译引擎执行的网页语言,如JSP或ASP。 6. JSP...

    jsp期末考试题

    下面是jsp期末考试题,涵盖了jsp的基本概念、jsp标签、jsp指令、jsp动作、jsp语法等知识点。 1. FileInputStream 读取文件的代码片段中,buffer1.read(b)每次读取文件的字节数是90 bytes,因为BufferedInputStream...

Global site tag (gtag.js) - Google Analytics