JavaWeb学习笔记--4.EL表达式
转自ZHSJUN的博客 http://blog.csdn.net/zhsjun/article/details/2254546
表达式语言(EL) 是JSP的一种计算和输出Java对象的简单语言,它简化了对JSP中对象的输出。
4.1 EL语法
${expression}
这被称作EL元素,一个EL元素必须以${开始,以}结束,EL可以出现在HTML标记中,也可以出现在JSP的标记中
4.2 变量范围
EL对变量操作,必须保证操作的变量在一定范围内,其对范围的搜索顺序:页内-request-session-application,分别对应了EL的内置对象pageScope,requestScope,sessionScope,applicationScope,如下语句:
${userName},该语句在输出时首先去pageContext范围中找,没找到再去request,还没找到就去session,最后去application,只要有任何一个范围找到,即停止查找,并输出变量值
${sessionScope.UserName},在session中查找变量UserName
4.3 访问运算.和[ ]
这两个符号可以通用,唯一的区别是当变量名中含有-这样的特殊字符时,即采用[ ]访问符号,如下:
${student.name}和${student["name"]}等效
这两个运算符号可以混合使用,比如:
${requestScope.cart[0].pname}
4. EL中的内置对象:
pageContext param paramValues用 header headerValues cookie initParam pageScope requestScope sessionScope applicationScope |
jsp页面上下文对象 页面所有参数的名字和值对,比如表单form,查询串QueryString等,是一个Map 单个名字对应多个值时使用,是一个Map 单个头header的值对,是一个Map 单个键多个值时使用,是一个Map 代表了Cookie对象,是一个Map 系统Servlet初始化参数,是一个Map 页面范围,是一个Map 请求范围,是一个Map 会话范围,是一个Map 应用范围,是一个Map |
例:
获取QueryString中的参数并输出: ${param.id}
获取表单数据并输出: ${param.username}
获取header: ${header["user-agent"]}
获取cookie: ${cookie["UserInfo"].name}=${cookie["UserInfo"].value}
示例代码:使用内置对象:
与输入有关的内置对象:param paramValues
UserForm.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <html> <head> <title>接收用户参数</title> </head> <body> <%request.setCharacterEncoding("gb2312"); %> 用户名:${param.username}</br> 密码:${param.password}</br> 爱好:${paramValues.interest[0]} ${paramValues.interest[1]} ${paramValues.interest[2]} </br> </body> </html>
注意:上面body中的代码和这个的功能是一样的:
<% String username = request.getParameter("username"); String password = request.getParameter("password"); String[] interests = request.getParameterValues("interest"); out.println("姓名:"+username+"</br>"); out.println("密码:"+password+"</br>"); out.println("爱好:"); for(int i = 0 ; i < interests.length ; i++) out.println(interests[i]); %>
ParamDemo.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <html> <head> <title>用户表单</title> </head> <body> <form action="UserForm.jsp" method="post"> 用户名:<input type="text" name="username"/></br> 密码:<input type="password" name="password"/></br> 爱好:<input type="checkbox" name="interest" value="篮球"/>篮球 <input type="checkbox" name="interest" value="看书"/>看书 <input type="checkbox" name="interest" value="编程"/>编程</br> <input type="submit" value="提交"> </form> </body> </html>
页面效果:
------------------------------------------------------------------------------------------------------------------
示例代码:cookie内置对象
<% Cookie c = new Cookie("username","root"); response.addCookie(c); %> cookie中username的值为:${cookie.username.value}
示例代码:header内置对象
存数用户浏览器和服务器用来沟通的数据,通过header headerValues来取得这些值
${header["host"]}</br> ${header["user-agent"] }</br>
示例代码:initParam内置对象
可以取得在web站点中设置的环境参数context值。
username参数值:${initParam.username}
同时在web.xml中添加
<context-param> <param-name>username</param-name> <param-value>James</param-value> </context-param>
------------------------------------------------------------------------------------------------------------------
示例代码:pageContext内置对象
<body> <table border="1"> <tr> <td>取得请求的参数字符串</td> <td>${pageContext.request.queryString}</td> </tr> <tr> <td>取得请求URL</td> <td>${pageContext.request.requestURL}</td> </tr> <tr> <td>取得web应用名称</td> <td>${pageContext.request.contextPath}</td> </tr> <tr> <td>取得HTTP请求方式</td> <td>${pageContext.request.method}</td> </tr> <tr> <td>取得使用的协议</td> <td>${pageContext.request.protocol}</td> </tr> <tr> <td>取得用户IP地址</td> <td>${pageContext.request.remoteAddr}</td> </tr> <tr> <td>取得session ID</td> <td>${pageContext.session.id}</td> </tr> </table> </body>
效果:
取得请求的参数字符串 | |
取得请求URL | http://localhost:8088/JSPTest7ELlanguage/inner/OtherInner.jsp |
取得web应用名称 | /JSPTest7ELlanguage |
取得HTTP请求方式 | GET |
取得使用的协议 | HTTP/1.1 |
取得用户IP地址 | 127.0.0.1 |
取得session ID | 4B8F4FDD253B24D9DAE9E6D29B7209C0 |
------------------------------------------------------------------------------------------------------------------
示例代码:使用存取器读取JavaBean中的数据
Student.java
package com.jsp; public class Student { private long classno; private String name; private int age; private boolean sex; private String major; public Student(){ } public long getClassno() { return classno; } public void setClassno(long classno) { this.classno = classno; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isSex() { return sex; } public void setSex(boolean sex) { this.sex = sex; } public String getMajor() { return major; } public void setMajor(String major) { this.major = major; } }
input.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <html> <head> <title>Param HTML</title> </head> <body> <form action ="param.jsp"> 姓名:<input type = "text" name ="Username"><br> 年龄:<input type = "text" name = "age"><br> 专业:<input type = "text" name = "major"><br> <input type ="submit" value="提交"> </form> </body> </html>
param.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%request.setCharacterEncoding("gb2312");%> <html> <head> <title>利用请求参数设置JavaBean属性</title> </head> <body bgcolor="#ffffff"> <jsp:useBean id = "student2" scope="page" class="com.jsp.Student"/> <jsp:setProperty name="student2" property="name" param="Username"/> <!-- 注意第三个参数名为param,因为上一个页面传过来的为参数 如果为valule="Username" 那么名字就会被设置为"Username"而不是参数值 --> <jsp:setProperty name="student2" property="age" param="age"/> <jsp:setProperty name="student2" property="major" param="major"/> <!-- 将student2信息保存在session中,属性名为MyStudent2. 在下面表格的第四列获取这里面的信息 --> <%session.setAttribute("MyStudent2",student2);%> <table> <tr> <td>姓名</td> <td><jsp:getProperty name = "student2" property="name"/></td> <td><%out.println(student2.getName()); %></td> <td>${student2.name }</td> <!-- 使用EL表达式读取属性值 --> <td>${sessionScope.MyStudent2.name }</td> <!-- 使用EL表达式从session中读取 --> </tr> <tr> <td>年龄</td> <td><jsp:getProperty name = "student2" property="age"/></td> <td><%out.println(student2.getAge()); %></td> <td>${student2.age }</td> <!-- 使用EL表达式 --> <td>${sessionScope.MyStudent2.age }</td> <!-- 使用EL表达式从session中读取 --> </tr> <tr> <td>专业</td> <td><jsp:getProperty name = "student2" property="major"/></td> <td><%out.println(student2.getMajor()); %></td> <td>${student2.major }</td> <!-- 使用EL表达式 --> <td>${sessionScope.MyStudent2.major }</td> <!-- 使用EL表达式从session中读取 --> </tr> </table> </body> </html>
页面效果:
input.jsp | param.jsp |
注意,param.jsp中的四列采用了4种方法获取JavaBean中的属性后两种使用了EL表达式。详见上面的代码。
------------------------------------------------------------------------------------------------------------------
示例代码:使用存取器读取Map中的数据
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <%@ page contentType = "text/html;charset=GB2312" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <% String name ="lee"; HashMap<String,String> values = new HashMap<String,String>(); values.put("money", "银行降低基准利率"); values.put("热点", "国际空间站建成"); values.put("体育", "国足挺进亚洲杯8强"); String newColor = "blue"; request.setAttribute("news", values); request.setAttribute("color", newColor); %> <html> <head> <title>EL表达式的存取符和隐式对象</title> </head> <body> <h1>Hello ${param.name}! </h1> <font color="${requestScope.color}"> <h3> 财经:${requestScope.news.money}<br> 热点:${requestScope.news.热点}<br> 体育:${requestScope.news["体育"]}<br> </h3> </font> </body> </html>
页面效果