JavaEE(8)——EL表达式

版权声明:[email protected] https://blog.csdn.net/zhaoxuyang1997/article/details/82942648

实验8 EL表达式
一、实验目的

  1. 了解表达式语言在项目开发中的作用;
  2. 重点掌握表达式语言的使用。
    二、实验原理
    表达式语言(EL)是JSP 2.0新增的功能。它是一种简洁的数据访问语言,通过它可以在JSP页面中方便地访问应用程序数据,无需使用JSP表达式(<%=和%>)以避免出现JSP脚本。EL的目标是使动态网页的设计、开发和维护更加容易。
    EL的特点是访问数据可以使用点(.)运算符或方括号([])运算符;可以访问隐含对象;有自己的运算符构造表达式;可以使用Java语言编写的函数等。
      命名变量不是局部变量或者实例变量,它是存放在特定范围内的属性,命名变量的名字和属性名字对应。
      如果范围内不存在username属性,那么不会打印任何结果。
    如:
    ${username}
    等同于:
    <%
    String username = (String)pageContext.findAttribute(“username”);
    If(username!=null){
    %>
    <%=username%>
    <% } %>
    1、EL常用方式
    作用域 Java代码 EL的写法
    页面域 pageContext.getAttribute(“color”); ${pageScope.color}
    请求域 request.getAttribute(“color”); ${requestScope.color}
    会话域 session.getAttribute(“color”); ${sessionScope.color}
    上下文域 application.getAttribute(“color”); ${applicationScope.color}
    自动查找 pageContext.findAttribute(“color”); ${color}
    指定域获取数据,方式如下表所示。
    表8-1域获取数据方式

EL中11个隐式对象如表8-2所示。
隐含对象名称 描述
pageContext 代表页面上下文对象,可以在页面上调用get方法
pageScope 代表页面域中的Map对象
requestScope 代表请求域中的Map对象
sessionScope 代表会话域中的Map对象
applicationScopeScope 代表上下文域中的Map对象
param 得到表单提交参数,功能与:request.getParameter()相同
paramValues 得到表单提交参数,功能与:String[] request.getParameterValues()相同
header 得到请求头的数据 request.getHeader(“名字”)
headerValues 得到请求头的数据 request.getHeaders(“名字”)
cookie 得到请求的Cookie信息
initParam 相当于config.getInitParamter()得到web.xml中配置的参数
表8-2隐含对象表

pageContext调用get的方法如表8-3所示。
表8-3
作用 JSP表达式 EL的写法
当前工程路径 <%=request.getContextPath() %> ${pageContext.request.contextPath}
请求资源路径 <%=request.getContextURL() %> ${pageContext.request.contextURL}
访问者的IP <%=request.getRemoteAddr() %> ${pageContext.request.remoteAddr}
当前会话的ID <%=request.getSession().getId() %> ${pageContext.request.session.id}

2、得到Cookie中的值 
先通过EL得到指定cookie的对象,再通过name和value得到具体的名字和值 
<%
Cookie c = new Cookie(“man”,“jack”); 
response.addCookie©; 
%> 
读取Cookie: 
名字:cookie.man.name<值:{cookie.man.value } <%– 调用 cookie.getValue() –%> 
3、EL表达式中[]和.的区别
如果一个变量名中有特殊的字符,则应用使用[“名字”];
比如获取header中host属性,一共有两种写法:
header[“host”]{header.host }
若获取user-agent属性,只能使用中括号
h e a d e r [ &quot; u s e r a g e n t &quot; ]     4 E L 1 J a v a B e a n   &lt; / / S t u d e n t s t u = n e w S t u d e n t ( &quot; &quot; , 20 ) ; s t u . s e t M a l e ( t r u e ) ; / / p a g e C o n t e x t . s e t A t t r i b u t e ( &quot; a &quot; , s t u ) ; {header[&quot;user-agent&quot;]}   4、EL表达式获取不同类型的数据 (1)获取JavaBean的属性值  &lt;% //创建一个对象 Student stu = new Student(&quot;张三&quot;, 20); stu.setMale(true); //把对象放到域 pageContext.setAttribute(&quot;a&quot;, stu); %&gt; 姓名: {a.name} 年龄: a . a g e {a.age} 性别: {a.male}
(2)获取数组中的值 
<%
String[] arr = {“aaa”,“bbb”,“cccc”};
pageContext.setAttribute(“arr”, arr);
%>
取数组中的元素:
${arr[0]} ${arr[1]} ${arr[2]}
(3)获取Map中的值 
<%
map.put(“n1”,“猪八戒”);
map.put(“n2”,“唐僧”);
map.put(“n3”,“孙悟空”);
//放在请求域中
request.setAttribute(“map”, map);
%>
${map.n1}
${map[“n2”]}
${map.n3}
(4)输出List中指定索引位置的元素 
<%
List book = new ArrayList();
book.add(“水浒传”);
book.add(“西游记”);
book.add(“红楼梦”);
session.setAttribute(“books”, book);
%>
${books[0] }
${books[1] }
${books[2] }

