jeesite框架

合集下载

JeeSite开发(一)——JeeSite4开发基础实例

JeeSite开发(一)——JeeSite4开发基础实例

JeeSite开发(⼀)——JeeSite4开发基础实例⽬录: 〇、开发环境 ⼀、JeeSite介绍 ⼆、获取JeeSite4 三、运⾏JeeSite后台(部署运⾏) 四、启动并访问 五、增加⼀个功能模块〇、开发环境 JDK1.8、eclipse、maven、MySQL57⼀、JeeSite介绍 JeeSite 基于最主流的 Spring Boot 2 + MyBatis + Shiro + J2Cache/Redis + Beetl 的稳定架构。

前端采⽤了⽬前极为流⾏的扁平化响应式的设计风格,可以完美兼容电脑,平板,⼿机等多个平台。

基于 jQuery + Bootstrap + AdminLTE 实现。

⽤JeeSite可以快速搭建⼀个web⽹站,⽽且可以不写或者只需写很少的业务代码。

⼆、获取JeeSite4 以下为其⽬录:三、运⾏JeeSite后台(部署运⾏)3.1 引⼊项⽬ 1.将以上的web⽬录复制到⾃⼰的⼯作⽬录,并按需重命名(例如:jeesite-demo)。

2.打开其中的poi.xml⽂件,修改其中的第⼗三⾏,改为您刚刚修改的⽂件夹名,例如:<artifactId>jeesite-demo</artifactId> 3.⽽后在eclipse中将其引⼊进来,右键空⽩处->Import->选择Maven下的Existing Maven Projects,点确定,此时Maven会⾃动加载依赖包,效果如下。

3.2 初始化数据库 1.配置my.ini:打开MySQL安装⽂件夹下的my.ini⽂件, 在[mysqld]下增加 sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 2.在MySQL中创建⽤户和数据库set global read_only=0;set global optimizer_switch='derived_merge=off';create user 'jeesite'@'%' identified by 'jeesite';create database jeesite DEFAULT CHARSET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';grant all privileges on jeesite.* to 'jeesite'@'%' identified by 'jeesite';flush privileges; 3.在刚刚引⼊的项⽬中,找到 /src/main/resources/config/application.yml ⽂件,修改MySQL数据库配置:# 数据库连接jdbc:# Mysql 数据库配置type: mysqldriver: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/jeesite?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNullusername: jeesitepassword: jeesitetestSql: SELECT 1 4.双击运⾏项⽬下的 /bin/init-data.bat 脚本,将会⾃动初始化数据库(建表)四、启动并访问 1.可在 /src/main/resources/config/application.yml ⽂件中修改服务器端⼝和部署路径server:port: 8980servlet:context-path: /jeesite-demotomcat:uri-encoding: UTF-8 2.启动:由于JeeSite集成了Spring boot框架,即内部集成了tomcat服务器,所以只需右键点击com.jeesite.modules.config.Application.java⽂件,再点击 Run As -> Java Application 即可启动服务。

高校学生公寓管理系统的设计与研究

高校学生公寓管理系统的设计与研究

2021.01科学技术创新高校学生公寓管理系统的设计与研究凌宇烽(哈尔滨商业大学计算机与信息工程学院电子信息工程专业,黑龙江哈尔滨150028)1概述宿舍是学校生活中十分重要的一部分,学生公寓管理方面的矛盾随着住宿规模的增大不断涌现,大部分高校的学生住宿管理使用人工操作的方式,弊端尤为明显,效率低下,管理起来麻烦重重。

为了满足大量的住宿需求所带来的繁琐操作,利用计算机系统进行学生公寓的日常管理显得尤为重要。

这不仅能够降低管理人员的工作量,也能够更加系统地管理学生公寓。

2学生公寓管理系统的相关技术简介2.1JSP JSP (全名为Java Server Pages ,java 服务器页面)是一种基于文本的程序,其特点就是HTML 和Java 代码共同存在,主要用于后端重定向到前端并推送数据。

JSP 说到底就是封装了Servlet 的java 程序。

Servlet 输出HTML 非常困难,而JSP 拥有相对易操作性并且继承了Java 的跨平台性,能够在很多平台上运行。

使用JSP 主要要学会使用JSTL 和EL 表达式。

2.2MySQLMySQL 是一个非常流行的关系型数据库管理系统,作为目前最为活跃热门的开源数据库之一,以低成本和简易操作的组合方案在互联网企业中被广泛采用而大放异彩。

mysql 安装包很小,并且安装十分简答,支持集成环境去集成。

另外,相较于价格不菲的Oracle 数据库,MySQL 作为开源数据库是完全免费的。

所以本系统使用MySQL8.0.18,优化了相关性能并且提升了管理、复制、安全方面的功能。

3学生公寓管理系统的需求分析当前高校的学生公寓管理通常费力,与学生之间很难实现上命下校,在具体管理过程中涉及非常多的人力操作。

而使用学生公寓管理系统之后,只需简单操作,就可对大量的数据进行查询,添加等相应的操作,提高工作效率。

本次设计在学校管理员将学生信息导入系统并将舍管信息录入系统后,不同用户登录系统后可执行相应操作,即学生用户和管理员用户登录后跳转至不同操作页面(图1)。

JEESITE快速开发平台(五)用户-角色-部门-区域-菜单-权限表关系

JEESITE快速开发平台(五)用户-角色-部门-区域-菜单-权限表关系

