部分文章内容为公开资料查询整理,原文出处可能未标注,如有侵权,请联系我,谢谢。邮箱地址:gnivor@163.com ►►►需要气球么?请点击我吧!

JavaWeb学习笔记--4.EL表达式

四. 表达式语言(相当于对JSP中对象输出的简化,功能实质上类似)

转自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;
    }
}
View Code

 

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>

  页面效果

posted @ 2015-03-18 22:12  流了个火  阅读(241)  评论(0编辑  收藏  举报
►►►需要气球么?请点击我吧!►►►
View My Stats