el+jstl

el---Expression Language
主要作用:
获取数据:
某个web域中的对象,访问javabean的属性,访问集合,数组
执行运算:
利用el表达式可以在jsp页面执行一些基本的关系运算,逻辑运
算和算术运算
                         
获取web开发常用对象:
el表达式定义一些隐式对象,利用这些对象可以轻松获取常用


对象的引用。比如:${pageContext.request.contextPath} 

调用java方法:
el表达式允许用户自定义el函数,以在jsp页面中通过el表达式


  调用java类的方法


实例剖析1(获取数据):
${name}--<%pageContext.findAttribute("name")%>

<%
Person p = new Person();
p.setAge(12);
request.setAttribute("person",p);
%>
${person.age}//首先从request域找出person对象 再通过反射获取属性


<%
Person p = new Person();
Address address = new Addresss();
p.setAddress(address);
request.setAttribute("person",p);
%>
${person.address.name}


<%
Person p1 = new Person();
p1.setAge(12);
Person p2 = new Person();
p2.setAge(12);
List<Person> list = new ArrayList();
list.add(p1);
list.add(p2);
request.setAttribute("list",list);
%>
${list[0].age}//取出第一个List元素的Age
//迭代
<c:forEach items="${list}" var=person>
${person.age}
</c:forEach>




<%
Map map = new HashMap();
map.put("1","a");
map.put("x","b");
request.setAttribute("map",map);
%>
${map["1"]}//获取 key为1的value
${map.x}//获取key为x的 value
<c:forEach items="${map}" var=entry>
${entry.key}=${entry.value}
</c:forEach>
实例剖析2(执行运算):
${2*3}//6
${user==null}
${username="x" && password="123"}

empty运算符:检查对象是否为空null或""
<%
List list = new ArrayList();
list.add("xx");
list.add("xa");
request.setAttribute("list",list);
%>
<c:if test="${!empty()list}">
<c:forEach items="${list}" var="str">
${str}
</c:forEach>
</c:if>


二元运算符:${user!=null?"已登录":"没登陆"}
<input type="radio" name="gender"  value="male"  


${user.gender=="male"?"checked":""} >


<%
User user = new User();
String []like ={"dance","sing"};
user.setLike(like);
request.setAttribute("user",user);
%>
<input type="check" name="like" value="sing" >唱歌


实例剖析3(获取web开发11个隐式对象):pageContext,pageScope,
requestScope,sessionScope,applicationScope,
${pageContext}<!-- 首先查看$中是否含有定义的隐式对象,若是,则


直接返回隐式对象 ->
<%
pageContext.setAttribute("name","xx");//内部用map保存
%>
${pageScope.name}//从page域获取用来保存数据的map集合健为name的v
而${name}是从四个域里面查询
其余的requestScope,sessionScope,applicationScope都pageScope一样


纠正检查用户登录与否${sessionScope.user!=null}


隐式对象补充:param (保存了所有请求参数map)经常用在数据回显
${param}//获取请求参数和request.setAttribute("a","s")的数据

paramValues (保存所有的请求参数,把同名请求数据封装数组)
${paramValues.name[1]} $[paramValues.name[0]}


header获取请求头 还有headerValues获取同名--数组
${header.Accept} 
${header["Accept-Encoding"]}//获取带特殊字符
属性

cookie表示一个保存所有cookie的map jsp默认打开session
      ${cookie.JsessionId}//保存所有cookie的map中JsessionId的cookie对象
${cookie.JsessionId.value}//获取map中对应cookie的值


initParam保存一个web程序初始化的所有参数
web.xml//web初始化参数 保存在在servletContext中就是application
<context-param>
<param-name>xx</param-name>
<parma-value>value</param-value>
</context-param>
${initParam.xx}//servletContext中用于保存初始化参数的map
利用initParam可以简介设置项目名 获取项目名


实例剖析4(调用java类静态方法):
实例:${prefix: method(params)}
这个java类的静态方法需要在TLD文件中描述,才可以
EL自定义函数用于扩展EL表达式的功能,可以让EL完成普通的
    java程序代码所能能完成的功能。

1. 编写el函数类:Convert1.java

package zhu;
public class Convert1 {
public static String convert(Integer v)
{
switch(v)
{
case 1: return "一";
case 2: return "二";
case 3: return "三";
case 4: return "四";
case 5: return "五";
}
return "非数字";
}
}

2.编写tld文件描述:zhuConvert.tld

<?xml version="1.0" encoding="UTF-8" ?>
<taglib 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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <description>A tag library exercising SimpleTag handlers.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>SimpleTagLibrary</short-name>
    <uri>/zhu</uri>
    
    <function>
        <name>convert</name>
<function-class>zhu.Convert1</function-class>
<function-signature>java.lang.String convert(java.lang.Integer)</function-signature>
    </function>
</taglib>

3.编写jsp验证:1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="WEB-INF/zhuConvert.tld" prefix="fn" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP '1.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
  </head>
  
  <body>
    ${fn:convert(2)} 
  </body>

</html>

      EL函数和EL自定义标签 都可以代替jsp中的java脚本
但是EL函数没有引进9大域



自定义标签:
编写一个实现Tag接口的java类(标签处理类)继承TagSupport

编写标签库描述(tld)文件,在tld文件中对标签处理器进行描述

1.编写自定义标签类:TagDemo.java

package zhu;


import java.io.IOException;


import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;


public class TagDemo extends TagSupport{
@Override
public int doStartTag() throws JspException {
try {
this.pageContext.getOut().print(this.pageContext.getRequest().getRemoteAddr());
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}

}

2.编写tld文件:viewIp.tld

<?xml version="1.0" encoding="UTF-8" ?>
<taglib 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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <description>A tag library exercising SimpleTag handlers.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>SimpleTagLibrary</short-name>
    <uri>/zhu</uri>
    <tag>
        <description>Outputs Hello, World</description>
        <name>viewIP</name>
        <tag-class>zhu.TagDemo</tag-class>
        <body-content>empty</body-content>
    </tag>
</taglib>

3.编写jsp:2.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="WEB-INF/viewIp.tld" prefix="v" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>自定义标签可以获取九大内置对象page,request,response,session,application,Cookie,Exception,config,out</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
  </head>
  
  <body>
  <%=request.getRemoteAddr()%><br/>
    我的ip:<v:viewIP /> 
  </body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值