JEESITE快速开发平台(五)⽤户-⾓⾊-部门-区域-菜单-权限表关系⼀、表关系⼀共有8张表分别⽤来实现⽤户-⾓⾊-部门-区域-菜单-权限管理,详细如下:⼆、SQL语句[java]1. /*********************⼀共⼋张表************************/2.3. select * from sys_user; //⽤户表4. select * from sys_menu; //菜单表5. select * from sys_role; //⾓⾊表6. select * from sys_user_role; //⽤户⾓⾊表7. select * from sys_role_menu; //⾓⾊与菜单表8. select * from sys_area; //区域表9. select * from sys_office; //公司和部门表10. select * from sys_role_office; //⾓⾊与部门表11.12. /*********************⽤户关联⾓⾊************************/13.14. select * from sys_user where id='11'15. select * from sys_user_role where user_id='11'16. select * from sys_role where id='3'17.18. select count(1),user_id from sys_user_role GROUP BY user_id19. select count(*) from sys_user_role where user_id='1'20.21. select , as rolename from (select * from sys_user where id='1') us22. left JOIN sys_user_role usrole on us.id=er_id23. LEFT JOIN sys_role sr on usrole.role_id = sr.id24.25. /****以⽤户表为主表(通过sys_user的ID关联sys_user_role中的user_id,然后再通过sys_user_role中的role_Id关联⾓⾊表)****/26. select as username, as rolename from sys_user su27. LEFT JOIN sys_user_role sur on su.id = er_id28. LEFT JOIN sys_role sr on sur.role_id = sr.id29.30. /****以⾓⾊表为主表(通过sys_role的id关联sys_user_role中的role_id,然后再通过sys_user_role中的user_id关联sys_ser表中的id)****/31. SELECT as uname, as rolename FROM sys_role a32. LEFT JOIN sys_user_role ur ON ur.role_id = a.id33. LEFT JOIN sys_user u ON u.id = er_id34.35. select * from sys_user_role; //⽤户⾓⾊表36. select * from sys_role; //⾓⾊表37.38.39. /*********************⾓⾊关联菜单************************/40.41. /****以⾓⾊表为主表****/42. SELECT u.id as userid, as username,a.id as roleid, as rolename, menuname FROM sys_role a43. LEFT JOIN sys_user_role ur ON ur.role_id = a.id44. LEFT JOIN sys_user u ON u.id = er_id45. LEFT JOIN sys_role_menu srm on srm.role_id = a.id46. LEFT JOIN sys_menu sm on srm.menu_id = sm.id47.48. select as menuname FROM sys_menu a49.50. select as menuname FROM sys_menu a51. LEFT JOIN sys_menu p ON p.id = a.parent_id52.53. /****以菜单表为主表****/54. select as menuname, as rolename, as username FROM sys_menu a55. LEFT JOIN sys_menu p ON p.id = a.parent_id56. JOIN sys_role_menu rm ON rm.menu_id = a.id57. JOIN sys_role r ON r.id = rm.role_id AND eable='1'58. JOIN sys_user_role ur ON ur.role_id = r.id59. JOIN sys_user u ON u.id = er_id60.61. select * from sys_user_role; //⽤户⾓⾊表62. select * from sys_role; //⾓⾊表63. select * from sys_role_menu; //⾓⾊与菜单表64.65.66. /*********************⽤户关联公司和部门************************/67.68. /****通过company_id关联机构表中的公司****/69.70. select as username, as companyname from sys_user su71. LEFT JOIN sys_office so on pany_id = so.id72.73. select of.* from sys_user us74. left JOIN sys_office of on pany_id = of.id where us.id='11'75.76. /****通过office_id关联机构表的部门****/77. select as username, as officename from sys_user su78. LEFT JOIN sys_office so on su.office_id = so.id79.80. select of.* from sys_user us81. left JOIN sys_office of on us.office_id = of.id where us.id='11'82.83. select * from sys_user; //⽤户表84. select * from sys_office; //公司和部门表85.86. /*********************⾓⾊关联公司和部门************************/87.88. /******通过sys_role中的id然后关联sys_user_role表中的role_id,然后再通过sys_user_role中的user_id关联sys_user中的id89. 然后再通过sys_role_office中的role_id关联sys_role中的id,最后通过sys_role_office中的office_id关联sys_office中的id*****/90. SELECT as uname,a.id as roleid, as rolename, as officename FROM sys_role a91. LEFT JOIN sys_user_role ur ON ur.role_id = a.id92. LEFT JOIN sys_user u ON u.id = er_id93. LEFT JOIN sys_role_office sro on a.id = sro.role_id94. LEFT JOIN sys_office so on sro.office_id = so.id95.96. select * from sys_user; //⽤户表97. select * from sys_user_role; //⽤户⾓⾊表98. select * from sys_role; //⾓⾊表99. select * from sys_office; //公司和部门表100. select * from sys_role_office; //⾓⾊与部门表101.102. /*********************公司和部关联区域表************************/103.104. /******通过sys_office中的area_id然后关联sys_area表中的id*****/105. select as officename, as areaname from sys_office of106. LEFT JOIN sys_area ar on of.area_id=ar.id107.108. select * from sys_area; //区域表109. select * from sys_office; //公司和部门表。

jeesite 说明文档-3.内置组件的应用

jeesite  说明文档-3.内置组件的应用

第3章内置组件的应用作者:ThinkGem更新日期:2014-01-05 1.常用组件1.1.布局组件布局文件配置:/ jeesite/src/main/webapp/WEB-INF/decorators.xml默认布局文件:/ jeesite/src/main/webapp/WEB-INF/views/layouts/default.jsp非公共,自己建立的布局文件:/ jeesite/src/main/webapp/WEB-INF/views/模块路径/layouts/布局文件.jsp 使用布局文件:JSP的head里添加:<meta name="decorator" content="default"/>1.2.用户工具UserUtils.java fns.tld应用场景:在java文件或jsp页面上,获取当前用户相关信息1.获取当前用户:1)UserUtils.getUser();2)entity.currentUser()3)${fns:getUser()}2.获取当前用户部门:1)UserUtils.getOfficeList()2)${fns:getOfficeList()}3.获取当前用户区域:1)UserUtils.getAreaList()2)${fns:getAreaList()}4.获取当前用户菜单:1)UserUtils.getMenuList()2)${fns:getMenuList()}5.获取当前用户缓存:1)UserUtils.getCache(key);2)${fns:getCache(cacheName, defaultValue)}6.设置当前用户缓存:1)UserUtils.putCache(key);1.3.全局缓存CacheUtils.java应用场景:系统字典1.设置应用程序缓存:CacheUtils.put(key);2.获取应用程序缓存:CacheUtils.get(key);1.4.字典工具DictUtils.java应用场景:系统全局固定的字典数据,java或jsp中获取字典相关数据。

