EL表达式和JSTL(一)

一. 初始JavaBean

  在软件开发时,有些数据时经常要用到的,为了方便进行移植,Sun公司提出了一种JavaBean技术,使用JavaBean对这些数据进行封装,做到一次编写,到处开发。

  JavaBean是Java web程序的重要组成部分,是用Java语言编写的,遵循一定标准的类,它封装了数据和业务逻辑,供JSP或者Servlet调用,完成数据的封装和数据处理

1.什么是JavaBean

  是一个遵循特定写法的Java类:

    (1).它必须要有一个公共的,无参数的构造方法,这个可以是构造器自动默认产生的。

    (2).它提供公共的getter和setter方法,用于外部获取JavaBean的属性。

      (3).属性必须私有化。

    (4).在JavaBean中,需要对每个属性提供两个公共的方法,假设JavaBean中的一个属性为xxx,那么这个属性的公共方法就为:

        setXxx():用来设置属性xxx的值

        getXxx():用来得到属性Xxx的值。

    如下,是一个用户类的JavaBean:

public class UserBean implements java.io.Serializable{
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public UserBean(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }

2.在JSP中使用JavaBean

  在JSP中使用JavaBean,可以通过脚本代码直接访问JavaBean,也可以通过JSP的动作标签来访问JavaBean,采用后一种方法,可以减少JSP页面的程序代码,使它更接近于HTML代码。

  访问JavaBean的JSP动作标签有:

  <jsp:useBean id="name" class="className" scope="page|request"/>

    在指定的作用范围内,调用由class所指定类的无参构造函数创建对象实例,若该对象已存在,就不生成新的对象,而是直接使用该对象。

    id是指JavaBean实例的名字,而class是用来指定JavaBean的类的名,必须是完整的类名,包名也需要写进去,scope是用来指定该JavaBean的作用域,通常的指定域有四个:

      page:该JavaBean只在此页面有效。

      request:该JavaBean在此次的request中有效

      session:该JavaBean在整个会话中有效。

      application:该JavaBean在本应用中一直都有效。

  <jsp:setProperty id="name" proterty="propertyname" value=""/>

    name是确认需要设定的JavaBean的实例名,proterty是用来确定需要设置的属性名,value是用来设置属性值。

  <jsp:getProperty id="name" proterty="protertyname" />

    name属性用来确定需要输出的JavaBean的实例名,property属性确定需要输出的属性名,并把结果显示到页面上。

  实例:设计一个Web程序,计算两个整数的和值,并在网页上显示结果,要求:要在JavaBean中实现数据的求和操作,

  JavaBean页面:

package cn.it.gan.javaBeanAdd;
/**
 * 该JavaBean是获取两个整数的数值,并且在JavaBean中实现数据的求和操作
 * @author 12428
 *
 */
public class Add {
    private int num1;
    private int num2;
    private int add;
    
    public Add() {
        
    }
    public Add(int num1, int num2) {
        super();
        this.num1 = num1;
        this.num2 = num2;
    }
    
    public int getNum1() {
        return num1;
    }
    public void setNum1(int num1) {
        this.num1 = num1;
    }
    public int getNum2() {
        return num2;
    }
    public void setNum2(int num2) {
        this.num2 = num2;
    }
    
    //设置一个方法,用来求和,并返回求和值
    public int getAdd() {
        return num1+num2;
    }
}

  input.jsp页面:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>此页面接受两个参数</title>
</head>
<body>
 <form action="show.jsp" method="post">
    <table>
      <tr >获取两个整数的值</tr>
      <tr>
         <td>第一个整数的值:</td>
         <td><input type="text" name="num1"></td>
      </tr>
      <tr>
         <td>第二个整数的值:</td>
         <td><input type="text" name="num2"></td>
      </tr>
   </table>
   <input type="submit" value="提交"/>
 </form>
  
</body>
</html>

 show.jsp页面: 

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>显示和</title>
</head>
<jsp:useBean id="add1" class="cn.it.gan.javaBeanAdd.Add"></jsp:useBean>

<%--接受所有的参数给add1赋值,但要求参数是对应的类型,Java进行自动转换 --%>
<jsp:setProperty property="*" name="add1" />

<%=add1.getAdd()
%>
<body>

</body>
</html>

 

