【JSTL】EL表达式

        E L(ExpressionLanguage),是用来显示数据的,集合了ECMAScriptXPath的优点,定义了一些在JSP中简化表达式的方法,功能跟<%=表达式%> 一样,EL是不需要引入什么jar包之类。

1.创建一个web 项目,J2EE版本选择1.4,因为EL默认支持1.4

【注意:1.如果只是使用EL表达式,不需要引入任何jar包,只要JSP/servlet容器实现了J2ee1.4/Servlet2.4JSP2.0规范就可以。】

 

【EL>>语法】

      el表达式的语法就是一个$符号和一对花括号{}

例如:要取数据,就可以直接写${***},取数据的顺序是:先搜索page,搜索request,再搜索session,再搜索application

例如:代码实践:

Servlet

package com.bjpowernode.jstl;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 测试EL表达式
 * 
 * @author happy
 * 
 */
public class JstlElServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// 普通字符串
		request.setAttribute("hello", "Hello World");
		// request的分发器进行转发,/代表根
		request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);
	}

}


JSP的代码》

<h1>测试EL表达式</h1>
<hr>
<li>普通字符串</li>
<br> ①jsp脚本获取:<%=request.getAttribute("hello")%><br>
<br>
<li>EL表达式</li>
<br> ②el表达式,语法:$和{}:${hello}
<br>

运行效果:


EL>>内置对象】

        在EL中,默认的搜索顺序是:page---request---session---application,如果想提高搜索的效率,可以使用内置对象(pageScope,requestScope,sessionScope,applicationScope)直接指定位置搜索。

JSP代码:

<br>③el的内置对象可以指定搜索范围:
<br>pageScope,requestScope,sessionScope,applicationScope:
//${sessionScope.hello} ********${requestScope.hello}

运行效果如下:(因为在Servlet中将数据放在了request中,所以在session范围取不到数据。


EL>>结构】

建立两个实体类,Group类和User类,如下:

/**
 * Group类
 * 
 * @author happy
 * 
 */
public class Group {

	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

/**
 * User类
 * 
 * @author happy
 * 
 */
public class User {

	private String username;

	private int age;

	private Group group;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Group getGroup() {
		return group;
	}

	public void setGroup(Group group) {
		this.group = group;
	}
}

Servlet中,存入相应的数据(与从后台查询返回的数据一样即可,本次只介绍EL表达式,故不涉及后台)

import java.io.IOException;
import java.util.HashMap;
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 happy
 * 
 */
public class JstlElServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// 普通字符串
		request.setAttribute("hello", "Hello World");
		// 结构
		Group group = new Group();
		group.setName("实验班");

		User user = new User();
		user.setUsername("郑艳霞");
		user.setAge(22);
		user.setGroup(group);
		request.setAttribute("user", user);

		// request的分发器进行转发,/代表根
		request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);
	}

}

JSP中通过.来获取,就如同实体的获取数据形式,但是相比较来说不用引入包什么的。

<li>结构</li>
<br>采用.进行导航,如下:
<br> 姓名:${user.username }
<br> 年龄:${user.age }
<br> 所属组:${user.group.name}
<br>

运行结果如下:


【注意】EL表达式中的user.username,这里的username,指的是类中的get方法。

 

EL>>获取Map值】

Servlet代码:

//map
Map map = new HashMap();
map.put("k1", "v11");
map.put("k2", "v22");
request.setAttribute("map", map);

// request的分发器进行转发,/代表根
request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);

JSP代码:

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

EL>>字符串数组】

Servlet代码:

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

request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);

JSP代码:

<li>字符串数组,采用[]下标</li>
<br> strArray[1]:${str_array[1] }
<br>

EL>>对象数组】

Servlet代码:

//对象数组
		User[] users = new User[10];
		for (int i=0; i<users.length; i++) {
			users[i] = new User();
			users[i].setUsername("张三_" + i);
		}
		request.setAttribute("users", users);

request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);

JSP代码:

<li>对象数组,采用[]下标</li>
<br> users[5].username:${users[5].username }
<br>

EL>>list】

Servlet代码:

//list
	List userList = new ArrayList();
	for (int i=0; i<10; i++) {
		User usr = new User();
		usr.setUsername("李四_" + i);
		userList.add(usr);
	}
	request.setAttribute("userList", userList);
request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);

JSP代码:

<li>list,采用[]下标</li>
<br> userList[6].username:${userList[6].username }
<br>


EL>>empty】

Servlet代码:

request.setAttribute("v2", "");
	request.setAttribute("v3", new ArrayList());
	request.setAttribute("v4", "12345");
	request.setAttribute("v5", null);
	
	request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);

JSP代码:

<li>测试empty</li>
<br> v1:${empty v1}
<br> v2:${empty v2}
<br> v3:${empty v3}
<br> v4:${empty v4}
<br> v5:${empty v5}
<br>

运行效果图示:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值