jeesite js 调用java方法

jeesite js 调用java方法

阅读文章全文,其构成专注于深度和广度的要求并包含了丰富的技术性讨论,如下所述:1. 介绍在当今数字化世界中,前端和后端技术的结合变得愈发重要。

jeesite js 调用 Java 方法正是这种结合中的一个关键环节。

在本文中,我们将深入探讨这一主题,并为您提供详细的指南和见解。

2. 深入了解jeesite js让我们对jeesite js 进行简要介绍。

jeesite是一款基于Spring框架的开源企业级应用开发框架,而jeesite js则是其前端部分。

它提供了丰富的前端功能,允许开发者与后端Java方法进行交互。

在接下来的部分,我们将深入讨论jeesite js 如何调用后端的Java方法。

3. 调用Java方法的基本步骤在使用jeesite js 调用Java方法之前,有几个基本步骤需要遵循。

我们需要确保在后端Java代码中已经编写了需要调用的方法。

在jeesite js 中,我们需要设置好相关的参数和路径,以确保前端可以正确地与后端进行通信。

在接下来的章节中,我们将对这些步骤进行更详细的探讨。

4. 深度探讨jeesite js 调用Java方法的具体实现现在让我们深入讨论jeesite js 如何调用Java方法。

我们需要在jeesite js 中使用ajax方法,以便发起对后端方法的调用。

我们需要定义后端方法的路径和参数,使得前端可以正确地传递数据给后端。

在后端Java代码中,我们需要编写对应的方法,以接收并处理前端传递的数据。

通过在jeesite js 中调用这些方法,我们可以实现前后端的完美交互。

5. 总结与回顾通过本文的讨论,我们对jeesite js 调用Java方法有了更深入的了解。

我们深入探讨了基本步骤和具体实现方法,并希望这些内容能够为您在实际开发中带来帮助。

我们也意识到在前后端交互中需要严格的参数和路径设置,以确保数据的正确传输和处理。

6. 个人观点与理解对于jeesite js 调用Java方法这一主题,我个人认为它是前后端交互中的一项关键技术。

jeesite 字段控制

jeesite 字段控制

jeesite 字段控制Jeesite字段控制为标题,下面将介绍Jeesite中的字段控制功能以及它的作用。

一、什么是Jeesite字段控制?Jeesite是一款基于Java开发的开源框架,用于快速搭建企业级Java Web应用。

在Jeesite中,字段控制是指通过对表单中的字段进行配置和管理,实现对字段的显示、验证、权限等方面的控制。

通过字段控制,开发人员可以灵活地对表单进行定制,满足不同业务需求。

二、字段控制的作用1. 显示控制:字段控制可以根据业务需求决定字段是否显示。

例如,在某些情况下,某个字段可能需要隐藏起来,只在特定条件下才显示出来,通过字段控制就可以实现这一功能。

2. 验证控制:字段控制可以对字段进行验证,确保用户输入的数据符合一定的规则和格式。

例如,对于手机号码字段,可以通过字段控制设置必须为11位数字的验证规则。

3. 权限控制:字段控制可以对字段的访问权限进行管理。

通过字段控制,可以设置某些字段只能由特定角色或用户访问,从而实现对敏感数据的保护。

4. 其他控制:字段控制还可以实现其他一些功能,如字段的默认值设置、只读控制等。

三、如何进行字段控制在Jeesite中,字段控制是通过在实体类中使用注解来实现的。

以下是一些常用的字段控制注解:1. @FormField:用于配置字段的显示名称、验证规则等信息。

2. @ExcelField:用于配置字段在Excel导入导出时的相关信息。

3. @ShowInView:用于配置字段在列表、详情等页面中的显示方式。

4. @DataScope:用于配置字段的权限控制范围。

5. @DictType:用于配置字段的字典类型,实现数据字典的功能。

四、字段控制的实例下面以一个示例来说明字段控制的实际应用。

假设有一个用户管理系统,其中包含一个用户信息表,需要对用户信息进行管理和展示。

在这个示例中,我们可以使用字段控制来实现以下功能:1. 设置用户名字段为必填项,并限制长度为6-20个字符。

jeesite 的save 方法

jeesite 的save 方法

jeesite 的save 方法【原创版6篇】篇1 目录1.jeesite 的 save 方法的概述2.save 方法的主要功能3.save 方法的使用方法4.save 方法的优点和局限性5.总结篇1正文一、jeesite 的 save 方法的概述jeesite 是一款非常实用的网站开发框架,它提供了许多高效的工具和方法,以帮助开发者快速构建高质量的网站。

在 jeesite 中,save 方法是一个非常重要的方法,它可以帮助开发者实现数据的保存和更新。

二、save 方法的主要功能save 方法的主要功能是保存和更新数据。

它可以帮助开发者将数据保存到数据库中,同时也可以更新已有的数据。

在使用 save 方法时,开发者可以根据需要指定数据的保存条件和更新策略。

三、save 方法的使用方法在使用 save 方法时,开发者需要首先创建一个数据模型,然后通过调用 save 方法来保存或更新数据。

以下是一个简单的示例:```// 创建一个数据模型class User {// 构造函数constructor(name, age) { = name;this.age = age;}}// 保存数据const user = new User("Tom", 25);user.save(); // 将数据保存到数据库中```四、save 方法的优点和局限性save 方法的优点在于它可以帮助开发者快速地保存和更新数据,同时也可以方便地管理数据的状态。

然而,save 方法也存在一些局限性,例如它只能用于保存和更新简单的数据模型,对于复杂的数据结构和业务逻辑,需要开发者自行实现。

五、总结总的来说,jeesite 的 save 方法是一个非常实用的工具,它可以帮助开发者快速地保存和更新数据。

篇2 目录1.jeesite 的 save 方法的概述2.save 方法的参数3.save 方法的使用示例4.save 方法的优点和局限性篇2正文一、jeesite 的 save 方法的概述jeesite 是一款非常实用的 Java 模板引擎,它提供了许多功能强大的 API,使得开发者能够轻松地实现各种复杂的业务逻辑。

