JSTL和EL完美结合

来源:互联网 发布:稀疏矩阵存储 编辑:程序博客网 时间:2024/06/18 06:25

引出

对于JSP中的程序控制和业务逻辑,通过嵌入java代码来实现,有种不伦不类的感觉,就像apsx中直接调用后台方法一样,在拨号项目中这样用过。

 

这样做,阅读性差,也不利于调试和维护。况且JSP只是视图,视图的任务就是显示响应,所以在JSP页面中应该尽可能少的、或者完全不出现Java代码。这样对于页面开发人员,也不用掌握过多的java知识。

 

JSTLEL的结合便很好的解决了这些问题。EL来显示数据,JSTL来实现网页逻辑判断和迭代显示等。这样基本可以取代java代码,而且更加简洁了,或者说封装得更好了,因为使用更少的代码完成了相同的工作,从而提高工作效率。

 

JSTL概要

JSTL的全称是JSPStandard Tag Library(JSP标准标签库),它是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的;提供五个标准标记库并支持EL。


 

JSTL标签的配置和使用:

配置:

 将jstl.jar和standard.jar拷贝到WEB-INF/lib下

使用:

 采用taglib指令引入标签库

 <%@ tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>   

 <%@ tagliburi="http://java.sun.com/jsp/jstl/functions"prefix="fn"%>

 <%@ tagliburi="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>


Expression Language概要


 

  • EL表达式不需要引入任何jar包,只要jsp/servlet容器实现了J2EE1.4/Servlet2.4、JSP2.0规范就可以
  • 定义和设置一个变量,如果不设置范围,默认的是page
  • 如果在获取变量值时,不使用作用域访问对象,系统就会按照page—>request—>session—>application的顺序来查找

  

  • 在JSP页面中,经常会进行接收其他页面或者Servlet传递过来的参数;EL为什么提供参数访问对象来获取这些参数值,如:${param:name}

 

  • JSP和EL有一个公共的对象:pageContext,EL可以通过pageContext来访问JSP中其他的隐式对象(request,session),如:${pageContext:request.requestURL}

 

例子

jsp

<%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%><html><head><title>Inserttitle here</title></head><body><h1>测试JSTL核心库</h1> <li>测试c:set,c:remove</li><br><c:setvalue="root" var="userid"/>userid:${userid}<br><c:removevar="userid"/>userid:${userid}<br><p><li>条件控制标签:c:if</li><br><c:iftest="${v1 lt v2}">v1小于v2<br></c:if><p> <li>条件控制标签:c:choose,c:when,c:otherwise</li><br><c:choose><c:whentest="${v1 gt v2}">v1大于v2<br></c:when><c:otherwise>v1小于v2<br></c:otherwise></c:choose><c:choose><c:whentest="${empty userList}">没有符合条件的数据<br></c:when><c:otherwise>存在用户数据<br></c:otherwise></c:choose><p> <li>演示循环控制标签:forEach</li><br><h3>采用forEach标签</h3><tableborder="1"><tr><td>用户名称</td><td>年龄</td><td>所属组</td></tr><c:choose><c:whentest="${empty users}"><tr><tdcolspan="3">没有符合条件的数据</td></tr></c:when><c:otherwise><c:forEachitems="${users}" var="user"><tr><td>${user.username}</td><td>${user.age}</td><td>${user.group.name}</td></tr></c:forEach></c:otherwise></c:choose></table>        </body>


 

Servlet

protectedvoid doGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {//条件控制标签request.setAttribute("v1",10);request.setAttribute("v2",20); request.setAttribute("userList",new ArrayList()); //结构Groupgroup = new Group();group.setName("动力节点603班"); Listusers = new ArrayList();for(int i=0; i<10; i++) {Useruser = new User();user.setUsername("张三_"+ i);user.setAge(23+ i);user.setGroup(group);users.add(user);}request.setAttribute("users",users);         request.getRequestDispatcher("/jstl_core.jsp").forward(request,response);}


 

小结

JSTL也好,EL表达式也罢,实质都是后台的java代码,只是为了“名正言顺”的体现在jsp页面,以标签的形式展现。这倒和aspx控件类似,虽然是个类,却在页面使用标签表示。

原创粉丝点击