在Struts2中使用POJO,将会让代码变得更简洁。
什么是POJO
POJO的名称有多种,pure old java object 、plain ordinary java object 等。
按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的java对象”,但大家都使用“简单java对象”来称呼它。
POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。
POCO的概念是从java的POJO借用而来,而两者的含义是一致的,不同的仅仅是使用的语言不一样。所以POCO的解释就是“Plain Old C# Object”。
POJO让开发者可专注于业务逻辑和脱离框架的单元测试。除此之外, 由于POJO并不须要继承框架的类或实现其接口,开发者能够极其灵活地搭建继承结构和建造应用。
POJO的意义就在于它的简单而灵活性,因为它的简单和灵活,使得POJO能够任意扩展,从而胜任多个场合,也就让一个模型贯穿多个层成为现实。
POJO是指简单java对象(Plain Old Java Objects、pure old java object 或者 plain ordinary java object)。
PO是指持久对象(persistant object持久对象)。
VO是指值对象或者View对象(Value Object、View Object)。注意,本文的VO特指View Object。
持久对象实际上必须对应数据库中的entity,所以和POJO有所区别。比如说POJO是由new创建,由GC回收。但是持久对象是insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。另外持久对象往往只能存在一个数据库Connection之中,Connnection关闭以后,持久对象就不存在了,而POJO只要不被GC回收,总是存在的。
POJO仅包含最简单的字段属性,没有多余的东西,它本质上就是一个普通的JavaBean。
但是在POJO的基础上,能够扩展出不同的对象。
1、为POJO增加了持久化的方法(Insert、Update、Delete……)之后,POJO就变成了PO。
2、为POJO增加了数据绑定功能之后,POJO就变成了View Object,即UI Model。
3、为POJO增加业务逻辑的方法(比如单据审核、转帐……)之后,POJO就变成了Domain Model。
4、POJO还可以当作DTO (Data Transfer Object) 数据传输对象使用。
以下会举例介绍使用POJO的效果,本例使用的Struts的版本为struts2-2.3.28.1。
第一步:引入所需的jar包
/Struts2Learning/WebRoot/WEB-INF/lib/commons-fileupload-1.3.1.jar
/Struts2Learning/WebRoot/WEB-INF/lib/commons-io-2.2.jar
/Struts2Learning/WebRoot/WEB-INF/lib/commons-lang3-3.2.jar
/Struts2Learning/WebRoot/WEB-INF/lib/commons-logging-1.1.3.jar
/Struts2Learning/WebRoot/WEB-INF/lib/freemarker-2.3.22.jar
/Struts2Learning/WebRoot/WEB-INF/lib/javassist-3.11.0.GA.jar
/Struts2Learning/WebRoot/WEB-INF/lib/ognl-3.0.14.jar
/Struts2Learning/WebRoot/WEB-INF/lib/struts2-core-2.3.28.1.jar
/Struts2Learning/WebRoot/WEB-INF/lib/xwork-core-2.3.28.1.jar
第三步:编写Person.java
第四步:编写Action(PersonAction)
第五步:配置src/struts.xml
第六步:编写inputPerson.jsp与showPerson.jsp。
编写inputPerson.jsp需要在页面顶部添加如下信息,以引入Struts2标签库。
inputPerson.jsp其内容如下:
什么是POJO
POJO的名称有多种,pure old java object 、plain ordinary java object 等。
按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的java对象”,但大家都使用“简单java对象”来称呼它。
POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。
POCO的概念是从java的POJO借用而来,而两者的含义是一致的,不同的仅仅是使用的语言不一样。所以POCO的解释就是“Plain Old C# Object”。
主要是Java的开发者被EJB的繁杂搞怕了,大家经过反思,又回归“纯洁老式”的JavaBean,即有无参构造函数,每个字段都有getter和setter的java类。
POJO让开发者可专注于业务逻辑和脱离框架的单元测试。除此之外, 由于POJO并不须要继承框架的类或实现其接口,开发者能够极其灵活地搭建继承结构和建造应用。
POJO的意义就在于它的简单而灵活性,因为它的简单和灵活,使得POJO能够任意扩展,从而胜任多个场合,也就让一个模型贯穿多个层成为现实。
先写一个核心POJO,然后实现业务逻辑接口和持久化接口,就成了Domain Model; UI需要使用时,就实现数据绑定接口,变成VO(View Object)。
POJO是指简单java对象(Plain Old Java Objects、pure old java object 或者 plain ordinary java object)。
PO是指持久对象(persistant object持久对象)。
VO是指值对象或者View对象(Value Object、View Object)。注意,本文的VO特指View Object。
持久对象实际上必须对应数据库中的entity,所以和POJO有所区别。比如说POJO是由new创建,由GC回收。但是持久对象是insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。另外持久对象往往只能存在一个数据库Connection之中,Connnection关闭以后,持久对象就不存在了,而POJO只要不被GC回收,总是存在的。
由于存在诸多差别,因此持久对象PO(Persistent Object)在代码上肯定和POJO不同,起码PO相对于POJO会增加一些用来管理数据库entity状态的属性和方法。而ORM追求的目标就是要PO在使用上尽量和POJO一致,对于程序员来说,他们可以把PO当做POJO来用,而感觉不到PO的存在。
POJO仅包含最简单的字段属性,没有多余的东西,它本质上就是一个普通的JavaBean。
但是在POJO的基础上,能够扩展出不同的对象。
1、为POJO增加了持久化的方法(Insert、Update、Delete……)之后,POJO就变成了PO。
2、为POJO增加了数据绑定功能之后,POJO就变成了View Object,即UI Model。
3、为POJO增加业务逻辑的方法(比如单据审核、转帐……)之后,POJO就变成了Domain Model。
4、POJO还可以当作DTO (Data Transfer Object) 数据传输对象使用。
以下会举例介绍使用POJO的效果,本例使用的Struts的版本为struts2-2.3.28.1。
第一步:引入所需的jar包
/Struts2Learning/WebRoot/WEB-INF/lib/commons-fileupload-1.3.1.jar
/Struts2Learning/WebRoot/WEB-INF/lib/commons-io-2.2.jar
/Struts2Learning/WebRoot/WEB-INF/lib/commons-lang3-3.2.jar
/Struts2Learning/WebRoot/WEB-INF/lib/commons-logging-1.1.3.jar
/Struts2Learning/WebRoot/WEB-INF/lib/freemarker-2.3.22.jar
/Struts2Learning/WebRoot/WEB-INF/lib/javassist-3.11.0.GA.jar
/Struts2Learning/WebRoot/WEB-INF/lib/ognl-3.0.14.jar
/Struts2Learning/WebRoot/WEB-INF/lib/struts2-core-2.3.28.1.jar
/Struts2Learning/WebRoot/WEB-INF/lib/xwork-core-2.3.28.1.jar
第二步:配置web.xml
<display-name>Struts2Learning</display-name>
<!-- 配置Filter -->
<filter>
<filter-name>struts2</filter-name>
<!-- Changed Filter Structure in Struts < 2.1.3-->
<!-- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> -->
<!-- Changed Filter Structure in Struts >= 2.1.3 and Struts < 2.5-->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 拦截所有URL用户请求 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第三步:编写Person.java
public class Person {
private String name;
private String sex;
private Integer age;
private String address;
/* 省略属性的getters与setters */
}
第四步:编写Action(PersonAction)
public class PersonAction extends ActionSupport {
private Person person;
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
第五步:配置src/struts.xml
<struts>
<!-- 配置Struts2应用的字符编码集 -->
<constant name="struts.i18n.encoding" value='UTF-8'></constant>
<package name="default" extends="struts-default">
<!-- 配置PersonAction -->
<action name="personAction" class="com.mahaochen.action.PersonAction">
<result name="success">/WEB-INF/showPerson.jsp</result>
</action>
</package>
</struts>
第六步:编写inputPerson.jsp与showPerson.jsp。
编写inputPerson.jsp需要在页面顶部添加如下信息,以引入Struts2标签库。
<!-- 引入Struts2标签库 -->
<%@ taglib prefix="s" uri="/struts-tags"%>
inputPerson.jsp其内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 引入Struts2标签库 -->
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>人员信息录入</title>
</head>
<body>
<center>
<s:form action="personAction" method="post">
<s:textfield name="person.name" label="姓名"></s:textfield>
<s:textfield name="person.sex" label="性别"></s:textfield>
<s:textfield name="person.age" label="年龄"></s:textfield>
<s:textfield name="person.address" label="地址"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
</center>
</body>
</html>
showPerson.jsp其内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>显示人员信息</title>
</head>
<body>
姓名:${person.name }<br />
性别:${person.sex }<br />
年龄:${person.age }<br />
地址:${person.address }<br />
</body>
</html>