 jsp:setProperty一共有四种用法:

  <jsp:setProperty>标签用于设置和访问JavaBean对象的属性。 
    语法格式一:
      <jsp:setProperty name="beanName" property="propertyName" value="string字符串"/>

    语法格式二:
      <jsp:setProperty name="beanName" property="propertyName" value="<%= expression %>" />

    语法格式三:
      <jsp:setProperty name="beanName" property="propertyName" param="parameterName"/>

    语法格式四:
      <jsp:setProperty name="beanName" property= "*" />

      将所有的属性和请求参数关联,实现自动赋值并自动转换数据类型。

      

      name属性用于指定JavaBean对象的名称。 
      property属性用于指定JavaBean实例对象的属性名。
      value属性用于指定JavaBean对象的某个属性的值,value的值可以是字符串,也可以是表达式。为字符串时,该值会自动转化为JavaBean属性相应的类型,如果value的值是一个表达式,那么该表达式的计算结果必须与所要设置的JavaBean属性的类型一致。  
      param属性用于将JavaBean实例对象的某个属性值设置为一个请求参数值,该属性值同样会自动转换成要设置的JavaBean属性的类型。

 

<jsp:setProperty>标签使用范例1:使用jsp:setProperty标签设置person对象的属性值

复制代码
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%--
 3 在jsp中使用jsp:useBean标签来实例化一个Java类的对象
 4 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
 5     ┝<jsp:useBean>:表示在JSP中要使用JavaBean。
 6     ┝id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
 7     ┝class:此对象对应的包.类名称
 8     ┝scope:此javaBean的保存范围,四种范围:page、request、session、application
 9 --%>
10 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
11 
12 <%--
13 使用jsp:setProperty标签设置person对象的属性值
14 jsp:setProperty在设置对象的属性值时会自动把字符串转换成8种基本数据类型
15 但是jsp:setProperty对于复合数据类型无法自动转换
16 --%>
17 <jsp:setProperty property="name" name="person" value="白虎神皇"/>
18 <jsp:setProperty property="sex" name="person" value="男"/>
19 <jsp:setProperty property="age" name="person" value="24"/>
20 <jsp:setProperty property="married" name="person" value="false"/>
21 <%--
22 birthday属性是一个Date类型,这个属于复合数据类型,因此无法将字符串自动转换成Date ,用下面这种写法是会报错的
23 <jsp:setProperty property="birthday" name="person" value="1988-05-07"/>
24 --%>
25 <jsp:setProperty property="birthday" name="person" value="<%=new Date()%>"/>
26 <!DOCTYPE HTML>
27 <html>
28   <head>
29     <title>jsp:setProperty标签使用范例</title>
30   </head>
31   
32   <body>
33     <%--使用getXxx()方法获取对象的属性值 --%>
34     <h2>姓名:<%=person.getName()%></h2>
35     <h2>性别:<%=person.getSex()%></h2>
36     <h2>年龄:<%=person.getAge()%></h2>
37     <h2>已婚:<%=person.isMarried()%></h2>
38     <h2>出生日期:<%=person.getBirthday()%></h2>
39   </body>
40 </html>
复制代码

运行效果如下:

  

<jsp:setProperty>标签使用范例2:使用请求参数为bean的属性赋值

复制代码
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%--
 3 在jsp中使用jsp:useBean标签来实例化一个Java类的对象
 4 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
 5     ┝<jsp:useBean>:表示在JSP中要使用JavaBean。
 6     ┝id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
 7     ┝class:此对象对应的包.类名称
 8     ┝scope:此javaBean的保存范围,四种范围:page、request、session、application
 9 --%>
10 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
11 
12 <%--
13     jsp:setProperty标签可以使用请求参数为bean的属性赋值
14     param="param_name"用于接收参数名为param_name的参数值,然后将接收到的值赋给name属性
15 --%>
16 <jsp:setProperty property="name" name="person" param="param_name"/>
17 
18 <!DOCTYPE HTML>
19 <html>
20   <head>
21     <title>jsp:setProperty标签使用范例</title>
22   </head>
23   
24   <body>
25       <%--使用getXxx()方法获取对象的属性值 --%>
26        <h2>姓名:<%=person.getName()%></h2>
27   </body>
28 </html>
复制代码

运行结果如下:

  

<jsp:setProperty>标签使用范例3:用所有的请求参数为bean的属性赋值

复制代码
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%--
 3 在jsp中使用jsp:useBean标签来实例化一个Java类的对象
 4 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
 5     ┝<jsp:useBean>:表示在JSP中要使用JavaBean。
 6     ┝id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
 7     ┝class:此对象对应的包.类名称
 8     ┝scope:此javaBean的保存范围,四种范围:page、request、session、application
 9 --%>
10 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
11 
12 <%--
13     jsp:setProperty标签用所有的请求参数为bean的属性赋值
14     property="*"代表bean的所有属性
15 --%>
16 <jsp:setProperty property="*" name="person"/>
17 
18 <!DOCTYPE HTML>
19 <html>
20   <head>
21     <title>jsp:setProperty标签使用范例</title>
22   </head>
23   
24   <body>
25     <%--使用getXxx()方法获取对象的属性值 --%>
26     <h2>姓名:<%=person.getName()%></h2>
27     <h2>性别:<%=person.getSex()%></h2>
28     <h2>年龄:<%=person.getAge()%></h2>
29   </body>
30 </html>
复制代码

运行结果如下所示:

  

<jsp:getProperty>标签

