zoukankan      html  css  js  c++  java
  • JAVA学习JSTL与EL

    一、基础

    1EL(Expression Language):为了使jsp写起来更加简单,提供了在Jsp中简化表达式的方法

    2JSTL:(JSP Standard Tag Library)jstl标准标签库,由apache实现

    3JSTL一般要配合EL表达式一起使用,由于在JSTL在赋值时会大量的使用EL,能够说ELJSTL的一种辅助。

    4、在使用时:JSTL须要引入:jstl.jarStandart.jarWEB_INF/lib文件夹下,可是仅仅使用EL表达式不须要引用不论什么jar包,仅仅要JSP/SERVLET容器实现了J2EE1.4/Servlet2.4Jsp2.0规范就能够。

    二、为什么

    在之前学习jsp的时候也说过是为了将html代码和java代码分离,可是大部分时候假设不进行限制,在jsp中调用java逻辑类是非常难避免的,所以我们有了JSTL来实现表示层与业务逻辑的分离,我们能够通过JSTL实现:与servlet数据的交互,操作xml,格式化数据显示和样式显示,Request中读取数据,循环,自己定义函数等等

    三、EL表达式:

    1、基本的语法:${}:例:hello:${hello}<br>

    2、内置对象:pageScope,requestScope,sessionScope,applicationScope(按默认搜索顺序排列)

    3、指定搜索:${requestScope.hello}

    4、简单实例:

         事实上EL非常easy

          首先我们要写的是servletservlet的代码例如以下:

    package com.tgb.jstl;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 測试EL表达式
     * @author YoungJong
     *
     */
    public class JstlElServlet extends HttpServlet {
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		//super.doGet(req, resp);
    		//普通字符串
    		req.setAttribute("hello", "Hello World");
    		
    		//结构
    		Group group=new Group();
    		group.setName("陈丽娜好样的");
    		
    		User user=new User();
    		user.setUsername("杨政");
    		user.setAge(29);
    		user.setGroup(group);
    		
    		req.setAttribute("user", user);
    		
    		//map
    	    Map map=new HashMap();
    	    map.put("k1", "v1");
    	    map.put("k2", "v2");
    	    req.setAttribute("map", map);
    	    
    	    
    	    //数组
    	    String[] strArray=new String[]{"a","b","c"};
    	    req.setAttribute("str_array", strArray);
    	    
    	    //对象数组
    	    User[] users=new User[10];
    	    for(int i=0;i<users.length;i++){
    	    	users[i]=new User();
    	    	users[i].setUsername("张三_"+i);
    	    }
    	    req.setAttribute("users", users);
    		
    	    //list
    	    List userList=new ArrayList();
    	    for(int i=0;i<10;i++){
    	    	User userl=new User();
    	    	userl.setUsername("李四_"+i);
    	    	userList.add(userl);
    	    }
    	    req.setAttribute("userList",userList);
    	    
    	    req.getRequestDispatcher("/jstl_el.jsp").forward(req, resp);
    		
    	}
    }
    

           以下是在jsp中获取的方法:

    <body>
       <h1>測试EL表达式</h1>
       <hr>
        <li>普通字符串</li><br>
        
        hello(jsp脚本):<%=request.getAttribute("hello") %><br>
        hello(el表达式,语法:$和{}):${hello} <br>
        
        <p>
        <li>结构</li><br>
        姓名:${user.username}<br>
        年龄:${user.age }<br>
        组名:${user.group.name}<br>
        <p>
        <li>取得map</li><br>
        map.k1:${map.k1 }<br>
        map.k2:${map.k2 }<br>
        
        <p>
        <li>字符串数组</li><br>
        strArray[1]:${str_array[1] }<br>
        
        <p>
        <li>对象数组</li><br>
        users[5].username:${users[5].username }<br>
        
        <p>
        <li>List</li><br>
        userList[6]:${userList[6].username }<br>
            
        <p>
        <li>表达式对运算符的支持</li><br>
         1+1=${1+1 }<br>
         10/5=${10/5 }<br>    
         10 % 3=${10 % 3 }<br>
         10 mod 3=${10 mod 3 }<br>
    </body>
    

            效果截图:


    四、JSTL核心库:

    尽管EL非常easy,可是他的功能有限,比如:针对返回空值EL没有办法控制,循环输出数组元素,假设结合JSTL就不用再操心这些问题了。

    经常使用的JSTL标签有非常多比如:<c:out><c:if><c:choose><c:forEach>等等

    这里就不一一介绍,以下介绍一个ELJSTL的结合带来的便利:

    简单实例:首先是Servlet的代码:

    package com.tgb.jstl;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class JstlCoreServlet extends HttpServlet {
    
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		//普通字符串
    		request.setAttribute("hello", "Hello World");
    		
    		//HTML字符串
    		request.setAttribute("welcome", "<font color='red'>欢迎你来到这个世界!</font>");
    		
    		//结构
    		Group group = new Group();
    		group.setName("提高班");
    		
    		List users = new ArrayList();
    		for (int i=0; i<10; i++) {
    			User user = new User();
    			user.setUsername("陈丽娜_" + i);
    			user.setAge(18 + i);
    			user.setGroup(group);
    			users.add(user);
    		}
    		request.setAttribute("users", users);	
    		
    		//map
    		Map map = new HashMap();
    		map.put("k1", "v1");
    		map.put("k2", "v2");		
    		request.setAttribute("map", map);
    		
    	
    		request.getRequestDispatcher("/jstl_core.jsp").forward(request, response);
    	}
    
    }
    

    JSP页面的代码:

    <%@ page language="java" contentType="text/html; charset=GB18030"
        pageEncoding="GB18030"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>    
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1>測试JSTL核心库</h1>
    	<hr>
    	<li>採用c:out标签</li><br>	
    	hello(使用标签):<c:out value="${hello}"/><br>
    	hello(使用EL表达式):${hello }<br>	
    	hello(使用缺省值):<c:out value="${hello123}" default="没有值"/><br>	
    	welcome(使用EL表达式):${welcome}<br>
    	welcome(使用标签,escapeXml=true):<c:out value="${welcome}" escapeXml="true"/><br>
    	welcome(使用标签,escapeXml=false):<c:out value="${welcome}" escapeXml="false"/><br>
    
    <h3>採用forEach标签</h3>
    	<table border="1">
    		<tr>
    			<td>用户名称</td>
    			<td>年龄</td>
    			<td>所属组</td>
    		</tr>
    		<c:choose>
    			<c:when test="${empty users}">
    				<tr>
    					<td colspan="3">没有符合条件的数据</td>
    				</tr>
    			</c:when>
    			<c:otherwise>
    				<c:forEach items="${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>	
    	<p>
    	
    	<li>演示循环控制标签:forEach,输出map</li><br>
    	<c:forEach items="${map}" var="entry">
    		${entry.key },${entry.value }<br>
    	</c:forEach>	
    	<p>
    </body>
    </html>
    

    当中要注意的是要引入:

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

    页面显示截图:


    使用JSTLEL的结合分离了页面与逻辑,使得分层更加明白,代码更加清晰。

  • 相关阅读:
    DailyTick 开发实录 —— UI 设计
    CoreCRM 开发实录 —— 单元测试之 Mock UserManager 和 SignInManager
    CoreCRM 开发实录 —— 单元测试、测试驱动开发和在线服务
    CoreCRM 开发实录 —— Profile
    DailyTick 开发实录 —— 开始
    2016年年终总结
    centos7下mongodb4集群安装
    centos7下elasitcsearch7集群安装
    centos es2.x安装
    centos jdk切换
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4555337.html
Copyright © 2011-2022 走看看