三、实验任务与步骤
(一)表达式语言运算符的基本语法的应用。

  1. 实验任务:编写SP页面ELTest.jsp演示EL运算符的使用。
  2. 实验步骤
    (1)编写一个页面ELTest.jsp。
    ELTest.jsp参考代码如下:
    <%@ page contentType=“text/html;charset=UTF-8”%>
JSP ELTest

JSP 2.0 表达式语言 - 基本算术运算符


该例说明了基本的表达式语言的算术运算符的使用,其中包括加(+),减(-), 乘(*),除(/ 或 div), 取余 (% 或 mod)。
EL 表达式 结果
\${1} ${1}
\${1 + 2} ${1 + 2}
\${1.2 + 2.3} ${1.2 + 2.3}
\${1.2E4 + 1.4} ${1.2E4 + 1.4}
\${-4 - 2} ${-4 - 2}
\${21 * 2} ${21 * 2}
\${3/4} ${3/4}
\${3 div 4} ${3 div 4}
\${3/0} ${3/0}
\${10%4} ${10%4}
\${10 mod 4} ${10 mod 4}
\${(1==2) ? 3 : 4} ${(1==2) ? 3 : 4}
(3)在浏览器地址栏输入如下URL:http://localhost:8080 /prac06_EL/ELTest.jsp,弹出如图8-1所示界面。

图8-1
(二)通过EL表达式访问作用域变量

  1. 实验任务:编写EmployeeBean.java、input.jsp、EmployeeServlet.java、displayEmployee.jsp,在input.jsp页面的表单中填写数据,提交给Servlet将参数保存到EmployeeBean的对象中,并将对象存入请求的域中,再请求转发给displayEmployee.jsp页面,在页面中用EL表达式显示。
  2. 实验步骤
    【步骤1】编写JavaBean(EmployeeBean.java)代码,EmployeeBean.java参考代码如下:
    package beans;

public class EmployeeBean {
private String eno = “”;
private String ename = “”;
private String gender = “”;
private String hobbs = null;

public String getGender() {
return gender;
}

public void setGender(String gender) {
this.gender = gender;
}

public String getHobbs() {
return hobbs;
}

public void setHobbs(String hobbs) {
this.hobbs = hobbs;
}
private String ecompany = “”;

public EmployeeBean() {
}

public void setEno(String eno){
this.eno = eno;
}
public void setEname(String ename){
this.ename = ename;
}
public void setEcompany(String ecompany){
this.ecompany = ecompany;
}
public String getEno(){
return eno;
}
public String getEname(){
return ename;
}
public String getEcompany(){
return ecompany;
}
}
【步骤2】编写一个JSP页面:input.jsp,在其中通过表单输入雇员信息,将请求转发到一个Servlet。
<%@ page contentType=“text/html;charset=UTF-8”%>

请输入雇员信息:
雇员号:
雇员名:
性   别: 男 女
爱   好: 音乐 体育 美术
公司名:
【步骤3】编写Servlet(EmployeeServlet.java),该Servlet从input.jsp页面得到客户信息。 package servlet;

import java.io.;
import javax.servlet.
;
import javax.servlet.http.*;
import beans.EmployeeBean;

public class EmployeeServlet extends HttpServlet{
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException{
request.setCharacterEncoding(“UTF-8”);
String eno = request.getParameter(“eno”);
String ename = request.getParameter(“ename”);
String gender = request.getParameter(“gender”);
String ecompany = request.getParameter(“ecompany”);
String[] hobbs = request.getParameterValues(“hobbs”);
EmployeeBean employee = new EmployeeBean();
employee.setEno(eno);
employee.setEname(ename);
employee.setGender(gender);
StringBuilder builder = new StringBuilder();
for(String str:hobbs){
builder.append(str).append(",");
}
employee.setHobbs(builder.toString());
employee.setEcompany(ecompany);

  request.setAttribute("employee", employee);
  RequestDispatcher view =
       request.getRequestDispatcher("/displayEmployee.jsp");
  view.forward(request, response);

}
}
web.xml参考代码如下:

<?xml version="1.0" encoding="UTF-8"?>



employee
servlet.EmployeeServlet

employee /EmployeeServlet

【步骤4】编写displayEmployee.jsp页面,使用EL表达式显示用户的信息
<%@ page contentType=“text/html;charset=UTF-8”%>