jeesite 说明文档-2.文件结构与配置

jeesite  说明文档-2.文件结构与配置

第2章文件结构与配置作者:ThinkGem更新日期:2014-4-8 1.文件结构1.1.源码目录src/main/java1.2.资源目录src/main/resource1.3.发布目录src/main/webapp1.4.执行目录dbbin2.jeesite.properties2.1.数据源配置# 数据库驱动,连接设置。

jdbc.driver=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orclername=jeesitejdbc.password=123456# 连接池设置,初始大小,最小,最大连接数。

jdbc.pool.init=1jdbc.pool.minIdle=3jdbc.pool.maxActive=20# 测试连接sql语句jdbc.testSql=SELECT'x'FROM DUAL2.2.系统配置# 配置产品名称,版权日期和版本号productName=JeeSite AdmincopyrightYear=2014version=V1.1.1# 是否是演示模式,如果是,则如下模块,无法进行保存操作# sys: area/office/user/role/menu/dict, cms: site/category demoMode=false# 管理端跟路径adminPath=/a# 前端跟路径frontPath=/f# 信息发布时的URL后缀,可配置HTML后缀的页面进行缓存urlSuffix=.html# 分页大小,默认每页15条page.pageSize=15# 硕正组件是否使用Cache(一般开发阶段,关闭Cache)eCache=false# 设置通知间隔访问时间,单位毫秒.oa.notify.remind.interval=600002.3.框架参数配置# 设置SESSION超时时间,web.xml里设置无效,单位毫秒. session.sessionTimeout=120000session.sessionTimeoutClean=120000# 缓存设置ehcache.configFile=cache/ehcache-local.xml#ehcache.configFile=cache/ehcache-rmi.xml# 首页地址web.view.index=/a# 视图文件配置,前缀和后缀web.view.prefix=/WEB-INF/views/web.view.suffix=.jsp# 最大上传字节数 10M=10*1024*1024(B)=10485760web.maxUploadSize=10485760# 设置日志拦截器,拦击的URI,@RequestMapping 值web.logInterceptExcludeUri=/,/login,/sys/menu/tree,/sys/menu/treeData,/oa/oaNotify/self/countweb.logInterceptIncludeRequestMapping=save,delete,import,updateSort# 工作流配置activiti.isSynActivitiIndetity=falseactiviti.export.diagram.path=c:/activiti_diagram#activiti font (windows font: \u5B8B\u4F53 linux font: simsun)activiti.diagram.activityFontName=\u5B8B\u4F53belFontName=\u5B8B\u4F53activiti.form.server.url=http://127.0.0.1:8075/xxxx3.pom.xml3.1.修改项目名称artifactId:项目名称version:版本修改完成后运行eclipse.bat重新生成项目文件。

JeeSite

JeeSite

JeeSite企业信息管理系统基础框架目录1.JEESITE概述 (4)1.1.简介 (4)1.2.为何选择 (4)1.3.相关技术 (5)1.4.安全考虑 (6)2.管理功能演示 (7)2.1.管理登录 (7)2.1.1.登录界面 (7)2.1.2.主题切换 (8)2.2.总体介绍 (11)2.2.1.客户端验证 (11)2.2.2.提交结果信息 (11)2.3.控制面板 (12)2.3.1.个人资料 (12)2.3.2.修改密码 (12)2.4.机构用户 (12)2.4.1.用户管理 (12)2.4.2.机构管理 (14)2.4.3.区域管理 (16)2.5.系统设置 (18)2.5.1.菜单管理 (18)2.5.2.角色管理 (19)2.5.3.字典管理 (21)2.6.内容管理 (22)2.6.1.内容管理 (22)2.6.2.评论管理 (27)2.6.3.栏目管理 (28)2.6.4.站点管理 (29)2.6.5.公共留言 (31)2.6.6.文件管理 (32)2.6.7.网站展示(基础主题) (34)3.功能组件 (40)3.1.U TILS (41)3.2.T AGLIB (42)3.3.EL F UNCTION (42)3.4.J AVA S CRIPT (42)4.快速体验 (42)4.1.在线体验 (42)4.2.本地体验 (43)5.交流、反馈、参与贡献 (43)6.未来开发计划 (43)1.JeeSite概述1.1.简介JeeSite是一个开源的企业信息管理系统基础框架。

主要定位于“企业信息管理”领域,可用作企业信息管理类系统、网站后台管理类系统等。

JeeSite是非常强调开发的高效性、健壮性和安全性的。

JeeSite是轻量级的,简单易学,本框架以Spring Framework为核心、Spring MVC(相比Struts2更容易上手、更易用)作为模型视图控制器、Spring Data JPA + Hibernate作为数据库操作层,此组合是Java界业内最经典、最优的搭配组合进行封装。

jeesite流程

jeesite流程

Jeesite流程1.Jeesite流程2.关于shiro授权3.Orm对象关系映射4.Mybatis的总体流程是一.Jeesite流程(主要是jsp,entity,dao,dao.xml,service,controller)(1).MyBatisRegisterDao.xml(2).MyBatisRegisterDao.java(3).Register.java实体(4).RegisterService.java(5).RegisterController.java(6).Register.jsp二.关于shiro授权1.Shiro授权的三要素是:权限,角色,用户2.三要素的关联:因为通过声明权限我们仅仅能了解这个权限在项目中能做什么,而不能确定谁有这个权限,所以,我们需要在应用程序中对用户和权限建立关系。

