牛骨文教育服务平台(让学习变的简单)
博文笔记

JavaBean、EL表达式${ }、作用域-自动转换、常用方法

创建时间:2016-09-01 投稿人: 浏览次数:1653

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

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

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

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

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

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

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

如下就是一个JavaBean

package com.safly;
public class Customer {
    private Integer id;
    private String name;
    private int age;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    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 Customer(){
        System.out.println("customer");
    }
}

jsp:useBean

<jsp:useBean id="customer" class="com.safly.Customer" scope="session"></jsp:useBean>

属性用法:
id 命名引用该Bean的变量。如果能够找到id和scope相同的Bean实例,jsp:useBean动作将使用已有的Bean实例而不是创建新的实例。
class 指定Bean的完整包名。
scope 指定Bean在哪种上下文内可用,可以取下面的四个值之一:page,request,session和application。
默认值是page,表示该Bean只在当前页面内可用(保存在当前页面的PageContext内)。
request表示该Bean在当前的客户请求内有效(保存在ServletRequest对象内)。
session表示该Bean对当前HttpSession内的所有页面都有效。
最后,如果取值application,则表示该Bean对所有具有相同ServletContext的页面都有效。

我们看一段代码:

<body>
    <jsp:useBean id="customer" class="com.safly.Customer" scope="session"></jsp:useBean>
    <jsp:setProperty property="age" value="10" name="customer" />
    age:<jsp:getProperty property="age" name="customer" />

    <%
        Customer customer1 = (Customer) session.getAttribute("customer");
        if (customer1 == null) {
            customer1 = (Customer) Class.forName("beans.Customer")
                    .newInstance();
            session.setAttribute("customer", customer1);
        }
    %>
    <%
    customer1.setAge(10);
    %>
    <%=customer1.getAge()%>
</body>

浏览器输入http://localhost:8080/day01/el.jsp
提交输出 age:10 10

EL表达式
el1.jsp

<body>
    <form action="el.jsp" method="post">
        username:<input type="text" name="username" value="${param.username }"/>
        <input type="submit" value="Submit"/>
    </form>
    username:<%= request.getParameter("username") %>

    <!-- el表达式 -->
    <jsp:useBean id="customer" class="com.safly.Customer" scope="session"></jsp:useBean>
    <jsp:setProperty property="age" value="12" name="customer"/>
    <a href="el2.jsp">to el2.jsp</a>
</body>

el2.jsp

<body>
    age:${sessionScope.customer.age }
   age:${sessionScope.customer["age"] }
   <%
    Customer customer = (Customer)session.getAttribute("customer");
    out.print(customer.getAge());
    %>
</body>

http://localhost:8080/day01/el.jsp
这里写图片描述
http://localhost:8080/day01/el2.jsp
age:12 age:12 12

楼上el的隐藏对象的范围是sessionScope,另外还有pageScope、requestScope、applicationScope
他们基本上和pageContext、request、session、application一样

El的作用域–及其自动转换功能
el1.jsp

<body>
    <jsp:useBean id="customer" class="com.safly.Customer" scope="session"></jsp:useBean>
    <jsp:setProperty property="age" value="10" name="customer"/>
    age:<jsp:getProperty property="age" name="customer"/>
    <a href="el2.jsp?score=89">To El2.jsp</a>
</body>

el2.jsp

<body>
    <!-- getParameter -->
  score:${param.score}
  score:<%= request.getParameter("score")%>
  score:${param.score + 11 }
  score:<%= request.getParameter("score")+11 %>
  <%
    Customer cust = new Customer();
    cust.setAge(25);
    request.setAttribute("customer",cust);
   %>
   age:${customer.age }
   age:${sessionScope.customer["age"] }
   <br>
</body>

浏览器输入
http://localhost:8080/day01/el.jsp
浏览器输出
age:10 To El2.jsp
点击上面一行中的超练级,浏览器地址栏变为如下:
http://localhost:8080/day01/el2.jsp?score=89
浏览器输入:
score:89 score:89 score:100 score:8911 age:25 age:10

大概说一下:
在el1.jsp中,将customer放到了session中

<jsp:useBean id="customer" class="com.safly.Customer" scope="session"></jsp:useBean>

在el2.jsp中从session中取出来customer对象的age属性

 age:${sessionScope.customer["age"] }

在el2.jsp中

    <%
    Customer cust = new Customer();
    cust.setAge(25);
    request.setAttribute("customer",cust);
   %>
   age:${customer.age }

是在customer
先从pageContext、request、session、application依次从小往大找
这里就是从request中获取的

El表达式的其他方法
el1.jsp

<body>
<jsp:useBean id="customer" class="com.safly.Customer" scope="session"></jsp:useBean>
    <jsp:setProperty property="age" value="10" name="customer"/>
    age:<jsp:getProperty property="age" name="customer"/>
    <a href="el2.jsp?score=89&name=A&name=B">To El2.jsp</a>
</body>

el2.jsp

<body>

    <%
    ArrayList<String> names = new ArrayList<String>();
    names.add("abc");
    request.setAttribute("names",names);
   %>
   names is empty:${empty requestScope.names }
   names is empty:${empty requestScope.names2 }
  <!-- pageContext只能读取属性 -->
  sessinAttributeName:${pageContext.session.attributeNames}<br>

  sessionId:${pageContext.session.id }<br>

  <%= request.getContextPath() %><br>
  contextPath:${pageContext.request.contextPath }<br>

  jsession:${cookie.JSESSIONID.name } -- ${cookie.JSESSIONID.value } <br>

  score:${param.score}<br>

  names:${paramValues.name[0]}<br>

  <%= request.getParameterValues("name")[0].getClass().getName() %>
</body>

http://localhost:8080/day01/el.jsp
age:10 To El2.jsp
http://localhost:8080/day01/el2.jsp?score=89&name=A&name=B

names is empty:false names is empty:true sessinAttributeName:org.apache.catalina.util.Enumerator@1120aa6
sessionId:19A0C4DD75349287A283DBABA8EE7EF1
/day01
contextPath:/day01
jsession:JSESSIONID – 19A0C4DD75349287A283DBABA8EE7EF1
score:89
names:A
java.lang.String

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。