Java Web(day09) —— EL表达式和JSTL(1)

一、JavaBean

JavaBean简介

JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁。JSP搭配JavaBean来使用,有以下的优点:

1.可将HTML和Java代码分离,这主要是为了日后维护的方便。如果把所有的程序代码(HTML和Java)写到JSP页面中,会使整个程序代码又多又复杂,造成日后维护上的困难。

2.可利用JavaBean的优点。将日常用到的程序写成JavaBean组件,当在JSP要使用时,只要调用JavaBean组件来执行用户所要的功能,不用再重复写相同的程序,这样以来也可以节省开发所需的时间。

JavaBean开发要求

1.JavaBean本身就是一个类,属于Java的面向对象编程。

2.在JSP中如果要应用JSP提供的Javabean的标签来操作简单类的话,则此类必须满足如下的开发要求:

(1)所有的类必须放在一个包中,在WEB中没有包的是不存在的;

(2)所有的类必须声明为public class,这样才能够被外部所访问;

(3)类中所有的属性都必须封装,即:使用private声明;

(4)封装的属性如果需要被外部所操作,则必须编写对应的setter、getter方法;

(5)一个JavaBean中至少存在一个无参构造方法,此为JSP中的标签所使用。

第一个简单JavaBean

package blog.csdn.joywy;  
public class SimpleBean{  
    private String name;  
    private int age;  
    public void setName(String name){  
        this.name = name;  
    }  
    public void setAge(int age){  
        this.age = age;  
    }  
    public String getName(){  
        return this.name;  
    }  
    public int getAge(){  
        return this.age;  
    }  
}  

如果在一个类中只包含属性、setter、getter方法,那么这种类就成为简单JavaBean。

对于简单的JavaBean也有几个名词:

(1)VO:与简单Java对象对应,专门用于传递值的操作上

(2)POJO:简单Java对象

(3)TO:传输对象,进行远程传输时,对象所在的类必须实现java.io.Serializable接口

二、EL表达式

EL表达式简介
  EL 全名为Expression Language。EL主要作用:

1、获取数据
  EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)使用EL表达式获取数据语法:"${标识符}"
  EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,不是null,而是空字符串)。
  EL表达式可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据

2、执行运算
  利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。 ${user==null}

语法:${运算表达式},EL表达式支持如下运算符:

(1)关系运算符
在这里插入图片描述
(2)逻辑运算符:
在这里插入图片描述
(3)empty运算符:检查对象是否为null(空)

(4)二元表达式:${user!=null?user.name :""}

(5)[ ] 和 . 号运算符

3、获取web开发常用对象
    EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
    EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。
  语法:${隐式对象名称}:获得对象的引用
  在这里插入图片描述

4、调用Java方法
   EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
   EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。语法:${prefix:method(params)}
  在EL表达式中调用的只能是Java类的静态方法,这个Java类的静态方法需要在TLD文件中描述,才可以被EL表达式调用。
  EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。

三、EL隐式对象

EL表达式中定义了11个隐式对象,使用这些隐式对象可以很方便地读取到Cookie、HTTP请求消息头字段、请求参数、
Web应用程序中的初始化参数的信息,EL表达式中的隐式对象具体如下:
在这里插入图片描述

1、pageContext对象

EL表达式中的pageContext隐式对象与JSP页面中的pageContext对象相对应,EL表达式可以通过pageContext隐式对象访问其它JSP隐式对象,如访问request、response对象属性时,可以使用表达式${pageContext.request.requestURI}

表达式${pageContext.response.contentType}等。

2、代表特定域属性的隐式对象(共4个)

 EL表达式中的pageScope、requestScope、sessionScope和applicationScope四个隐式对象分别用于访问JSP页面的page、request、session、application四个域中的属性。例如,表达式${pageScope.userName}返回page作用域中的userName属性的值,表达式${sessionScope.bookName}返回session作用域中的bookName属性的值。
 在EL表达式中也可以不使用这些隐式对象来指定查找域,而是直接引用这些域中的属性名称。例如,表达式${userName}就会在page、request、session、application这四个作用域内按顺序依次查找userName属性,直到找到为止。