3.在项目上: 我们一般将权限分配给某个角色,然后将这个角色分配给一个或多个用户,例如:修改的权限是只有管理员才拥护的,那么,在这个时候,管理员就相当于被设于拥有修改权限的用户,4.shiro支持三种授权方式:编码实现,注解实现,jsp Tag实现三.Orm对象关系映射1.用于实现面向对象编程语言里不同类型系统的数据之间的转换2.在jeesite框架中用到的就是mybatis四.Mybatis的总体流程是1.加载配置并初始化,其触发条件是加载配置文件将SQL 的配置信息加载成为一个个MappingStatement对象(包括传入参数映射配置,执行的sql语句,结果映射配置) 存储在内存中2.接收调用请求,其触发条件是调用mybatis中的api,将请求传递给下层的请求处理层处理3.处理操作请求,api接口层传递传递请求过来,传入sql的id和传入参数,根据sql的id查找对应的MappingStatement对象,和传入参数对象解析MappingStatement对象,得到最终要执行的sql和执行传入参数,后获取数据库连接,根据最终得到的sql语句和传入参数到数据库执行,得到最终的处理结果,最后释放资源4.将最终处理结果返回。

Jeesite_05、菜单权限、功能权限、按钮权限、用户工具、Shiro

Jeesite_05、菜单权限、功能权限、按钮权限、用户工具、Shiro

菜单权限、功能权限、按钮权限、用户工具、Shiro - JeeSite 4.x•用户身份认证•用户权限授权•权限管理模型•管理员类型:•菜单权重•支持四种授权方式–编程式–注解式–视图页–基于URI拦截•相关常用工具类Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。

只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。

用户身份认证用户去访问系统,系统需要验证用户身份的合法性,证明你是否是合法的用户。

最常用的用户身份验证的方法:1.用户名、密码方式2.用户名、安全密钥方式3.基于硬件或证书验证方法系统验证用户身份合法,用户方可访问系统的资源。

从用户认证我们可以抽取出:•主体对象(Subject):理解为用户,可能是程序,都要去访问系统的资源,系统需要对subject进行身份认证,获取方法:UserUtils.getSubject()•身份信息(Principal):通常是唯一的,一个主体还有多个身份信息,但是都有一个主身份信息(Primary principal),获取方法:UserUtils.getLoginInfo()用户权限授权可简单理解为访问控制,在用户身份认证通过后,系统对用户访问菜单或按钮进行控制。

也就是说,该用户有身份进入系统了,但他不一定能访问系统里的所有菜单或按钮,而他只能访问管理员给他分配的权限菜单或按钮。

•Permission(权限标识):针对系统访问资源的权限标识,如:用户添加、用户修改、用户删除,判断方法:UserUtils.getSubject().isPermitted(permissions);JeeSite的权限标识在菜单管理里设置权限管理模型•用户:登录账号、密码、用户类型•角色:角色名称、归属用户类型•菜单:菜单名称、菜单URL、权限标识•用户角色关系:用户编码、角色编码•角色菜单关系:角色编码、菜单编码管理员类型:•超级管理员:主要为开发者使用的最高级别管理员,主要用于开发和调试,有些修改会直接影响系统的正常运行。

jeesite 解析html代码

jeesite 解析html代码

jeesite 解析html代码Jeesite: 解析HTML代码HTML (Hypertext Markup Language) 是用于构建网页的一种标记语言。

在web 开发中,解析HTML代码是一个常见的任务,开发人员经常需要从HTML中抓取数据、分析结构或进行其他操作。

Jeesite是一个基于Java的开源框架,提供了许多功能来简化web应用程序的开发和管理,包括解析HTML代码的能力。

本文将介绍如何使用Jeesite解析HTML代码。

首先,我们需要在项目中引入Jeesite框架的依赖包。

可以在项目的pom.xml文件中添加以下代码:```xml<dependency><groupId>com.jeesite</groupId><artifactId>jeesite-module</artifactId><version>1.0.0</version></dependency>```完成依赖包的添加后,我们可以开始编写代码来解析HTML代码。

```javaimport mon.utils.StringUtils;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;public class HTMLParser {public static void main(String[] args) {String html = "<html><head><title>Example</title></head><body><h1>Hello, world!</h1></body></html>";// 使用Jsoup解析HTML代码Document doc = Jsoup.parse(html);// 获取HTML的title标签内容String title = doc.title();System.out.println("Title: " + title);// 获取HTML的h1标签内容Element h1Element = doc.selectFirst("h1");String h1Text = h1Element.text();System.out.println("H1: " + h1Text);// 遍历HTML中的所有链接Elements links = doc.select("a");for (Element link : links) {String linkHref = link.attr("href");String linkText = link.text();System.out.println("Link: " + linkText + " (" + linkHref + ")");}// 获取HTML中的所有文本内容String text = doc.body().text();System.out.println("Text: " + text);}}```上述代码中,我们首先定义了一个html变量,它包含了待解析的HTML代码。

jeesite elastisearch 全文检索实践

jeesite elastisearch 全文检索实践

jeesite elastisearch 全文检索实践JeeSite Elasticsearch 全文检索实践在当今信息爆炸的时代,有效地检索和管理大量的数据变得尤为重要。

而对于开发者和系统管理员来说,如何构建一个高效的全文检索系统也是一项具有挑战性的任务。

JeeSite作为一个成熟的Java开发框架,为我们提供了一个简单且强大的解决方案,将Elasticsearch与JeeSite框架相结合,可以快速实现高效的全文检索。

一、什么是Elasticsearch?Elasticsearch是一个开源的分布式全文检索引擎,它构建在Apache Lucene之上,并实现了全文检索和分析引擎的分布式特性。

它具有快速、可扩展和易于使用的特点,并支持复杂的查询和分析。

Elasticsearch采用倒排索引的方式存储数据,并通过分片和副本的方式实现高可用性和容错性。

二、为什么选择Elasticsearch?相比于传统的关系数据库,Elasticsearch具有以下几点优势:1. 高性能:Elasticsearch利用倒排索引和分布式架构,可以快速地进行全文检索和复杂查询。

它还支持实时索引和数据更新,所以非常适合实时应用。

2. 可扩展性:Elasticsearch可以轻松地扩展到数百台服务器,通过分片和副本的方式实现负载均衡和容错性。

3. 强大的查询功能:Elasticsearch支持全文搜索、过滤、聚合等强大的查询功能,可以满足各种复杂的检索需求。

4. 多语言支持:Elasticsearch支持多种语言的分析和处理,可以处理各种语言的全文搜索和分析需求。

