您的位置:首页 > Web前端

JSTL标签结合EL表达式——java web前端瘦身器

2015-08-26 20:58 225 查看
JSP Standard Tag Library 标准标签库:

     Model 1 开发模式采用jsp 内嵌java 代码的方式实现业务逻辑与前台页面的交互,这样虽然使得前台调用业务简单,却也导致jsp多重职责,在系统庞大的项目中,难以继续应用。Model 2则在业务逻辑manager与jsp间创建一层servlet,作为业务层与jsp显示层的桥梁,将jsp中大部分获值的java代码写到servlet中,以减轻jsp负担;但这样做也不可避免的需要在jsp中写入形似<%=user.getName()
%>这样的代码获值。

     JSTL标签库的使用便可彻底代替上述java代码,以类似于html标签的形式,结合EL表达式,获取数据。

EL表达式的使用:

     使用EL表达式时无需引入任何jar包,只要jsp/servlet容器实现了J2EE1.4 、Servlet2.4、JSP2.0规范即可。

具体应用:
Servlet中doGet方法如下,分别用EL表达式获取servlet传递的不同类型数值:   

//结构
Group group =new Group();
group.setName("动力节点");

User user =new User();
user.setAge(23);
user.setGroup(group);
user.setUserName("zhang");

//map
Map map=new HashMap();
map.put("k1","v1");
map.put("k2", "v2");
request.setAttribute("map", map);
request.setAttribute("user",user);

//数组
String[] strArray=new String[]{"a","b","c"};
request.setAttribute("straary", strArray);

//对象数组
User[] users=new User[10];
for(int i=0;i<users.length;i++)
{
users[i]=new User();
users[i].setUserName("钟艾伶_"+i);
}

//list 集合
List userList=new ArrayList();
for(int i=0;i<10;i++)
{
User userss=new User();
userss.setUserName("李四"+i);
userList.add(userss);
}
request.setAttribute("userList",userList);
request.setAttribute("users",users);
request.setAttribute("v2","");
request.setAttribute("v3",new ArrayList());
request.setAttribute("v4","12");
request.setAttribute("v5",null);

//分发器 将request、response传到jsp中
request.getRequestDispatcher("/jstl_el.jsp").forward(request, resp);


EL获取字符串:

hello(普通jsp脚本获值):<%=request.getAttribute("hello")%><br>
hello(el表达式获值): ${hello}<br>
EL获取对象:【对象.属性(get方法后的串,拼成get方法)】

<li>结构 .进行导航  存取器</li>
姓名:${user.userName} <br>
年龄:${user.age}<br>
所属组:${user.group.name}<br>
EL获取map:

<li>map</li><br>
map.k1:${map.k1 }<br>
map.k2:${map.k2 }<br>


EL获取字符串数组:

<li>字符串数组</li><br>
strArray[1]:${strarry[1] }
strArray[4]:${strarry[4] }


EL获取对象数组:

<li>对象数组</li>
users[5].username:${users[5].username}<br>
EL获取List集合:

<li>list.采用[].下标</li>
userList[6].username:${userList[6].username}<br>
EL表达式对运算符的支持:

1+1=${1+1 }<br>
1/1=${1/1 } <br>
10 % 2=${10 % 2 } <br>


常用的jstl标签及其使用:

     使用JSTL标签不同于EL表达式可直接使用即可,JSTL使用前需将jstl.jar 和standard.jar拷贝到WEN-INF/lib包下,重启tomcat后,在相应的jsp页面采用taglib指令,引入标签库方可。

<%@taglib uri=" http://java.sun.com/jsp/jstl/core"prefix="c"%>[/code] JSTL标签结合EL表达式的使用:

     对应servlet中doGet方法:

//普通字符串
request.setAttribute("hello", "helloWorld");

//HTML字符串
request.setAttribute("hello","<font color=red>北京欢迎您!</font>" );

//条件控制 c:if
request.setAttribute("v1","10");
request.setAttribute("v2","2");

//条件控制 c:choose c:when c:otherwise
request.setAttribute("userList", new ArrayList());

//循环标签 c:foreach
Group group=new Group();
group.setName("动力节点");

List userrs=new ArrayList();
for(int i=0; i<10;i++)
{
User userr=new User();
userr.setUserName("zhang"+i);
userr.setAge(23+i);
userr.setGroup(group);

userrs.add(userr);
}
request.setAttribute("userrs",userrs);
request.getRequestDispatcher("/jsp_el.jsp").forward(request, resp);


简单输出:c:out

<li>采用c:out标签</li>
hello使用标签:<c:out value="123"/>
hello使用标签:<c:out value="${hello} "/>
hello使用标签:<c:out value="${hello123} ">没有值</c:out>
hello使用标签:<c:out value="${welcome} escapXml="true" />

c:set c:remove

<li>c:set c:remove</li>
<c:setvalue="root" var="userid"></c:set>
userid:${userid}
<c:removevar="userid"></c:remove>
userid:${userid}逻辑判断标签: c:if \c:choose c:when c:otherwise

<li>条件控制标签 c:if</li>
<c:iftest="${v1 lt v2 }">v1小于v2</c:if>
<li>c:choose c:when c:otherwise</li>
<c:choose>
<c:when test="${v1 gt v2}">v1 大于 v2</c:when>
<c:otherwise> v1 小于 v2</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${emptyuserList}">没有满足条件的用户</c:when>
<c:otherwise>存在用户数据</c:otherwise>
</c:choose>
循环标签: c:foreach

<li>jsp脚本显示</li>
<tableborder="1">
<tr>
<td>用户名</td>
<td>年龄</td>
<td>所属组</td>
</tr>
<%
ListuserList=(List)request.getAttribute("userrs");
if(userList ==null || userList.size()==0){

%>
<tr>
<tdcolspan="3">没有符合条件的数据</td>
</tr>
<%
}else{
for(Iteratoriter=userList.iterator();iter.hasNext())
{
Useruser=(User)iter.next();
}
}
%>
<tr>
<td><%=user.getUserName()%></td>
<td><%=user.getAge()%></td>
<td><%=user.getGrop()%></td>
</tr>
</table><span style="font-family: 'Microsoft YaHei'; font-size: 14px; background-color: rgb(255, 255, 255);"> </span>

<li>循环标签 c:foreach</li>
<tableborder="1">
<tr>
<td>用户名</td>
<td>年龄</td>
<td>所属组</td>
</tr>
<c:choose>
<c:whentest="${empty userrs }">没有符合条件的用户</c:when>
<c:otherwise>
<c:forEachitems="${userrs}" var="users" varstatus="vs">
<c:choose>
<c:whentest="${vs.count mod 2 == 0 }"><trbgcolor="red"></c:when>
<c:otherwise><tr></c:otherwise>
</c:choose>
<tr>
<td>${users.userName}</td>
<td>${user.age}</td>
<td>${user.group}</td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</table>

纠错标签:c:catch     

<li>普通java</li>
<%
<span style="white-space:pre"> </span>try{
Integer.parseInt("dfadf");
<span style="white-space:pre"> </span>}catch(NumberFormatException e){
e.printStackTrace();
}
%>
<li>c:catch</li>
<c:catchitems="msg">
<%Integer.parseInt("dfadf"); %>
</c:catch>
${msg }


界面引入传参:    

<li>c:import 引入某jsp页面</li>
<c:importurl="http://localhost:8099/jstl_el"></c:import>
<li>c:url c:param</li>
<c:urlvalue="http://localhost:8099/jstl_el">
<c:param name="userId"value="${userrs.userName }"></c:param>
<c:param name="age"value="${userrs.age }"></c:param>
</c:url>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: