JavaBean、EL表达式${ }、作用域-自动转换、常用方法
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
- 上一篇: yii之-日志使用
- 下一篇: JavaBean介绍与EL表达式和JSTL标签