JAVABean的应用
JavaBean 是java中开发的可以跨平台的重用组件,在jsp程序中常用来封装业务逻辑和数据库操作。在程序中,程序员们所要处理的无非是业务逻辑和数据,而这两种操作都要用到javabe,因此javabean很重要。
javabean 实际就是一个java类,这个类可以重用。从javabean功能上可以分以下两类:
一封装数据。(实际就是将数据库中某一张表的字段进行封装)
一封装业务。(相对一个封装了数据的javabean,一般都会有一个封装该类的业务逻辑操作的javabean与之对应。)
javabean一般情况下要满足以下要求:
一是一个共有类,并提供无参的公有的构造方法。
一属性私有。
一具有公有的setter和getter方法。
符合上述条件的类,我们都可以把它看成javabean组件。
(在实际开发中,通常还会创建一个Service层,用于存放与业务逻辑相关的操作。
Service层中的接口和类对dao类的方法实现了封装和调用。)
1 package com.pb.news.services; 2 3 import java.util.List; 4 5 import com.ob.news.entity.News; 6 7 public interface Service { 8 //增加新闻 9 public boolean addNews(News news); 10 //删除新闻 11 public boolean deleteNews(int id); 12 //更新选择的新闻数据 13 public boolean updateNews(News news); 14 //查询新闻信息 15 public List<News> getNewsList(); 16 }
1 mport com.ob.news.entity.News; 2 import com.pb.news.dao.NewsDao; 3 4 public class serviceImpl implements Service { 5 private NewsDao newsdao; 6 public boolean addNews(News news) { 7 // TODO Auto-generated method stub 8 return newsdao.add(news); 9 } 10 11 public boolean deleteNews(int id) { 12 // TODO Auto-generated method stub 13 return newsdao.delete(id); 14 } 15 16 public boolean updateNews(News news) { 17 // TODO Auto-generated method stub 18 return newsdao.update(news); 19 } 20 21 public List<News> getNewsList() { 22 // TODO Auto-generated method stub 23 return newsdao.getNewstitle(); 24 } 25 26 }
jsp动作标签
通过动作标签,程序员可以在jsp页面中把页面的显示功能部分封装起来,使整个页面更简洁和易于维护。
<jsp:useBean>
装载一个健将在jsp页面中使用的javabean,发挥java组件重用的优势
语法:
1 <jsp:useBean id="name" class="package.class" scop="scop"/>
id :创建javabean的引用名 class:指定javabean的类 scop:指定javabean的范围
默认情况下scop被设置为 page
useBean 动作的范围选项
范围 说 明
page JavaBean 只能在当前页面中使用。当加载新页面时就会将其销毁
request JavaBean 在用户对其发出请求时存在
session JavaBean 一直存在于会话中,直至其终止或被删除为止
application JavaBean 在整个应用程序中均可使用
useBean 属性的使用如示例所示。
<jsp:useBean id="order" class="y2javaee.sg.ch07.Order" scope="request"/>
上述示例中代码的含义是:如果在scope 指定的范围内存在id 指定的对象,就返回该对象;
如果不存在,就创建一个class 属性指定的Java 类的对象,并保存在id 指定的变量内。在JSP
文件中,相当于:
<jsp:setProperty>
setProperty 动作用于设置 useBean 中指定的 JavaBean 的属性值。setProperty 动作指
定名称、属性、值和参数,用于赋给JavaBean 的属性。setProperty 动作的语法如下。
语法:
<jsp:setProperty name="BeanName" property="PropertyName" value="Value"
param="Parameter" />
其中,name 指定 useBean 中使用的JavaBean 的id;property 指定要为之设置值的
JavaBean 的属性名称;value 指定要为属性设置的值;param 指定用于输入数据的表单元素名
称,并给属性赋值。
param 属性不能与 value 属性一起使用。
在示例 1 中显示如何在 JSP 页面中使用 setProperty 动作。使用 useBean 动作将 Order
类嵌入当前 JSP 页面,并使用 setProperty 动作设置
userName 属性的值为“ACCP”。
<jsp:useBean id="order" class="y2javaee.sg.ch07.Order" scope="request"/>
<jsp:setProperty name="order" property="username" value="ACCP"/>
param属性的使用。
<jsp:useBean id="order" class="y2javaee.sg.ch07.Order" scope="request"/>
<jsp:setProperty name="order" property="username" param="username"/>
<jsp:getProperty>
useBean 中id 所指定的对象通过setProperty 中对property 指定的属性进行赋值后,可
以使用getProperty 动作获取JavaBean 中指定的属性值。
<jsp:getProperty name="beanName" property="PropertyName"/>
其中,name 指定 useBean 中使用的JavaBean 的id;property 指定要获取JavaBean 的
属性名称。
在下列示例中,在JSP 页面中使用getProperty 标准动作获取JavaBean 属性值的代码。
1 <jsp:useBean id= "order" class="y2javaee.sg.ch07.Order"scope="request"/>
2 <jsp:setProperty name="order" property="username” value="ACCP"/>
3 <jsp:getProperty name= "order" property="username"/>
应用举例一
通过下面一个例子,我们演示一下JSP 标准动作在程序中的使用。首先,在WebRoot 下创
建test 文件夹,在该文件夹内创建order.html 文件,内容如示例所示。
1 <body>
2 <!-- 此处省略了页面美化代码 -->
3 <p class = "bigFont">购物车买单</p>
4 <form method = "post" action = "processorder.jsp">
5 <p style = "font-weight: bold">请输入如下信息.</p>
6 <table>
7 <tr>
8 <td class = "right bold">用户名:</td>
9 <td>
10 <input type = "text" name = "username" size = "25" />
11 </td>
12 </tr>
13 <tr>
14 <td class = "right bold">邮编:</td>
15 <td>
16 <input type = "text" name = "zipcode" size = "10" />
17 </td>
18 </tr>
19 <tr>
20 <td class = "right bold">电话:</td>
21 <td>
22 <input type = "text" name = "phone" size = "10" />
23 </td>
24 </tr>
25 <tr>
26 <td class = "right bold">信用卡:</td>
27 <td>
28 <input type = "text" name = "creditcard" size = "25" />
29 </td>
30 </tr>
31 </table>
32 <p><input type = "submit" value = "提交" /></p>
33 </form>
34 </body>
order.html 页面的form 表单提交给processorder.jsp,在processorder.jsp 中使用JSP 标准动
作实现数据的获取并同时封装到JavaBean 中。processorder.jsp 代码如下面示例所示。
1 <%@ page language="java" pageEncoding="GBK"%>
2 <html>
3 <head>
4 <title>演示JavaBean</title>
5 <jsp:useBean id="order" class="y2javaee.sg.ch07.Order" scope="request"/>
6 <jsp:setProperty name="order" property="username" param="username"/>
7 <jsp:setProperty name="order" property="zipcode" param="zipcode"/>
8 <jsp:setProperty name="order" property="phone" param="phone"/>
9 <jsp:setProperty name="order" property="creditcard" param="creditcard"/>
10 <jsp:setProperty name="order" property="total" value="23.45"/>
11 </head>
12 <body>
13 用户名:<jsp:getProperty name="order" property="username"/>. <br>
14 邮 编:<jsp:getProperty name="order" property="zipcode"/>. <br>
15 电 话:<jsp:getProperty name="order" property="phone"/>. <br>
16 信用卡:<jsp:getProperty name="order" property="creditcard"/><br>
17 总 价:<jsp:getProperty name="order" property="total"/>. <br>
18 </body>
19 </html>
应用举例二
通过上面的示例,我们知道JSP 标准动作是使用JavaBean 完成了数据的获取和对数据的封
装。那JSP 标准动作是如何调用JavaBean 的呢?
在 test 包下创建SimpleBean.java,代码如下面示例所示。
1 package y2javaee.sg.ch07;
2 public class SimpleBean {
3 private String name = null;
4 private int age = 20;
5 public SimpleBean() {
6 System.out.println("调用无参构造方法,创建实例!!!");
7 }
8 public String getName() {
9 System.out.println("调用了getName()方法,获取name 值");
10 return name;
11 }
12 public void setName(String username) {
13 name = username;
14 System.out.println("调用了setName()方法,设置name 值");
15 }
16 public int getAge() {
17 System.out.println("调用了getAge()方法,获取age 值");
18 return age;
19 }
20 public void setAge(int userage) {
21 age = userage;
22 System.out.println("调用了setAge()方法,设置age 值");
23 }
24 }
在 SimpleBean.java 中的构造方法和getter/setter 方法中,都加入了在控制台输出的语句。
这样方便我们查看JSP 标准动作是如何调用JavaBean 的。接下来,在WebRoot 下的test 文件夹
下,创建output.jsp 文件,内容如下面示例所示。
1 <%@page contentType="text/html; charset=GBk"%>
2 <html>
3 <head>
4 <title>在 JSP 中使用 JavaBean</title>
5 <jsp:useBean id="bean" class="y2javaee.sg.ch07.SimpleBean" scope="request"/>
6 <jsp:setProperty name="bean" property="name" value="<%= request.getPara
7 meter("username") %>"/>
8 <jsp:setProperty name="bean" property="age" value="25"/>
9 </head>
10 <body> 姓名:
11 <jsp:getProperty name="bean" property="name"/> <br/>
12 年龄:
13 <jsp:getProperty name="bean" property="age"/>
14 </body>
15 </html>
在 output.jsp 文件中,使用JSP 标准动作来创建Simplebean 对象bean,并对bean 的name
和age 属性进行赋值,再把属性值取出,并显示在页面上。在浏览器的地址栏内输入
“http://localhost:8080/store/ch07/output.jsp?username=accp”,显示结果
在显示结果中 我们可以看出SP 标准动作useBean 时,调用了JavaBean 的无参的构造
方法,而在执行setProperty 动作时,调用了JavaBean 的setter 方法,同样,在执行getProperty
时,执行的是getter 方法。这也就是为什么在定义一个JavaBean 时,一定要满足特定的要求。
<jsp:include> 动态包含,将被包含页面的结果包含进来。先处理,在包含
(把指定文件插入正在生成的页面中 )
语法:
<jsp:inclue page="url">
url:引入页面-
<%@include%>静态包含,将被包含的页面的内容包含进来。先包含再处理
要导入下边这些标签必须使用静态包含否则会报错
<jsp:useBean id="newsDao" class="com.pb.newsdaoImpl.NewsDaoImpl" scope="page"/> <jsp:useBean id="newsService" class="com.pb.news.services.serviceImpl" scope="page"/> <jsp:setProperty property="newsdao" name="newsService" value="<%=newsDao%>"/>
页面的跳转
request.getRequestDispatcher().forward()转发
response.sendRedirect() 重定向
<jsp:forward>与转发相同