  <jsp:getProperty>标签用于读取JavaBean对象的属性,也就是调用JavaBean对象的getter方法,然后将读取的属性值转换成字符串后插入进输出的响应正文中
  语法:
      <jsp:getProperty name="beanInstanceName" property="PropertyName" />
    name属性用于指定JavaBean实例对象的名称,其值应与<jsp:useBean>标签的id属性值相同。 
    property属性用于指定JavaBean实例对象的属性名。
  如果一个JavaBean实例对象的某个属性的值为null,那么,使用<jsp:getProperty>标签输出该属性的结果将是一个内容为“null”的字符串。

范例:使用jsp:getProperty获取bean对象的属性值

复制代码
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%--
 3 在jsp中使用jsp:useBean标签来实例化一个Java类的对象
 4 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
 5     ┝<jsp:useBean>:表示在JSP中要使用JavaBean。
 6     ┝id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
 7     ┝class:此对象对应的包.类名称
 8     ┝scope:此javaBean的保存范围,四种范围:page、request、session、application
 9 --%>
10 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
11 
12 <%--
13 使用jsp:setProperty标签设置person对象的属性值
14 jsp:setProperty在设置对象的属性值时会自动把字符串转换成8种基本数据类型
15 但是jsp:setProperty对于复合数据类型无法自动转换
16 --%>
17 <jsp:setProperty property="name" name="person" value="白虎神皇"/>
18 <jsp:setProperty property="sex" name="person" value="男"/>
19 <jsp:setProperty property="age" name="person" value="24"/>
20 <jsp:setProperty property="married" name="person" value="false"/>
21 <%--
22 birthday属性是一个Date类型,这个属于复合数据类型,因此无法将字符串自动转换成Date ,用下面这种写法是会报错的
23 <jsp:setProperty property="birthday" name="person" value="1988-05-07"/>
24 --%>
25 <jsp:setProperty property="birthday" name="person" value="<%=new Date()%>"/>
26 <!DOCTYPE HTML>
27 <html>
28   <head>
29     <title>jsp:getProperty标签使用范例</title>
30   </head>
31   
32   <body>
33     <%--使用jsp:getProperty标签获取对象的属性值 --%>
34     <h2>姓名:<jsp:getProperty property="name" name="person"/></h2>
35     <h2>性别:<jsp:getProperty property="sex" name="person"/></h2>
36     <h2>年龄:<jsp:getProperty property="age" name="person"/></h2>
37     <h2>已婚:<jsp:getProperty property="married" name="person"/></h2>
38     <h2>出生日期:<jsp:getProperty property="birthday" name="person"/></h2>
39   </body>
40 </html>
复制代码

运行结果如下:

  

 

 

本文中部分取自https://www.cnblogs.com/xdp-gacl/p/3871730.html

猜你喜欢

转载自www.cnblogs.com/zhilili/p/10888086.html