expression Language 表达式语言,常用于取值
我们之前在JSP中写java代码必须写在<%%>里面。并且取值代码比较繁琐。
而EL表达式可以使我们的取值代码更加简洁
语法非常简单:${}
MyServlet用于存储用户名和密码
import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet(name = "MyServlet",urlPatterns="/MyServlet")
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("username", "itcast");
request.setAttribute("password", "123");
RequestDispatcher dispatcher = request
.getRequestDispatcher("/myjsp.jsp");
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
web目录下编写一个名称为myjsp的JSP文件,比较Java代码和EL的区别:
<%@ page language="java" contentType="text/html; charset=utf-8" %>
用户名:<%=request.getAttribute("username")%>
密 码:<%=request.getAttribute("password")%>
使用EL:
用户名:${username}
密 码:${password}
使用EL表达式则可以减少很多取值的代码,接 ${username} 。这些值是从哪取的呢,实际上就是从四大作用域中获取的。servlet中的四个作用域分别为 page,request,session,application
2、EL隐式对象| 隐式对象名称 | 描 述 |
| pageContext | 对应于JSP页面中的pageContext对象, |
| pageScope | 代表page域中用于保存属性的Map对象 |
| requestScope | 代表request域中用于保存属性的Map对象 |
| sessionScope | 代表session域中用于保存属性的Map对象 |
| applicationScope | 代表application域中用于保存属性的Map对象 |
| param | 表示一个保存了所有请求参数的Map对象 |
| paramValues | 表示一个保存了所有请求参数的Map对象,它对于某个请求参数, 返回的是一个String类型数组 |
| header | 表示一个保存了所有http请求头字段的Map对象 |
| headerValues | 表示一个保存了所有http请求头字段的Map对象,返回String类型数组 |
| cookie | 用于获取使用者的cookie值,cookie的类型是Map |
| initParam | 表示一个保存了所有Web应用初始化参数的Map对象 |
在上表列举的隐式对象中,pageContext可以获取其他10个隐式对象,pageScope、requestScope、sessionScope、applicationScope是用于获取指定域的隐式对象;param和paramValues是用于获取请求参数的隐式对象,header和headerValues是用于获取HTTP请求消息头的隐式对象;cookie是用于获取cookie信息的隐式对象;initParam是用于获取Web应用初始化信息的隐式对象。
2.1 pageContextweb目录下创建一个名为pageContext.jsp的文件演示pageContext隐式对象的具体用法:
<%@ page language="java" contentType="text/html; charset=utf-8"%>
请求URI为:${pageContext.request.requestURI}
Content-Type响应头:${pageContext.response.contentType}
服务器信息为:${pageContext.servletContext.serverInfo}
Servlet注册名为:${pageContext.servletConfig.servletName}
需要注意的是,不要将EL中的隐式对象与JSP中的隐式对象混淆,只有pageContext对象是它们所共有的,其他隐式对象则毫不相关。
2.2 Web域相关对象EL中提供了4 个用于访问作用域范围的隐式对象,即pageScope、requestScope、 sessionScope和applicationScope。默认作用域从小到大:page->request->session->application。
应用这4个隐式对象指定所要查找的标识符的作用域后,系统将不再按照默认的顺序(page、Request、session及application)查找相应的标识符。它们与JSP中的page、request、session及application内置对象类似,只不过这4个隐式对象只能用于获取指定范围内的属性值,而不能获取其他相关信息。
${pageScope.userName}
${requestScope.userName}
${sessionScope.userName}
${applicationScope.userName}
/ *pageScope、requestScope、 sessionScope和applicationScope4个隐式对象都可以通过setAttribute()方法存储属性,通过getAttribute()方法获取属性。 */
示例:web目录下,新建一个名为scopes.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
<% pageContext.setAttribute("userName", "itcast"); %>
<% request.setAttribute("bookName", "Java Web"); %>
<% session.setAttribute("userName", "itheima"); %>
<% application.setAttribute("bookName", "Java 基础"); %>
表达式${pageScope.userName}的值为:${pageScope.userName}
表达式${requestScope.bookName}的值为:${requestScope.bookName}
表达式${sessionScope.userName}的值为:${sessionScope.userName}
表达式${applicationScope.bookName}的值为:${applicationScope.bookName}
表达式${userName}的值为:${userName}