三、如何在JeeSite中使用Elasticsearch?在JeeSite中使用Elasticsearch,需要进行以下几个步骤:1. 安装Elasticsearch:首先需要将Elasticsearch安装在服务器上,并启动Elasticsearch服务。

2. 配置JeeSite:在JeeSite的配置文件中,需要添加Elasticsearch相关的配置,包括Elasticsearch服务器地址、索引名称等。

jeesite 说明文档-5.硕正WEB组件的应用

jeesite  说明文档-5.硕正WEB组件的应用

第5章硕正WEB组件的应用作者:ThinkGem更新日期:2014-01-03 1.简介硕正描述格式采用XML,数据格式采用JSON。

原因如下:描述采用XML 可表现比较复杂的结构,易于官方文档查找好对应;数据采用JSON格式原因有三点,一是JSON官方有很好的支持;二是JSON格式比较简单并解析速度快,三是JSON相比XML要小,节省流量。

后台采用注解方式配置,自动返回描述XML字符串和数据JSON字符串。

●描述文件XML注解配置请参考本文第2章;●数据格式JSON注解配置请参考Jackson注解,官方网站2.树列表注解实例代码见TestController.java,testList.jsp文件,演示页面如下:2.1.调用实例@SupTreeList(properties=@SupProperties(headerFontIndex="2", curSelBgColor="#ccddcc", displayMask="backColor=if(name='管理员', '#ff0000', transparent)",expresses={@SupExpress(text="total=round(price*num, 2)"),@SupExpress(text="price=round(total/num, 4)")}),fonts={@SupFont(faceName="宋体", weight="400"),@SupFont(faceName="楷体", weight="700", height="-12"),@SupFont(faceName="楷体", weight="400", height="-12")}, groups={@SupGroup(id="date", name="日期", headerFontIndex="1", sort=50),@SupGroup(id="date2", name="日期2", headerFontIndex="2", sort=60, parentId="date"),@SupGroup(id="date3", name="日期3", headerFontIndex="2", sort=70, parentId="date")})实体配置,参考类: Test.java2.2.@SupTreeList硕正总体注解硕正主要注解,只可以定义到类之上。

JEE企业信息系统应用体系框架介绍

JEE企业信息系统应用体系框架介绍

WebService
JNDI
J2EE API
WTC
JTA/JTS
数据仓库
电费计算服务
收费前置机 银行前置机
收费记帐服务 其它服务 Texudo server 报表服务 COM service
目录服务 报表数据 库
ODBC/ADO
胖客户端
以Struts作为基本WEB框架
Struts Struts TagLib Controller
随着用电数据量的逐步累积,连接数的增 多,并发操作频繁,主机负载加重,系统 的维护、性能需求日益迫切 电费计算、收费业务并发性强,在数据 量大、数据库连接数多的情况下,性能 需求难以保证,尤其是导致收费响应速 度慢时,不能为客户提供优质服务,无 法适应市场开拓需要 业务部署和维护涉及到每一个客户机 业务的管理涉及到每一个客户机 业务安全性涉及到每一个客户机 原电费计算直接访问数据库,主机负载大
业务逻辑、展现逻辑、数据逻辑层次清晰
系统伸缩能力
轻松进行系统的升级 提供Load Balance、Fail Over等附加功能
系统性能
队列机制、负载分担保证卓越的系统性能
系统安全性
良好的安全性保证
系统开发
•组件化开发、软件总线结构
计费、收费服务的体系结构
客户工作站 执行表示逻辑(收集输入信息, 发送请求,展示处理结果)
企业级应用平台
J2EE 由Sun公司为首的Java标准组织JCP提出标准, 各商业软件公司和开放源码组织根据标准实现符 合标准的产品。 .Net 由Microsoft提出的分布式企业应用框架,目前, 解决方案局限于微软的操作系统。
PART 1, 体系结构
Why J2EE?

关于jeesite工作流使用样例说明

关于jeesite工作流使用样例说明