雇员的信息如下(EL表达式显示与中的值):
  • 雇员号:${employee.eno}
  • 雇员名:${employee.ename}
  • 性 别:${employee.gender}
  • 爱 好:${employee.hobbs}
  • 公司名:${employee.ecompany}
雇员的信息如下(通过param显示参数中的):
  • 雇员号:${param.eno}
  • 雇员名:${param.ename}
  • 性 别:${param.gender}
  • 爱 好:${param.hobbs}
  • 公司名:${param.ecompany}
【步骤5】在浏览器地址栏输入URL:http://localhost:8080/prac06_EL_param_attrib/input.jsp,结果如图8-2左图所示,在表单中输入相关内容,单击提交弹出如图8-2右图所示界面。

图8-2
(三)编写一个简单的投票系统,用EL表达式显示投票结果

  1. 实验任务:编写votet.jsp、VoteServlet.java、voteResult.jsp,在votet.jsp页面选择所投项目,然后提交到VoteServlet.java,在VoteServlet.java中对投票结果进行统计然后到voteResult.jsp页面用EL表达式进行显示。
  2. 实验步骤
    【步骤1】编写相关代码。
    VoteServlet.java参考代码如下:
    package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class VoteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding(“UTF-8”); //设置请求编码方式
String item=request.getParameter(“item”); //获取投票项
//下面是获取ServletContext对象,该对象在application范围有效
ServletContext servletContext=request.getSession().getServletContext();
Map map=null;
if(servletContext.getAttribute(“voteResult”)!=null){
map=(Map)servletContext.getAttribute(“voteResult”); //获取投票结果
map.put(item,Integer.parseInt(map.get(item).toString())+1); //当前投票结果加1
}else{ //初始化一个保存投票信息的Map集合,并将选定投票项的投票结果加1,其它为0
// String[] arr={“基础教程类”,“实例教程类”,“经验技巧类”,“速查手册类”,“案例剖析类”};
String[] arr={“a”,“b”,“c”,“d”,“e”};
map=new HashMap();
for(int i=0;i<arr.length;i++){
if(item.equals(arr[i])){ //判断是否为选定的投票类
map.put(arr[i], 1);
}else{
map.put(arr[i], 0);
}
}
}
servletContext.setAttribute(“voteResult”, map); //保存投票结果到ServletContext对象中
//设置相应类型和编码方式,如果不设置弹出对话框会乱码
response.setContentType(“text/html;charset=UTF-8”);
PrintWriter out=response.getWriter();
out.println(“”);
}
}
在WebRoot下新建文件夹vote,在vote下建立vote.jsp和voteResult.jsp文件
vote.jsp参考代码如下:
<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>

应用EL表达式显示投票结果

您最需要哪方面的图书?

  • 基础教程类
  • 实例教程类
  • 经验技巧类
  • 速查手册类
  • 案例剖析类
  •  

voteResult.jsp参考代码如下:
<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>

显示投票结果页面

您最需要哪方面的图书?

  • 基础教程类:  ${null==applicationScope.voteResult.a?0:applicationScope.voteResult.a}
  • 实例集锦类:  ${null==applicationScope.voteResult.b?0:applicationScope.voteResult.b}
  • 经验技巧类:  ${null==applicationScope.voteResult.c?0:applicationScope.voteResult.c}
  • 速查手册类:  ${null==applicationScope.voteResult.d?0:applicationScope.voteResult.d}
  • 案例剖析类:  ${null==applicationScope.voteResult.e?0:applicationScope.voteResult.e}
  • 共有:${applicationScope.voteResult.a+applicationScope.voteResult.b+ applicationScope.voteResult.c+applicationScope.voteResult.d+ applicationScope.voteResult.e}人投票!
【步骤2】在浏览器地址栏输入URL:http://localhost:8080/prac06_EL_vote/vote/vote.jsp,结果如图8-3左图所示,选择后单击提交,弹出如图8-3右图所示界面。

图8-3
四、思考题

  1. 理解${2+3}与"2+3"的区别
  2. e m p t y E L E L 1 E L J S P w e b j a v a ( w e b 访 J a v a B e a n 访 l i s t 访 m a p 访 ) 2 E L J S P J S P {empty 变量名}含义? 五、实验总结 通过本次实习,主要掌握EL作用,EL的主要作用如下: 1、获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问JavaBean的属性、访问list集合、访问map集合、访问数组); 2、执行运算 利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。 {user==null}
    3、获取web开发常用对象 EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

猜你喜欢

转载自blog.csdn.net/zhaoxuyang1997/article/details/82942648
今日推荐