EL表达式和JSTL

EL表达式

在jsp开发中,为了获取Servle域对象储存的数据,经常需要书写很多java代码,这样的做法会使得jsp页面混乱,难以维护,为此,jsp2.0规范中提到了EL表达式,EL是ExpressionLanguage的缩写,它是一种简单的数据访问语言。
EL格式:

${表达式}

代码演示:
首先在在包中创建一个用于储存用户名和密码的类MyServlet,代码如下:

package cn.itcast.chapter07.beanutils;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class myServlet
 */
@WebServlet("/myServlet")
public class myServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setAttribute("username", "itcast");
		request.setAttribute("password", "123");
		RequestDispatcher dispatcher = request
				.getRequestDispatcher("/myjsp.jsp");
		dispatcher.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

然后在WebContent目录下编写一个名为myisp的JSP文件,使用改文件来输出MyServlet所储存的信息代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
用户名:<%=request.getAttribute("username") %><br />
密    码:<%=request.getAttribute("password") %><br />

</body>
</html>

访问结果:
在这里插入图片描述
可以看到,如果不使用EL表达式,在JSP中获取的储存数据,需要写大量的java代码,接下来我们在myjsp.jsp中进行一下修改,通过EL表达式来访问myServlet中所储存的信息:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
用户名:<%=request.getAttribute("username") %><br />
密    码:<%=request.getAttribute("password") %><br />
<hr />
使用EL表达式:<br />
用户名:${username}<br />
密码:${password}<br />
</body>
</html>

访问结果:
在这里插入图片描述
可以看到,使用EL表达式同样可以访问myServlet中的数据,并且要简单的多;这样也使得程序简洁易维护;
EL中的隐式对象
在这里插入图片描述

下面我们利用EL的表达式中的pageContext隐式对象来进行演示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	获取项目路径:${pageContext.request.contextPath}<br />
	Content-Type:${pageContext.response.contentType}<br />
</body>
</html>

演示结果:
在这里插入图片描述
可以看到使用EL表达式中的pageContext对象已成功获取到;
Web域相关对象
在EL表达式中,为了获取指定域中的数据,提供了pageScope、requestScope、sessionScope和applicationScope 4个隐式对象
如下是代码使用写法示例:

${pageScope.userName}
${requestScope.userName}
${sessionScopee.userName}
${applicationScope.userName}

接下来我们以实例演示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%pageContext.setAttribute("page", "PAGE");
	request.setAttribute("request", "REQUEST");
	session.setAttribute("session", "SESSION");
	application.setAttribute("application", "APPLICATION");
	%>
	${ pageScope.page}===${page }<br />
	${ requestScope.request}==${request }<br />
	<% pageContext.setAttribute("aa1", "page");
	request.setAttribute("aa2", "REQUEST");
	session.setAttribute("aa", "SSESSION");
	application.setAttribute("aa", "APPLICATON");
	%>
	${ pageScope.aa}===${aa }<br />
	${ requestScope.aa}===${aa }<br />
	===================================<br />
	${aa }<br />
</body>
</html>

演示结果:
在这里插入图片描述
由图可以看出,使用这四个隐式对象成功的获取到了相应jsp域对象中的属性值;
param和paramValues对象
param对象用于获取请求参数的某个值,它是Map类型,与request.getParameter()方法相同,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。param对象的语法格式比较简单如下:

${param.num}

但是如果一个参数有多个值呢,则可以使用paramValues对象来获取请求参数的所有值,该对象用于返回请求参数值组成的数组;如下:

${paramValues.nums[0]}

接下来我们以一个实际例子演示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Cont-Type" content="text/html;"charset="UTF-8">
<title>Insert title here</title>
</head>
<body style="text-align: center;">
	<form action="${pageContext.request.contextPath }/param.jsp">
		num1:<input type="text" name="num1" /><br />
		num2:<input type="text" name="num" /><br />
		num3:<input type="text" name="num" /><br />
		<input type="submit" value="提交" /> &nbsp;&nbsp;<input type="submit" value="重填">
		<hr />
		
		num1:${param.num1 }<br />
		num2:${paramValues.num[0] }<br />
		num3:${paramValues.num[1] }<br />
	</form>
</body>
</html>

在这里插入图片描述
当我们在上面一个表中输入20,30,1000时,提交后会在浏览器中显示出来,这是因为paramValues对象获取了同一个请求参数num的两个值,分别为30,和1000:
在这里插入图片描述
cookie对象
该对象是一个代表所有Cookie信息的Map集合,Map集合中的元素的键为各个Cookie的名称值为对应的Cookie对象具体示例如下:

获取cookie对象的信息:${cookie.userName}
获取cookie对象的名称:${cookie.userName.name}
获取cookie.对象的值:${cookie.userName.value}

下面我们进行实例演示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		response.addCookie(new Cookie("username","dashujuhuaong"));
		%>
		获取cookie对象:${cookie.username }<br />
		${cookie.username.name }<br />
		${cookie.username.value }<br />

</body>
</html>

演示结果:
在这里插入图片描述
由于浏览器第一次访问cookie.jsp页面,此时服务器还没有接收到名为userName的Cookie信息因此不会显示,当你刷新界面后才会显示如上图结果,由此可以看出,浏览器窗口中显示了获取到Cookie信息这是因为第一次访问服务器时,服务器会向浏览器回写一个Cookie,此时的Cookie信息是存储在浏览器中的,当刷新浏览器后由于浏览器中已经存储了名为userName的Cookie信息,当再次访问相同资源时,浏览器会将此Cookie信息一同发送给服务器这时使用表达式便可以获取Cookie的名称和值;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值