一、场景介绍Jeesite使用的是activiti工作流,本次我们主要用于实现简单的审批流程:1、审批环节和修改环节执行前需要动态分配调用对象2、流程变量中需要记录事项id,方便整个流程获取二、模型建立<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="/spec/BPMN/20100524/MODEL" xmlns:xsi="/2001/XMLSchema-instance" xmlns:xsd="/2001/XMLSchema" xmlns:activiti="/bpmn" xmlns:bpmndi="/spec/BPMN/20100524/DI" xmlns:omgdc="/spec/DD/20100524/DC" xmlns:omgdi="/spec/DD/20100524/DI" typeLanguage="/2001/XMLSchema" expressionLanguage="/1999/XPath" targetNamespace="/processdef"><process id="approve_process" name="业务受理" isExecutable="true"><startEvent id="start" name="开始" activiti:formKey="/ywsl/auditProcess/form"></startEvent><userTask id="audit" name="审批" activiti:formKey="/ywsl/auditProcess/audit"><extensionElements><activiti:taskListener event="create" delegateExpression="${candidateListener}"></activiti:taskListener></extensionElements></userTask><sequenceFlow id="sid-8955ECAD-719A-47C1-A41F-A32EA610C5DF" sourceRef="start" targetRef="audit"></sequenceFlow> <exclusiveGateway id="sid"></exclusiveGateway><sequenceFlow id="sid-D0995983-1EB6-4648-AB81-288CB62D94DE" sourceRef="audit" targetRef="sid"></sequenceFlow><endEvent id="sid-6C375AA3-07B6-4F46-9816-BFAA99CE9BDC" name="结束"></endEvent><userTask id="update" name="修改"><extensionElements><activiti:taskListener event="create" delegateExpression="${assigneeListener}"></activiti:taskListener></extensionElements></userTask><sequenceFlow id="sid-2461127D-B47F-4361-A472-D8C565E2DB15" sourceRef="update" targetRef="audit"></sequenceFlow> <sequenceFlow id="pass" name="通过" sourceRef="sid" targetRef="sid-6C375AA3-07B6-4F46-9816-BFAA99CE9BDC"><conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass == 1}]]></conditionExpression></sequenceFlow><sequenceFlow id="reject" name="驳回" sourceRef="sid" targetRef="update"><conditionExpression xsi:type="tFormalExpression"><![CDATA[${pass == 0}]]></conditionExpression></sequenceFlow></process><bpmndi:BPMNDiagram id="BPMNDiagram_approve_process"><bpmndi:BPMNPlane bpmnElement="approve_process" id="BPMNPlane_approve_process"><bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start"><omgdc:Bounds height="30.0" width="30.0" x="162.3333282470703" y="155.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="audit" id="BPMNShape_audit"><omgdc:Bounds height="80.0" width="100.0" x="237.3333282470703" y="130.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid" id="BPMNShape_sid"><omgdc:Bounds height="40.0" width="40.0" x="420.0" y="150.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid-6C375AA3-07B6-4F46-9816-BFAA99CE9BDC" id="BPMNShape_sid-6C375AA3-07B6-4F46-9816-BFAA99CE9BDC"><omgdc:Bounds height="28.0" width="28.0" x="525.0" y="156.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="update" id="BPMNShape_update"><omgdc:Bounds height="80.0" width="100.0" x="390.0" y="15.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNEdge bpmnElement="reject" id="BPMNEdge_reject"><omgdi:waypoint x="440.4130434782609" y="150.41304347826087"></omgdi:waypoint><omgdi:waypoint x="440.17316017316017" y="95.0"></omgdi:waypoint><bpmndi:BPMNLabel><omgdc:Bounds height="0.0" width="0.0" x="440.4130434782609" y="150.41304347826087"></omgdc:Bounds></bpmndi:BPMNLabel></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-8955ECAD-719A-47C1-A41F-A32EA610C5DF" id="BPMNEdge_sid-8955ECAD-719A-47C1-A41F-A32EA610C5DF"><omgdi:waypoint x="192.3333282470703" y="170.0"></omgdi:waypoint><omgdi:waypoint x="237.3333282470703" y="170.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-2461127D-B47F-4361-A472-D8C565E2DB15" id="BPMNEdge_sid-2461127D-B47F-4361-A472-D8C565E2DB15"><omgdi:waypoint x="390.0" y="92.66375420370463"></omgdi:waypoint><omgdi:waypoint x="337.3333282470703" y="132.33624579629537"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-D0995983-1EB6-4648-AB81-288CB62D94DE" id="BPMNEdge_sid-D0995983-1EB6-4648-AB81-288CB62D94DE"><omgdi:waypoint x="337.3333282470703" y="170.16322088685408"></omgdi:waypoint><omgdi:waypoint x="420.43449781877615" y="170.43449781877615"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="pass" id="BPMNEdge_pass"><omgdi:waypoint x="459.5969387755102" y="170.4030612244898"></omgdi:waypoint><omgdi:waypoint x="525.0001803670469" y="170.07106507427895"></omgdi:waypoint><bpmndi:BPMNLabel><omgdc:Bounds height="0.0" width="0.0" x="459.5969387755102" y="170.4030612244898"></omgdc:Bounds> </bpmndi:BPMNLabel></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram></definitions>说明:1、审批和修改任务节点增加事前监听,用于动态创建接收用户2、开始节点和审批节点增加对应需要处理的表单三、流程编写过程。

jeesite 框架开发 标准工时

jeesite 框架开发 标准工时

jeesite 框架开发标准工时一、概述在软件开发领域,标准工时是一个重要的指标,它对开发项目的进度、成本和质量都有着重要的影响。

而在jeesite框架开发中,标准工时更是需要严格控制的。

本文将探讨jeesite框架开发中标准工时的意义、计算方法以及如何合理制定和执行标准工时,并针对常见的问题给出解决方案。

二、标准工时的意义1.1 提高开发效率标准工时的确立能够使开发团队更好地了解任务的难易程度,合理分配工作量,提高开发效率,使开发进度得到合理控制。

1.2 控制项目成本通过合理的标准工时设定,能够有效控制项目开发成本,避免因为工时超支而导致项目预算的失控。

1.3 提高开发质量制定合理的标准工时能够使开发人员集中精力进行开发,提高开发质量,降低出错率。

三、计算方法2.1 了解需求在制定标准工时前,首先需要全面了解项目需求,对任务的难易程度、技术难点等有清晰的认识。

2.2 分析任务对每个开发任务进行详细分解,明确每个子任务所需的工作量,包括编码、测试、修改等环节。

2.3 考虑实际情况在计算标准工时时,需要考虑到开发人员的实际工作情况,包括个人能力、工作经验和团队配合等因素。

2.4 利用历史数据可以利用历史项目的开发数据作为参考,根据实际情况对标准工时进行调整,使其更符合实际情况。

四、合理制定和执行标准工时3.1 制定标准在制定标准工时时,需要充分考虑任务的难易程度、开发人员的能力、团队协作等因素,并根据实际情况进行灵活调整。

3.2 全员参与制定标准工时时,需要全员参与讨论,充分征求开发人员的意见和建议,确保标准工时的公平性和合理性。

3.3 定期评估在项目开发过程中,需要定期对标准工时进行评估和调整,以确保它与实际开发情况相符合。

3.4 严格执行一旦制定了标准工时,就需要严格执行,不得随意变更,确保开发任务在规定的工时内完成。

五、常见问题解决方案4.1 工时不足如果在项目开发过程中发现工时不足,可以通过增加人手、延长工作时间等方式来弥补,同时需要考虑对项目进度和质量的影响。

Jeesite开发手册_04、业务逻辑层、数据权限、数据事务处理、通用基类

Jeesite开发手册_04、业务逻辑层、数据权限、数据事务处理、通用基类

业务逻辑层、数据权限、数据事务处理、通用基类 - JeeSite 4.x•引言•数据权限–角色数据范围–控制业务范围–快速开始•第一步•第二步•第三步–扩展数据权限–附:API•数据库事务–注解属性–事务传播行为–事务隔离级别•基类及接口的继承关系–QueryService 查询抽象基类–CrudService 增删改抽象基类–TreeService 树结构抽象基类•其它使用技巧–分页逻辑说明–MAP参数分页–覆写内置Service引言对于业务逻辑层的开发重复代码很多,尽管有代码生成器,但从代码量总的来说还是比较多,所以就有了以下抽象类及工具,对一些常用操作进行封装。

