- SpringMVC架构介绍
丹_妮
spring
MVC框架要做的事情?1)将url映射到java类或java类的方法2)封装用户提交的数据3)处理请求-调用相关的业务处理-封装响应数据4)将响应的数据进行渲染jsphtml为什么要学习SpringMVC?性能较struts2好简单、便捷、易学天生和Spring无缝集成,使用Spring的IOC和AOP还有事务使用约定由于配置能够进行简单的junit测试支持restful风格异常处理本地化、国际化
- 如何进行架构技术方案选型?
猫咪张
系统架构设计strutsspringmvcjsf架构设计ejb
在架构设计时,通常面临的一个难题是,如何选择架构的技术方案.这也是各种项目都会碰到的问题.我们到底是选择C/S,B/S模式,如果选择C/S,那么到底是三层C/S还是两层,到底要不要分布式,B/S的展示层是自己写MVC,还是应用已有的开源的如SpringMVC,Struts2.0,JSF技术。总之,可选的确实是太多了。那么怎么去选择呢?这个问题确实有点难,但也有解决方法的。首先,我们需要研究我们项目
- JavaBean
我是邱邱
开发规范,可以说是一种技术。javaBean就是一个普通的java类,但必须满足以下条件才能够称为是JavaBean:1)必须提供无参的构造方法;2)类中属性必须私有化;3)该类提供公共的getter和setter方法。JavaBean的使用场景:1)项目中用到的实体对象2)EL表达式中用到的访问对象的属性3)jsp标签张的属性赋值jsp中创建对象以及给对象属性赋值以及获取属性值的usebean也
- MyBatis<if>标签判断字符串相等写法
都旭宝
mybatis
mybatis映射文件中,if标签判断字符串相等,两种方式:因为mybatis映射文件,是使用的ognl表达式,所以在判断字符串sex变量是否是字符串Y的时候,1.注意:不能使用and1=1因为mybatis会把’Y’解析为字符,java是强类型语言,所以不能这样写。
- Apache Struts2 S2-005 远程代码执行漏洞
夭-夜
strutsapachejava
文章目录基础知识一、通过BUMP构造数据包1.repeater模块构造post包2.浏览器访问以下链接二、反弹shell1.开启监听2.构造数据包总结基础知识ApacheStruts2ApacheStruts2框架是一个用于开发JavaEE网络应用程序的Web框架,质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Stru
- Java编程开发新手学习:数组方法的应用猜字母游戏
Java小辰
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。给你学习路线:html-css-js-jq-javase-数据库-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmv
- 现在程序员这么多,我学习java这块应该学到什么程度才能不被淘汰呢?
渡你眉间山河
一、夯实基础JavaSE这是基础,一定要好好学习!Java语法,面向对象(包括类、对象、方法、继承、封装、抽象、多态、消息解析等),常见API,数据结构,集合框架,设计模式(包括创建型、结构型、行为型),多线程和并发,I/O流,Stream,网络编程。JavaEEJavaEE是在JavaSE的基础上构建的,JavaEE容器,Web容器,常用框架(包括Struts2、Hibernate、Mybati
- @Value注解@Value("#{}")和@Value("${}")的区别
一块自由的砖
@Value("#{}")@Value("#{}")表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以表示常量@Value("#{1}")//number相当于赋值1privateintnumber;@Value("${}")@Value("${}")可以获取对应属性文件中定义的属性值。假如我有一个application.properties文件里面配置了:we
- Spring框架(7)Spring表单标签、数据校验及文件上传
秋意钟
springjava数据库
Spring表单标签在以往开发JSP项目时,通常会使用EL表达式和JSTL标签来完成页面视图的开发工作,其实Spring也提供了自己的一套表单标签库。通过使用Spring标签,可以很容易地将模型数据中的表单对象绑定到HTML表单元素中Spring提供的常用表单标签标签姓名说明渲染表单元素文本框组件标签密码框组件标签隐藏组件标签多行文本框组件标签复选框组件标签下拉列表组件标签数据校验使用Spring
- spring boot中@ConfigurationProperties 与 @Value区别以及用法
psjasf1314
springbootjavaspring
目录@Value(“”)介绍@configurationProperties@ConfigurationProperties与@Value比较@Value(“”)介绍:@Value(“”)介绍:用来指定bean中某一个属性的值,它的值可以是字面量,从配置文件获取的值,spel表达式例如:@Value("${person.last-name}")privateStringlastName;@Valu
- JAVA Web学习(20)___第14章Struts2基础
岁月静好浅笑安然
第14章Struts2基础14.1Struts2概述14.1.1理解MVC原理14.1.2Struts2框架的产生14.1.3Struts2的结构体系14.2Struts2入门14.2.1Struts2的获取与放置开发struts项目必须添加的类库文件名称说明struts2-core-2.5.20.jarStruts2的核心类库xwork-core-2.1.6.jarXworkd的核心类库ognl
- JSTL表达式的使用
救救孩子把
javaWebJSTL
要使用JSTL首先要引入相关jar包。必须导包引入!!!一般引入的代码也放到base标签中jsp脚本片段使用JSTL替代-取出域中的属性值,先判断,然后遍历或者直接显示到页面中-jstl一般结合EL表达式使用,先取出值然后使用jstl判断或遍历-jstl每个标签都是一套java代码JSTL:jspstandardtaglib使用步骤:1、将jstl需要使用的jar包拷贝到项目中2、在需要使用jst
- struts2_ognl入门
小漫画ing
ognl的概述:1、之前在web阶段,学过el表达式,el表达式在jsp中获取域对象中的值。2、ognl也是一种表达式,而这个种表达式的功能更加强大。(1)在struts里面操作只栈数据。(2)一般把OGNL在Struts2操作,和Struts2标签一起使用操作值栈。3、OGNL不是Struts2的一部分,单独项目,经常和Struts2一起使用而已。(1)使用OGNL时候首先导入jar包,Stru
- SSH框架之Spring+Struts2+Hibernate整合篇
小小一技术驿站
回顾-Hibernate框架ORM:对象关系映射.把数据库表和JavaBean通过映射的配置文件映射起来,操作JavaBean对象,通过映射的配置文件生成SQL语句,自动执行.操作数据库.1:类名.hbm.xml映射配置文件.2:hibernate.cfg.xml核心配置文件.3:使用Hibernate提供的API操作.Struts2框架:和客户端进行交互1.在web.xml配置过滤器.2.str
- Struts2中的action中result中的type有哪些类型
阿立聊代码
strutsstruts2.0
Struts2框架默认配置中已经提供了很多的result类型,可以打开struts-default.xml配置文件来查看。chain:Action链式处理的结果类型,也就是将结果转发到这个action中。chart:整合JFreeChart的结果类型dispatcher:用于整合JSP的结果类型freemarker:用于整合freemarker结果类型。httpheader:用于控制特殊的HTTP
- Spring Cloud Function现SPEL 表达式漏洞,SPEL 表达式是个啥?
强哥叨逼叨
点击关注强哥,查看更多精彩文章呀哈喽,大家好,我是强哥。SpringCloudFunction现SPEL漏洞近日,SpringCloudFunction官方测试用例曝光了SpringCloudFunctionSPEL表达式注入漏洞,可利用该漏洞通过注入SPEL表达式来触发远程命令执行。“由于SpringCloudFunction中RoutingFunction类的apply方法将请求头中的“spr
- jsp中${xxx}代表什么
不腾
jsp
jsp中${}----是EL表达式的常规表示方式目的是为了获取{}中指定的对象(参数、对象等)的值如:${user.name}Useruser=(User)request(搜寻范围).getAttribute(user);Stringname=user.getName();out.println(name);从当前页面起开始搜寻user对象,然后获取改对象的name属性值其搜寻的范围依次是:pag
- jsp EL表达式结合JSTL标准标签实现分页
zp8126
jspsqlcborderjdbcsession
使用SQL标签此处不再有其他客户...以下是客户列表:姓氏名字年龄0}">">上一页上一页">下一页下一页共${custList.rowCount}条记录 共4?(custList.rowCount/noOfRows):(custList.rowCount/noOfRows+1))}"maxFractionDigits="0"/>页 第4?(param.start/noOfRo
- java进阶学习第一天_Java全栈开发springmvc学习笔记第一天
35612123
java进阶学习第一天
SpringmvcJavaEE体系结构什么是mvc?原始的mvc:Mvc:什么springmvc?Springmvc是一个web层mvc框架,类似struts2.Springmvc和spring关系?Springmvc是spring的一部分。Springmvc执行原理(流程)Struts2:控制层:strutsPrepareAndExcuteFilter–前端控制器/*l接受请求l转发请求前端控制
- JSTL 标签库
Gambler_Tu
servlet开发语言servletjsp
“看看就行”JSTL标签库JSP标准标签库(JSTL)是一个定制标签库的集合,它的出现是为了实现呈现层与业务层的分离功能。使用JSTL(结合EL表达式)在绝大多数情况下,JSP页面中不再需要「嵌入」Java代码(scriplet)。使用JSTL需要额外导入jstl库。根据JSTL标签所提供的功能,可以将其分为5个类别:核心(Core)标签、格式化标签、SQL标签、XML标签、JSTL函数。其中以核
- EL 表达式
Gambler_Tu
servletservletjsp
个人对这部分的内容级别定义为:“看看就行”EL表达式JSP2.0的最重要特性就是表达式语言(EL),EL的目的是帮助程序员编写无脚本的JSP页面。最初EL表达式被创造出来是为了JSTL服务,配合JSTL使用的。不过从JSP2.0开始即便项目中没有引入JSTL,也可以(单独)使用EL。EL的默认关闭在Servlet3.0以下版本中,EL表达式的功能默认是关闭的。如何判断你的项目使用的是哪个Servl
- Strust2远程代码执行漏洞(S2-033)
锋刃科技
安全安全
前言ApacheStrut2REST插件存在漏洞,可以远程执行任意指令影响版本Struts2.3.20–Struts2.3.28(不包括2.3.20.3和2.3.24.3)。环境搭建dockerpullmedicean/vulapps:s_struts2_s2-033dockerrun-d-p80:8080medicean/vulapps:s_struts2_s2-033打开your-IP:80/
- [旧文系列] Struts2历史高危漏洞系列-part2:S2-007/S2-008/S2-009
xc8qanAFenlka@x1
struts安全web安全java
文章目录关于前言S2-007漏洞复现与分析可回显PoC漏洞修复S2-008漏洞复现与分析Vuln-1:RemotecommandexecutioninCookieInterceptorVuln-2:RemotecommandexecutioninDebuggingInterceptorVuln-2:可回显PoC漏洞修复S2-009漏洞复现与分析可回显PoC漏洞修复Reference关于系列是笔者将
- 0x26.Apache Struts2远程代码执行漏洞(S2-019)复现
半情调
墨者学院墨者学院S2-019
s2-019:动态方法调用是一种已知会施加可能的安全漏洞的机制,但到目前为止,它默认启用,警告用户应尽可能将其关闭;构造poc:?debug=command&expression=#f=#_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),#f.setAccessible(true),#f.set(#_membe
- Struts2 S2-045漏洞复现
你能拿我咋的
渗透测试漏洞复现strutsjavaweb安全
1.漏洞概述OGNL是ObjectGraphicNavigationLanguage(对象图导航语言)的缩写,它是一个开源项目。Struts框架使用OGNL作为默认的表达式语言。struts2的rce本质都是一样的(除了S2-052以外),都是Struts2框架执行了恶意用户传进来的OGNL表达式,造成远程代码执行。可以造成“命令执行、服务器文件操作、打印回显、获取系统属性、危险代码执行”等,只不
- 【SpringBoot3】Spring Security 常用注解
顽石九变
SpringBoot3.0从入门到精通springjavaspringsecurity
注:本文基于SpringBoot3.2.1以及SpringSecurity6.2.1SpringSecurity6的常用注解包括以下几种,通过这些注解可以更加方便的控制资源权限。@Secured:方法执行前检查,直接判断有没有对应的角色@PreAuthorize:方法执行前检查,根据SpEL表达式执行结果判断是否授权@PostAuthorize:方法执行后检查,根据SpEL表达式执行结果判断是否授
- JavaWeb编程实战宝典(5)___ 第5章 编写Struts2第一个程序
岁月静好浅笑安然
第5章编写Struts2第一个程序5.1Struts2的MVC模式Struts2中的控制器主要有如下4个功能简单验证复制验证商业逻辑流控制Struts2框架结构可分为以下4部分JSP/Struts2标签(视图层V层)ActionSupport的子类(控制层C层)处理业务逻辑和数据逻辑的JavaBean(模型层M层)用于保存Struts2配置的struts.xml文件5.2Struts2的结构体系5
- Mybatis使用动态sql时,参数为0判断test,查询条件的值传入0时,查询条件判断失效的问题
小百菜
javamybatis
1、判断Integer类型privateIntegerstatus;//状态,0,1,2。andstatus=#{status}当status的值为0的时候,where条件中的sql未正常拼接,即iftest中的条件不成立(false,应该为true才对),sql拼接失效原因:mybatis在预编译sql时,使用OGNL表达式来解析if标签,对于Integer类型属性,在判断不等于''时,会返回'
- OGNL
虫儿飞ZLEI
layout:posttitle:OGNLsubtitle:OGNLdate:2018-05-31author:ZLheader-img:img/20180531.jpgcatalog:truetags:-OGNLOGNL(对象视图导航语言)${user.addr.name}这种写法就叫对象视图导航.OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能.使用导包在struts2的包中就已经包
- 2018年java编程发展空间大吗?
Java小辰
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。给你学习路线:html-css-js-jq-javase-数据库-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmv
- PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
javaUIPHPandroidlinux
╔-----------------------------------╗┆
- 各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
bozch
.net.net mvc
在.net mvc5中,在执行某一操作的时候,出现了如下错误:
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
经查询当前的操作与错误内容无关,经过对错误信息的排查发现,事故出现在数据库迁移上。
回想过去: 在迁移之前已经对数据库进行了添加字段操作,再次进行迁移插入XXX字段的时候,就会提示如上错误。
&
- Java 对象大小的计算
e200702084
java
Java对象的大小
如何计算一个对象的大小呢?
 
- Mybatis Spring
171815164
mybatis
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService userService = (CustomerService) ac.getBean("customerService");
Customer cust
- JVM 不稳定参数
g21121
jvm
-XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”
- 用户自动登录网站
永夜-极光
用户
1.目标:实现用户登录后,再次登录就自动登录,无需用户名和密码
2.思路:将用户的信息保存为cookie
每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接
- centos7 安装后失去win7的引导记录
程序员是怎么炼成的
操作系统
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry "Windows 7 (loader) (on /dev/sda1)" { 
- Oracle 10g 官方中文安装帮助文档以及Oracle官方中文教程文档下载
aijuans
oracle
Oracle 10g 官方中文安装帮助文档下载:http://download.csdn.net/tag/Oracle%E4%B8%AD%E6%96%87API%EF%BC%8COracle%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%8Coracle%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3 Oracle 10g 官方中文教程
- JavaEE开源快速开发平台G4Studio_V3.2发布了
無為子
AOPoraclemysqljavaeeG4Studio
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V3.2版本已经正式发布。大家可以通过如下地址下载。
访问G4Studio网站
http://www.g4it.org
G4Studio_V3.2版本变更日志
功能新增
(1).新增了系统右下角滑出提示窗口功能。
(2).新增了文件资源的Zip压缩和解压缩
- Oracle常用的单行函数应用技巧总结
百合不是茶
日期函数转换函数(核心)数字函数通用函数(核心)字符函数
单行函数; 字符函数,数字函数,日期函数,转换函数(核心),通用函数(核心)
一:字符函数:
.UPPER(字符串) 将字符串转为大写
.LOWER (字符串) 将字符串转为小写
.INITCAP(字符串) 将首字母大写
.LENGTH (字符串) 字符串的长度
.REPLACE(字符串,'A','_') 将字符串字符A转换成_
- Mockito异常测试实例
bijian1013
java单元测试mockito
Mockito异常测试实例:
package com.bijian.study;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.
- GA与量子恒道统计
Bill_chen
JavaScript浏览器百度Google防火墙
前一阵子,统计**网址时,Google Analytics(GA) 和量子恒道统计(也称量子统计),数据有较大的偏差,仔细找相关资料研究了下,总结如下:
为何GA和量子网站统计(量子统计前身为雅虎统计)结果不同?
首先:没有一种网站统计工具能保证百分之百的准确出现该问题可能有以下几个原因:(1)不同的统计分析系统的算法机制不同;(2)统计代码放置的位置和前后
- 【Linux命令三】Top命令
bit1129
linux命令
Linux的Top命令类似于Windows的任务管理器,可以查看当前系统的运行情况,包括CPU、内存的使用情况等。如下是一个Top命令的执行结果:
top - 21:22:04 up 1 day, 23:49, 1 user, load average: 1.10, 1.66, 1.99
Tasks: 202 total, 4 running, 198 sl
- spring四种依赖注入方式
白糖_
spring
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我
- angular.injector
boyitech
AngularJSAngularJS API
angular.injector
描述: 创建一个injector对象, 调用injector对象的方法可以获得angular的service, 或者用来做依赖注入. 使用方法: angular.injector(modules, [strictDi]) 参数详解: Param Type Details mod
- java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
bylijinnan
Integer
public class PC {
/**
* 题目:生产者-消费者。
* 同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待。
*/
private static final Integer[] val=new Integer[10];
private static
- 使用Struts2.2.1配置
Chen.H
apachespringWebxmlstruts
Struts2.2.1 需要如下 jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar spring.jar
struts2-core-2.2.1.jar struts2-sp
- [职业与教育]青春之歌
comsci
教育
每个人都有自己的青春之歌............但是我要说的却不是青春...
大家如果在自己的职业生涯没有给自己以后创业留一点点机会,仅仅凭学历和人脉关系,是难以在竞争激烈的市场中生存下去的....
&nbs
- oracle连接(join)中使用using关键字
daizj
JOINoraclesqlusing
在oracle连接(join)中使用using关键字
34. View the Exhibit and examine the structure of the ORDERS and ORDER_ITEMS tables.
Evaluate the following SQL statement:
SELECT oi.order_id, product_id, order_date
FRO
- NIO示例
daysinsun
nio
NIO服务端代码:
public class NIOServer {
private Selector selector;
public void startServer(int port) throws IOException {
ServerSocketChannel serverChannel = ServerSocketChannel.open(
- C语言学习homework1
dcj3sjt126com
chomework
0、 课堂练习做完
1、使用sizeof计算出你所知道的所有的类型占用的空间。
int x;
sizeof(x);
sizeof(int);
# include <stdio.h>
int main(void)
{
int x1;
char x2;
double x3;
float x4;
printf(&quo
- select in order by , mysql排序
dcj3sjt126com
mysql
If i select like this:
SELECT id FROM users WHERE id IN(3,4,8,1);
This by default will select users in this order
1,3,4,8,
I would like to select them in the same order that i put IN() values so:
- 页面校验-新建项目
fanxiaolong
页面校验
$(document).ready(
function() {
var flag = true;
$('#changeform').submit(function() {
var projectScValNull = true;
var s ="";
var parent_id = $("#parent_id").v
- Ehcache(02)——ehcache.xml简介
234390216
ehcacheehcache.xml简介
ehcache.xml简介
ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信
- junit 4.11中三个新功能
jackyrong
java
junit 4.11中两个新增的功能,首先是注解中可以参数化,比如
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runn
- 国外程序员爱用苹果Mac电脑的10大理由
php教程分享
windowsPHPunixMicrosoftperl
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的
这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 wi
- 位运算、异或的实际应用
wenjinglian
位运算
一. 位操作基础,用一张表描述位操作符的应用规则并详细解释。
二. 常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。
三. 位操作与空间压缩,针对筛素数进行空间压缩。
&n
- weblogic部署项目出现的一些问题(持续补充中……)
Everyday都不同
weblogic部署失败
好吧,weblogic的问题确实……
问题一:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [zip:E:/weblogic/user_projects/domains/base_domain/serve
- tomcat7性能调优(01)
toknowme
tomcat7
Tomcat优化: 1、最大连接数最大线程等设置
<Connector port="8082" protocol="HTTP/1.1"
useBodyEncodingForURI="t
- PO VO DAO DTO BO TO概念与区别
xp9802
javaDAO设计模式bean领域模型
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出来,数据持