Spring中的注解大概可以分为两大类:
1、spring的bean容器相关的注解,或者说bean工厂相关的注解。
spring的bean容器相关的注解,先后有:@Required, @Autowired, @PostConstruct, @PreDestory,还有Spring3.0开始支持的JSR-330标准javax.inject.*中的注解(@Inject, @Named, @Qualifier, @Provider, @Scope, @Singleton)
2、springmvc相关的注解。
springmvc相关的注解有:@Controller, @RequestMapping, @RequestParam, @ResponseBody等等。
@Component :可以注解其他类注解(带有此注解的类看作组件、当使用基于此注解的配置和类路径扫描时,这些类会被实例化)把普通的pojo实例化到Spring容器中。不属于归类(@Controller、@Services等)可用该注解标注。
@Resource:实现依赖注入(name(解析为bean名字)、type(解析为bean类型))默认使用byName自动注入
@Override 提示编译器(必须和Override父类或者java.lang.Object中一个方法同名)为我验证方法名、验证重写的方法名正确性、也可以当注解用
@Autowired:自动注入
@Service: 为实例化后的对象取个名字(一般用于Service层)
@JsonIgnoreProperties: 类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
@Repostory: @Repository用于标注数据访问组件,即DAO组件
@Transactional: 是声明式事务管理 编程中使用的注解
Interface接口中的注解:
@Path:描述跟资源、子资源方法或子资源位置(@Path("/queryById"))
@Produces:转换返回数据格式(返回的内容类型)
@Consumes:处理清的提交内容类型,与上者相反
@Context、@WebParam、@QueryParam、@QueryParam
**@Controller:**控制器(注入服务)
@RequestMapping: 当所有的方法都将映射为相对于类级别的请求,表示该控制器处理的所有的请求都将被映射到value属性指示的路径下,例:@RequestMapping("/config")
@RequstBody: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
**@service:**服务(注入dao)
@repository:(实现dao访问)
pojo、javaBean、Entity区别:
1、javaBean(表示层):JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。更多的是一种规范,即包含一组set和get方法的java对象。
2、pojo:POJO在持久层的体现,对POJO持久化后就成了PO。PO更多的是跟数据库设计层面相关,一般PO与数据表对应,一个PO就是对应数据表的一条记录。
简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。一般在web应用程序中建立一个数据库的映射对象时,我们只能称他为POJO。理想的讲,一个POJO是一个不受任何限制的java对象。
与javaBean相比,javaBean则复杂很多,JavaBean是可复用的组件,对JavaBean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于JavaBean是被容器创建的,所以JavaBean应具有一个无参的构造器。
3、entity(业务层):实体bean,一般是用于ORM对象关系映射,一个实体映射成一张表,一般无业务逻辑代码。
负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个EntityBean对象相当于创建一条记录,删除一个EntityBean对象会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。
Java中DAO层、Service层和Controller层的区别
总结:
个人理解DAO面向表,Service面向业务。后端开发时先数据库设计出所有表,然后对每一张表设计出DAO层,然后根据具体的业务逻辑进一步封装DAO层成一个Service层,对外提供成一个服务。
1、DAO层:
DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。
2、Service层:
Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事物控制。
3、Controler层:
Controler负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。
src.java.com.bonc.portal
bean(实体类–表示层)
BaseBean:(作为父类,被继承BaseBean)pageInfo(分页显示)、idList(id列表)、objectList(目标列表)
MessageBean:(继承BaseBean)Message(公告)、userList(用户列表)
MessageLoginIdBean:(继承BaseBean)messageLoginId
OnlineUserBean:userLoginLog
OnlineUserInfoBean:menuName(菜单名称)、tenantId(租户id)、moduleMenuId(归属模块(一级)菜单ID)、moduleMenuName(归属模块(一级)菜单名称)
PortalLayoutBean(门户布局):portalLayout
PortalMenuClickLogBean:(菜单点击日志)PortalMenuClickLog
PortalMenuIconBean:(门户菜单图标)portalMenuIcon
PortalMenuinfoBean:(门户菜单信息)menuinfo
PortalPageBean:(门户分页)portalPage
PortalPortletBean:()portalPortlet、eventIds(事件)、eventNames(事件名字)
PortalPortletConfigBean:(上一个配置)portalPortletConfig
PortalPortletConfigInstanceBean:(配置实例)portalPortletConfigInstance
PortalPortletInstanceBean:portalPortletInstance(例子)
PortalPortletThemeBean:(主题)portalPortletTheme
PortalPortletTypeBean:(类型)portalPortletType、eventIds、eventNames
PortalThemeBean:(门户主题)portalThemeBean
PortletEventBean:(门户事件)portletEventBean
ResultInfo:(统一返回结果)success(结果 boolean类型)、message(信息)、params(参数)
IBaseDao(作为父类,被继承):saveOrUpdate(保存或更新、两个,参数(entity)不同)、delete(通过id删除)、deleteByCollection(根据集合删除)、findById、loadAll、findList(两个,参数(pageInfo页面信息、criterion(负载))不同)
IMenuinfoDao:findMenuinfos(查找菜单信息)、findAllMenus(查找全部菜单)、findMenusByIdAndIsDisable(查找菜单通过id并且isDisable为0或者isDisable 为空–使用hql(HQL是Hibernate Query Language的缩写,是一种面向对象的查询语言,类似于SQL,但不是针对表和列进行操作,而是针对对象和属性.))、findAllMenusBySql(通过sql语句进行查询菜单)、findMenusToEidt(通过???查找菜单)、findMenusByParent(通过???查找菜单)、findMenusByCode(通过编码查找菜单,两个方法,不同参数(菜单编码、菜单id))、updateMenuId(更新菜单id)、findMunuByProperty(通过???查找菜单)、updateMenuinfoByMenuinfoTypeId(更新菜单信息通过菜单类型id)、findMenuList(查找菜单列表)、findMenusByMenuCode(查找菜单通过菜单编码)
IMessageByLoginIdDao:(查找信息、删除)findListByLoginId(通过登录id)、findListByLoginIdAndMessageId(通过登录id和信息id)、deleteMessageUserRel(通过登录id、信息id)
IMessageDao:selCountByNoReadMsg(查询未读消息条数)、selCountByNoReadMsg(查询未读消息列表)、selCountMessage(查询消息条数)、modifyStatusAll(批量 修改消息已读状态)、modifyStatusAsNoReadAll(批量 修改消息未读状态)、delMsgByArray(批量 删除消息)、modifyStatus(单条修改状态)、selNoDeleteMessageList(查询未被删除消息列表)、selNoDeleteMessageCount(查询未被删除消息条数)、selNextNoReadMessage(查询下几条未读消息)、sendMessage(发送消息)、selAlreadySendMessage(查询已发送消息)、selAlreadySendMessageCount(查询已发送消息条数)、updateMessage(修改消息)、selMsgForRight(收件箱动态查询)、selMsgForRightCount(收件箱动态查询个数)、selMsgForSend(已发送动态查询)、(selMsgForSendCount)收件箱动态查询个数、selNextMessageList(查询有效的)、findMessagesList(管理员查询公告信息)、findMessagesCount(查询系统公告总条数)
IOnlineUserInfoDao:queryOnlineUserInfo(查询登录日志信息)、queryLastLogoutTime(获取退出后的最近一次登录时间)
IPortalFileDao:findFileByName(听过名字查找文件)
IPortalLayoutDao:getId(根据布局器内容获取布局器id)、getPortalLayout(根据布局器类型获取布局器)、findLayout、findLayoutDefault
IPortalMenuClickLogDao:querySumList(按菜单分组分页查询菜单点击统计)、querySumListDetail(按租户和菜单分组分页查询菜单点击统计)、queryUserClickLog(根据条件分组分页查询操作信息)
IPortalMenuIconDao: findIcons(查找图标)
IPortalMenuinfoTypeDao: findMenuinfoTypeByCode(查找菜单信息类型通过编码)
IPortalPageDao: getId(根据页面编码和名称获取页面id)、getPortalPage(根据页面编码获取portalPage)、updatePortalPageByThemeId(更新门户分页信息通过主题id)、findPortalPageByCode(查找门户信息通过编码)
IPortalPageExtDao: findByCode(根据code查询页面信息)、findPagesByCode(查出code为“code”的所有页面信息)
IPortalPortletDao: updatePortletByPortletTypeId(更新门户通过门户类型id)、findPortalPortletByCode(查找门户通过编码)
**IPortalPortletConfigInstanceDao: ** findByPorletId(通过用户id查找配置实例)、findByPortalPorletConfigId(通过用户配置id查找配置实例)、updateConfigInstanceByConfigId(通过配置id跟新配置信息)、updateConfigInstanceByInstanceId(通过实例id跟新配置信息)
IPortalPortletConfigDao: findByPorletId、findByPropCode、findOneByPropcode、updatePortletConfigByPortletId
IPortalPortletInstanceDao: findPortalPortletInstanceByPageId(通过页面id查找查找门户实例)、updatePortletInstanceByThemeId(通过主题id更新门户实例)、updatePortletInstanceByPortletId(通过PortletId更新门户实例)、updatePortletInstanceByPageId(通过页面id更新门户实例)
IPortalThemeDao: findThemeByCode(查找主题通过密码)、findThemeByThemeType(查找主题通过主题类型)
IPortletEventDao: deletePortletEventRel(删除门户事件)、findEventByPortletIdAndCode(通过门户组件id和密码查找事件)
entity(实体类–业务层–对数据库表的操作)
PageInfo(分页实体类): pageSize(分页大小)、totalPages(总页数 —计算 (this.totalCounts - 1) / this.pageSize + 1))、currentPage(当前页)、totalCounts(记录总条数)、firstResult(当前页开始显示记录数(limit第一个参数)(currentPage - 1) * pageSize)、sortType(排序类型(ASC(升序)、DESC(降序)))、sortAttribute(排序属性)、querys(精确匹配and)、matchMaps(模糊匹配or)
DbConnection(连接属性): dataurl、datausername、datapassword
Message(信息实体类): id、msgTitie、msgStatus(0/1)、msgSender(发件人)、msgCotent(信息内容)、startTime、endTime、timeSpan(时间跨度)、isEnable(是否确认)、msgReceiver(信息接收人)、msgPosition(邮件保存位置 0为接收者,1为发送者)、msgPosition(信息类型0为公告信息,1为私信信息)、name、receiverName(接收者姓名)、nextMessageTitle(下一个信息标题)、nextId(下一个信息id)、receiveType(接收类型)、encodeId(编码id)
.hbm.xml: 文件配置,Hibernate的核心就是对象关系映射,对象和关系型数据库之间的映射通常使用XML文档来实现。
主体框架
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping 可指明JavaBean所在包的全路径,例如---package="com.bonc.portal.entity.Message",与class 中那么功能一致,二选一>
<class name="类名"(可指明JavaBean所在包的全路径,例如---name="com.bonc.portal.entity.Message") table="表名">
//主键
<id name="属性(数据库中主键在JavaBean中的属性名称)" type="JavaBean中主键对象的类型属性类型">
<column name="数据库中表的字段名"/>
<generator class="主键映射方式"/>
hibernate中主键映射方式:
assigned:外部程序对id赋值
native:由数据库对id赋值
identity:采用数据库提供的主键生成机制
increment:主键按照数值顺序递增
sequence:采用数据库提供的sequence机制生成主键
foreign:使用外部表的字段作为主键
</id>
//表中字段映射
<property name="属性(数据库字段在JavaBean中属性名称)" type="属性类型">
<column name="数据库中真实字段,与JavaBean一一对应"/>
</property>
<!-- One-To-Many attributes -->
<!-- Many-To-One attributes -->
<!-- Many-To-Many attributes -->
//一对多关系:用在一个表与另一个表存在外键关联的时候,例如:一为组织表,多为用户表(一个组织包含多个用户,一个用户只能隶属于一个组织),“一”方要在映射文件中添加:
<set name="java映射类中对应的属性(JavaBean)" inverse="true" lazy="true">
<key column="表中对应字段"/>
//一对多:
<one-to-many class="多方的类(com.bonc.portal.entity.MessageFile)"/>
//多对一:
<many-to-one name="java映射类中对应的属性" column="表中对应字段" class="类名" not-null="true" />
//一对一
<!-- 其中主表的配置 -->
<one-to-one name="主表对象中子表对象的属性名" class="子表对象的类名"cascade="save-update"/>
<!-- 子表的配置 -->
<one-to-one name="子表对象中主表对象的属性名" class="主表对象的类名" constrained="true" />
//多对多
<many-to-many class="另一个表的对象类" column="另一个表的字段"/>
</set>
</class>
</hibernate-mapping>
Message.hbm.xml(例):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.bonc.portal.entity.Message" table="PORTAL_MESSAGE">
<id name="id" column="ID" type="java.lang.Long">
<generator class="native"/>
</id>
<property name="msgTitle" type="java.lang.String">
<column name="MSG_TITLE" length="50" not-null="false" unique="false"/>
</property>
<property name="receiveType" type="java.lang.Integer">
<column name="RECEIVE_TYPE" length="2" not-null="false" unique="false"></column>
</property>
<!-- One-To-Many attributes -->
<!-- Many-To-One attributes -->
<!-- Many-To-Many attributes -->
<set name="messageFiles" table="PORTAL_MESSAGE_FILE_REL" lazy="false" cascade="none" inverse="false" >
<key column="MESSAGE_ID"/>
<many-to-many class="com.bonc.portal.entity.MessageFile" column="MESSAGE_FILE_ID"/>
</set>
</class>
</hibernate-mapping>
MessageByLoginId(根据登录id的信息): id、loginId、messageId、readTime
MessageFile(信息文件): id、filePath(文件路径)、fileName、createDate
OnlineUserInfoHistory(在线的用户信息记录): id、appCode(app密码)、clientip(客户ip)、clientType、loginId、loginTime(登陆时间)、logoutTime(退出时间)、tenantId(租户id)
PortalFile(门户文件): id、fileName(文件名字)、saveName(保存名)、uploadDate(下载时间)
**PortalLayout(门户布局): ** isDefault(0/1)、layoutName(布局名称)、layoutTemplet(布局模板)、layoutData、id
PortalMenuClickLog:(菜单点击日志) id、menuId、menuCode(菜单编码)、menuUrl(菜单url)、menuName(菜单名称)、groupMenuId(归属分组(二级)菜单ID)、groupMenuName(归属分组(二级)菜单名称)、moduleMenuId(归属模块(一级)菜单ID)、moduleMenuName(归属模块(一级)菜单名称)、userId(用户id)、userLoginId(用户登录名 )、creatDate
PortalMenuIcon(用户菜单图标): id、iconCode(图标密码)
PortalMenuinfo:(用户菜单信息)
PortalMenuinfoType(门户菜单信息类型): menuinfoTypeName(菜单信息类型名称)、menuTypeCode(菜单类型码)、id
PortalPage(门户页面): id、pageName、description(描述)、org、role(角色)、code(码)、user、clientType(客户类型)
PortalMenuinfoType(门户菜单信息类型):
PortalTheme: id、description(描述)、themeName(主题名字)、themeType(默认为0,0代表门户主题,1代表页面主题)、themeFilePath(主题文件路径)
factory
**SpringWiredBean: ** (自动装配注解会让Spring通过类型匹配为beanFactory注入示例)getBeanById(实例方法,使用的时候先通过getInstance方法获取实例)
service(服务层对一个或多个dao进行再次封装,封装成一个服务需要事务控制)
util
ClassUtil: DeepClone(克隆对象)
ConstantUtil:
MessageTimeUtil: setTimeSpan(循环消息列表)
src.java.com.bonc.security
1、 src-main-java(com.bonc.security 处理后端逻辑)
integration.accountCenter
/* 成功状态码 */
SUCCESS(1, "成功"),
/* 参数错误:10001-19999 */
PARAM_IS_INVALID(10001, "参数无效"),
PARAM_IS_BLANK(10002, "参数为空"),
PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"),
PARAM_NOT_COMPLETE(10004, "参数缺失"),
/* 用户错误:20001-29999*/
USER_NOT_LOGGED_IN(20001, "用户未登录"),
USER_LOGIN_ERROR(20002, "账号不存在或密码错误"),
USER_ACCOUNT_FORBIDDEN(20003, "账号已被禁用"),
USER_NOT_EXIST(20004, "用户不存在"),
USER_HAS_EXISTED(20005, "用户已存在"),
/* 业务错误:30001-39999 */
SPECIFIED_QUESTIONED_USER_NOT_EXIST(30001, "某业务出现问题"),
/* 系统错误:40001-49999 */
SYSTEM_INNER_ERROR(40001, "系统繁忙,请稍后重试"),
/* 数据错误:50001-599999 */
RESULE_DATA_NONE(50001, "数据未找到"),
DATA_IS_WRONG(50002, "数据有误"),
DATA_ALREADY_EXISTED(50003, "数据已存在"),
DATA_HAS_BEEN_DELETED(50004,"数据已被删除"),
/* 接口错误:60001-69999 */
INTERFACE_INNER_INVOKE_ERROR(60001, "内部系统接口调用异常"),
INTERFACE_OUTTER_INVOKE_ERROR(60002, "外部系统接口调用异常"),
INTERFACE_FORBID_VISIT(60003, "该接口禁止访问"),
INTERFACE_ADDRESS_INVALID(60004, "接口地址无效"),
INTERFACE_REQUEST_TIMEOUT(60005, "接口请求超时"),
INTERFACE_EXCEED_LOAD(60006, "接口负载过高"),
/* 权限错误:70001-79999 */
PERMISSION_NO_ACCESS(70001, "无访问权限"),
/*租户错误: 80001-89999*/
TENANT_IS_INVALID(80001,"无效租户");
1、 src-main-java(com.bonc 处理后端逻辑)
portal
api
impl
BaseApiImpl抽象类(queryById通过id查询、queryAll、queryList)
MenuinfoApi(@Commpontent)继承BaseApiImpl实现ImenuinfoApi接口:IMenuinfoService(@Resource(name = “menuinfoService”))、IBaseService父类方法、findParentMenu和findMenuinfos(根据菜单名称、菜单编码查询 菜单)
MessageApiImpl(@Commpontent)继承BaseApiIMpl实现ImessageApi:ImessageService(@Resource(name = “messageService”))name自动依赖注入、IBaseService父类方法、、queryMsgInfo方法(创建消息列表、从数据库中查询未读消息列表、获取未读消息条数、创建消息时间设置工具、设置未读消息列表的时间差、创建JSON数组对象 、消息大于十条只读取十条(创建JSON对象,发送到前台))、alreadyRead(通过id找到message,设置状态为1更新message)、sendMessage(发送公告)、privateSendMessage(发送私人公告,request无法获取用户,通过参数传递参数)
PortalLayoutApiImpl(@Component)继承BaseApiImpl实现IportalLayoutApi:portalLayoutService(@Resourse 通过name依赖注入)、IBaseService父类方法、findPortalPages(通过Id获取PortalPages)
PortalLayoutApiImpl:findPortalPages
PortalPageApiImpl:findLayout(布局)、findTheme(主题)
PortalPortletApiImpl:findSubscriptionEvent、findPortalPortletInstances、findPortletEvents、findPortalPortletConfigs
PortalPortletConfigApiImpl:findPortlet、findPortalPortletConfigInstances
PortalPortletConfigInstanceApiImpl:findPortlet、findConfigProp
PortalPortletThemeApiImpl:findPortalPortletInstances
PortalThemeApiImpl:findPortalPages
PortletEventApiImpl:findPortlet、findPortalPortlets
RestApiImpl:findAllMenus、findMenusByParent、querySysPropertyAtPortletConfig、saveHomePageAtPortletConfig、findMenuByCode、findMenuByProperty、menuSaveOrUpdate、menuDelete(删除菜单)、initPage(添加页面、取默认布局器)、deletePage(删除页面)、setHomePageAtPortletConfig、findMenus(查找菜单)、changeSecretKey(更新密钥)、setHomePage(设置主页面)、queryMessage(查询公告)、updateMsgStatus(更新消息已读/未读公告状态)、getRole(获取角色)
util
util-designer
Designer:实体类
DesignerVo:Designer实体类
LoadPropertiesUtil:selectProperty、setProperties、getProperties
TestCurl:doGet、main
util
BasicApplication:getClasses、getSingletons
ChangeDataUtil:change(解密key、获取数据库连接信息、将数据库连接信息解密)、getNewDbConnection(解密secretKey、对数据库连接信息加密)、WriteDb(将加密后的数据库连接信息密文写入配置文件中)
ChangeSecretKeyUtil:getProperties(获取Properties对象)、setValue(新增/修改数据)
DESUtil:(通过三重DES算法,加密或解密数据)encrypt(加密)、decrypt(解密)、decrypt(DES数据解密)、encrypt(DES数据加密,使用默认的key)、encrypt(DES数据加密,参数不同)、byte2hex(二进制转字符串)
FileOprateUtil:( ZIP压缩文件操作工具类 支持密码)、delDirOrFile(删除文件)、unZipFiles(解压文件到指定目录)、imageToBase64(图片转BASE64)、base64ToImage(BASE转图片)、saveFileToPath(保存文件到指定路径)、getFileType(根据文件路径获取文件的文件头)
HtmlUtil:delHTMLTag(删除Html标签)、getTextFromHtml(过滤操作 )
HttpRequestDeviceUtils:(判定web请求的终端设备是手机吗)isMobileDevice(根据当前请求的特征,判断该请求是否来自手机终端,主要检测特殊的头信息,以及user-Agent这个header )、isIPadDevice(判断是否是Ipad 登录)
MyMenuinfoComparator:(菜单表比较器)
PatternTest:main(按照指定模式在字符串中查找)
PortletInitUtil:getTenantData(布局器初始化、主题初始化、页面初始化、组件主题初始化、获取配置文件路径、获取内容)、initWeather(门户组件初始化)、initCurrentUser(当前用户组件)、initCustomization(个性化定制组件)、initOnlineUser(在线用户组件)、initMessage(消息组件)、initHorizMenu(横向菜单组件)、initWorkspace(工作区间组件)、initTitleAndLogo(标题和和logo组件)、initColumMenu(列式菜单组件)、initPosition(地区组件)、queryIndex(查询数组中某一个元素的索引值)
QueryAnnounceUtil:(查询宣告)
ServletUtil:joinUriAndParms、getForwardRequestURI、getServletPath、getRequestValue、sendAsJson、sendAsText
TestUnicom:main(测试连通性)、ping(返回值为boolean,ture说明host是可用的,false为不可用)
Utils:getStringValue(根据key读取value)
WebClientUtil:baseRequest(rest方式获取网络资源)
vo实体类
OnlineUserInfoVO:id(主键)、orderId(序号、数据库动态生成)、loginId(租户登录id)、username(登录用户)、appCode(登陆方式)、clientip(用户IP)、loginTime(登陆时间)、tenantId(登录id)、tenantId(租户id)
PortalMenuClickLogSumVO:menuCode(菜单编码)、menuName(菜单名称)、groupName(归属分组名称)、moduleName(归属模块名称)、clickSum(点击次数)、clickProportion(点击占比)、tenantName(租户名称)
PortalMenuClickLogVO:id、orderId(序号、数据库动态生成)、createDate(创建时间)、menuName(菜单名称)、moduleMenuName(模块菜单名称)、groupMenuName(组菜单名称)
PortletInstanceVO:portletName(组件名)、portletThemeId,portletId(组件id)、height,width(实例height,width)、portalLayoutData(布局器layoutType)、isFloat(是否悬浮)、id,name(实例id、name)、sizeStatus(大小状态:最小,最大,普通)、integrateMethod(集成方式)、layoutData(布局定位数据)、viewUrl(查看地址)、maxUrl(最大化界面地址)、configUrl(配置界面地址)、icon(图标文件)、theme(主题风格)、code(组件编码)、registeEvents(注册的事件名称)、subscriptEvents(订阅的事件名称列表)、propertyValues(可配置属性的值集合)
web
action
filter
PortalTempletFilter实现Filter接口(处理url请示,读取真实的文件流,发到客户端)
listener
servlet
PortalServlet( * PortalServlet作用为拦截 *.page请求,取得页面的编码,然后到库里加载页面配置信息,然后再结合主题布局等模板, 最终縇染出html页面)
DecryptPropertyPlaceholderConfigurer:(配置文件数据源加密)
2、 src-webapp-WEB-INF(前端页面jsp):有一些什么功能
主要去看bonc-portal-core、bonc-security-core,需讲解有那儿写模块名,是干什么的,有什么功能,用了什么技术