对通用新增、删除、编辑、查询,代码操作进行封装简化。

你只需要写你的业务逻辑代码就可以了。

对特有树状结构特有字段如(所有父级编码、所有排序号编码、是否是叶子节点、当前节点层次)进行更新,比如,通过所有父级编码可快速查询到所有子级的数据;通过所有排序号,可快速对整个树结构进行排序;通过是否叶子节点快速得知是否有下级;根据当前层次快速知道当前节点在树中的级别。

对通用数据权限进行简化封装,将颗粒度降到人员身上,支持人员与数据,角色与数据权限定制(角色上的数据权限与人员身上的数据权限为或者关系)。

数据权限不仅仅支持公司、部门、角色,还可以通过配置支持你的业务字段数据信息过滤,如订单的区域、内容管理的栏目、故障单类型等等。

对事务处理使用Spring事务@Transactional注解,进行方法级别的事务控制,不用单独处理事务及回滚。

如配置传播行为,进行事务继承,子事务,事务回滚行为等,配置隔离级别读取未提交的数据等。

数据权限相对于旧版本,本次对数据权限这块进行了全面的升级,让数据权限颗粒度细化到人员身上。

支持人员与权限和角色与权限:主要是这两张表:js_sys_role_data_scope、js_sys_user_data_scope权限表中的关键字段的含义,如下:•控制类型:Office:部门;Company:公司、Role:角色;•控制数据:被控制数据权限的数据主键编号,业务表的主键编号;•控制权限:1:拥有的权限(DataScope.CTRL_PERMI_HAVE);2:管理的权限(DataScope.CTRL_PERMI_MANAGE)。

jeesite 底层this.true(entity)实现原理

jeesite 底层this.true(entity)实现原理

jeesite 底层this.true(entity)实现原理
Jeesite是一个基于Spring Boot和MyBatis的开源项目,底层使用了Hibernate作为ORM框架。

在Jeesite中,`this.true(entity)`方法用于校验实体类对象的属性值是否符合要求。

该方法的实现原理如下:
1. 首先,通过反射机制获取实体类对象的所有属性名和对应的属性值;
2. 然后,遍历所有属性名和属性值,对每个属性进行校验;
3. 校验规则由用户自定义,可以针对某个属性设置不同的校验规则;
4. 如果某个属性的值不符合校验规则,则抛出异常并提示错误信息;
5. 如果所有属性都符合校验规则,则返回true。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

文件管理、前端网站展示等功能; 在线办公模块 ,提供
简单的请假流程实例。,提供简单的请假流程实例;代码 生成模块 ,完成重复的工作 …
开发组件

JeeSite 提供了常用工具进行封装,包括日志工具、缓
存工具、服务器端验证、数据字典、当前组织机构数据 (用户、机构、区域)以及其它常用小工具等。另外还提 供一个强大的在线 代码生成 工具, 此工具提供简单的单
4.
模块化设计,层次结构清晰。内置一系列信息管理的基础功 能
5.
操作权限控制精密细致,对所有管理链接都进行权限验证,
可控制到按钮
JeeSite的优势
6.
数据权限控制精密细致,对指定数据集权限进行过滤,七种数 据权限可供选择。 提供在线功能代码生成工具,提高开发效率及质量。 提供常用工具类封装,日志、缓存、验证、字典、组织机构等, 常用标签(taglib),获取当前组织机构、字典等数据。 兼容目前最流行浏览器(IE7+、Chrome、Firefox)IE6也支持, 但体验效果差。
7. 8.
9.
JeeSite的局限性
1.持久化层缺乏弹性,sql工作量很大,尤其是字段多、 关联表多时,更是如此 2.维护性差 3.跨平台性差 4.数据库移植性差
JeeSite的适用场合

企业信息管理系统
平台简介
JeeSite是基于多个优秀的开源项目,高度整合封装而成 的高效,高性能,强安全性的开源Java EE快速开发平台 JeeSite是在Spring Framework基础上搭建的一个Java基 础开发平台,以Spring MVC为模型视图控制器,MyBatis 为数据访问层, Apache Shiro为权限授权层,Ehcahe对 常用数据进行缓存,Activit为工作流引擎。是JavaEE界 的最佳整合 JeeSite主要定位于信息化领域,如果你使用了JeeSite基 础框架,就可以很高效的快速开发出,优秀的信息管理系 统
表、一对多、树结构功能的生成,如果对外观要求不是很
高,生成的功能就可以用了。 如果你使用了JeeSite基础框 架,就可以很高效的快速开发出,优秀的信息管理系统。
JeeSite的优势
1. 2. 3.
使用 Apache License 2.0 协议,源代码完全开源,无商业限制 使用目前主流的Java EE开发框架,简单易学,学习成本低 数据库无限制,目前支持MySql、Oracle,可扩充SQL Server 、PostgreSQL、H2等
基础功能

JeeSite主要定位于信息化领域,已内置信息化系统
的基础功能和高效的代码生成工具。

包括:系统权限组件、数据权限组件、数据字典组
件、核心工具组件、视图操作组件、工作流组件、代码生
成等。 前端界面风格采用了结构简单、性能优良、页面 美观大气的Twitter Bootstrap页面展示框架。 采用分层 设计、双重验证、提交数据安全编码、密码加密、访问验 证、数据权限验证。 使用Maven做项目管理,提高项目的
易开发性、扩展性。
3 Sept. 2008 © Neusoft Confidential
平台模块


JeeSite目前包括以下三大模块,系统管理(SYS)模
块、 内容管理(CMS)模块、在线办公(OA)模块、代 码生成(GEN)模块。 系统管理模块,包括组织架构 (用户管理、机构管理、区域管理)、 菜单管理、角色 权限管理、字典管理等功能; 内容管理模块 ,包括内容 管理(文章、链接),栏目管理、站点管理、 公共留言、
相关文档
最新文档