3、代表请求参数的隐式对象(2个)

EL表达式中的隐式对象param和paramValues用于获取客户端访问JSP页面时传递的请求参数的值,由于HTTP协议允许使用一个请求参数名出现多次,即一个请求参数可能会有多个值,所以,EL表达式提供了param和paramValues这两个隐式对象来分别获取请求参数的某个值和所有值。
 Param隐式对象用于返回一个请求参数的某个值,如果同一个请求参数有多个值,则返回第一个参数的值。paramValues隐式对象用于返回一个请求参数的所有值,返回结果为该参数的所有值组成的字符串数组,例如表达式${paramValues.username[0]}用于返回数组中第一个元素的值。

4、代表HTTP请求消息的隐式对象(2个)

 EL表达式中的隐式对象header和headerValues用于获取客户端访问JSP页面时传递的请求头字段的值。由于HTTP协议允许一些请求头字段出现多次,即一个请求头字段可能会有多个值,所以,EL表达式提供了header和headerValues两个隐式对象分别用于获取请求头字段的某个值和所有值。
 header隐式对象返回一个请求头字段的某个值,如果同一个请求头字段有多个值,则返回第一个值,例如,使用表达式${header.referer}可以非常方便的获取referer请求头字段的值。headerValues隐式对象用于返回一个请求头字段所有值组成的字符串数组。

5、cookie隐式对象

  EL表达式中的隐式对象cookie是一个代表所有Cookie信息的Map集合,Map集合中元素的关键字为各个Cookie的名称,值则为对应的Cookie对象。使用cookie隐式对象可以访问某个Cookie对象,这些Cookie对象则是通过调用HTTPServletRequest.getCookies()方法得到的,如果多个Cookie共用一个名称,则返回Cookie对象数组中的第一个Cookie对象。例如,要访问一个名为userName的Cookie对象,可以使用表达式${cookie.userName}。

6、initParam隐式对象

EL表达式中的initParam是一个代表Web应用程序中的所有初始化参数的Map对象,每个初始化参数的值是ServletContext.getInitParameter(String name)方法返回的字符串。Web应用程序的初始化参数可以通过两种方式来配置,分别是在server.xml文件中配置和在web.xml文件中配置,具体如下:
   (1)在server.xml文件中配置Web应用程序的初始化参数:
   (2)在web.xml文件中配置Web应用程序的初始化参数:

部分案例代码:

package cn.itcast.chapter07.beanutils;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;

import cn.itcast.chapter07.servlet.Person;

public class BeanUtilsDemo {
      public static void main(String[] args) throws Exception{
    	  Person p=new Person();
    	  
    	  Map<String,Object> map=new HashMap<String,Object>();
    	  map.put("name","2005");
    	  map.put("age",2);
    	  BeanUtils.populate(p, map);
    	   String name=BeanUtils.getProperty(p,"name");
    	   int age=Integer.parseInt(BeanUtils.getProperty(p, "age"));
    	    System.out.print(name);
    	    System.out.print(age);
      }
}

<%@ 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>
${empty person}<br/>
${empty user }<br/>
-------------------------------------------------<br/>
       1>3吗? ${1>3 } <br>
-------------------------------------------------<br/> 
       1+3=${1+3 }<br/>
-------------------------------------------------<br/>
       ${user.my-name}<br/>
       ${user["my-name"]}<br/>
-------------------------------------------------<br/>
       ${person.name }<br/>
-------------------------------------------------<br/>
      <%= (String) request.getAttribute("username") %><br/>
      <%= (String) request.getAttribute("password") %><br/>   
-------------------------------------------------<br/>
-------${username }---------<br/>
      ${password }<br/>         
</body>
</html>

```java
<%@ 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/>
  ${pageContext.request.contentType}<br/>
  ${pageContext.servletContext.servletContextName}<br/>
</body>
</html>

案例成果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值