目录
第一章 SJV框架概述 1
第二章 开发准备 2
一、 JDK安装 2
二、 Tomcat安装 2
三、 MySQL安装 2
四、 Eclipse IDE安装 2
五、 Eclipse Tomcat插件安装 2
第三章 SJV框架快速上手 3
一、 建立Tomcat工程 3
二、 导入开发所需jar及相关系统基础文件 3
三、 建立第一个自己的实体类POJO 4
四、 使用代码生成器生成POJO的Java代码、HTML代码 8
五、 定义管理页面URL 10
六、 定义自己的业务action 11
第四章 SJV框架高级应用 12
一、系统内置POJO介绍 12
二、扩展内置POJO 14
三、@Title标签的运用 14
四、@Lock 标签的运用 14
五、日志标签的应用@Log 15
SJV是Spring、JPA、Velocity的第一个字母缩写,框架采用SpringMVC+JPA+Velocity+SpringSecurity+Ehcache作为基础开发结构,使用领域建模思想,开发者无须关注数据库机构,根据OOP编程特点,开发出合适的POJO,使用SJV Generator(代码生成器)自动生成所有后台管理代码及后台管理页面文件。
一、 JDK安装
登录官方网站下载jdk1.6及以上版本,安装到本地操作系统,设置JAVA_HOME及Path环境变量即可;
二、 Tomcat安装
登录apache官方网站,下载Tomcat6.0及以上版本,安装到本地操作系统即可;
三、 MySQL安装
登录官方网站,下载MySQL5.1及以上版本,安装到本地操作系统即可。
四、 Eclipse IDE安装
登录eclipse官方网站,下载eclipse3.2以上版本,解压到本地操作系统即可(安装路径尽量不要使用中文路径)。
五、 Eclipse Tomcat插件安装
登录官方网站,下载对应Tomcat版本插件,复制到eclipse安装路径的plugins目录下即可。
一、 建立Tomcat工程
打开eclipse,建立一个 Tomcat工程,如下图:
二、 导入开发所需jar及相关系统基础文件
1、 在公司svn服务器(192.168.1.102/SJV开发包/SJV开发依赖jar)上下载SJV开发框架包到Tomcat工程的WEB-INF/Lib下,并设置所有jar到工程的Java Build Path,
Java BuildPath具体步骤:右键点击项目名称,弹出菜单后选择BuildPath,再选择 ConfigerBuidlPath跳出的选项卡选择Libraries,点击右侧第一个选项Add JARS, 选择刚刚下载到Tomcat工程的WEB-INF/Lib下的所有jar包,点击OK添加完成,
再点击Java Build Path选项卡中的OK,Java Build Path完成。
2、 在公司svn服务器(192.168.1.102/SJV开发包/SJV开发配置文件)上下载系统6个配置文件applicationContext-configuration.xml、applicationContext-security.xml、ehcache.xml、persistence.xml、jdbc.properties、log4j.properties到WEB-INF/src下;
3、 在公司svn服务器(192.168.1.102/SJV开发包/SJV开发配置文件)上下载web.xml文件及iskyshop-servlet.xml文件复制到新建工程的到WEB-INF下
4、 在公司svn服务器(192.168.1.102/SJV开发包/SJV开发资源包)上下载系统资源文件夹resources并复制到Tomcat工程根目录下
5、 在公司svn服务器(192.168.1.102/SJV开发包/SJV开发基础页面)上下载系统基础页面manage.html、left.html、top.html、main.html、success.html、user_add.html、user_list.html等,复制到WEB-INF/templates/manage下,需要在WEB-INF下手动创建templates文件夹,在此文件夹下再创建两个子文件夹,前台页面文件夹view和后台页面文件夹manage,将刚刚下载的基础页面放在后台页面文件夹manage中即可。
最终系统目录结构如下:
(1) 蓝色框表示系统所有配置文件;
(2) 绿色框表示系统基础页面;
(3) 红色框表示系统前后台文件放置位置;
三、 建立第一个自己的实体类POJO
在eclipse新建的项目WEB-INF/src上点击右键,创建新的Class文件,如下对话框:
输入POJO名为Article,该类需要继承IdEntity,这里要注意要选择com.iskyshop.core.domain.IdEntity
生成的POJO代码如下:
package com.iskyshop.domain;
import com.iskyshop.core.domain.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
public class Article extends IdEntity {
}
该POJO继承自IdEntity类,包括以下字段:id(系统主键)、addTime(添加时间)、deleteStatus(是否删除),在新建的POJO中可以根据需要添加任意字段及JPA允许的映射关系字段,同时要给Article增加相关标签注解使得POJO成为一个系统Entity并自动纳入缓存管理,最终代码如下:
@Cache (usage = CacheConcurrencyStrategy.READ_WRITE)
@Entity
@Table(name = "iskyshop_article")//iskyshop_article:该实体类在数据库中的表名称public class Article extends IdEntity {
@Title(value=”标题”)
private String title;
@ManyToOne//ManyToOne:实体类之间的多对一对应关系,多个Article对应一个User,也可以表示为:一个User包含多个Article,其他对应关系分别为OneToOne(一对一),OneToMany(一对多) private User user;
@Title(value=”内容”,type=”lob”)
@Column(columnDefinition = "LongText")//LongText:说明下面的content为长文本 private String content;
此处生成get/set方法,get/set方法分别表示获取和放入数据,该POJO中一定要生成get/set方法,用于数据的获取、放入、保存等等,在本POJO页面点击鼠标右键弹出菜单,鼠标移至Source,再次弹出菜单,点击Generate Getter and Setter,弹出选项卡,点击选择要生成get/set方法的选项,全部选中,点击OK,如下图所示:
生成代码如下:
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
该POJO中包含2个基本字段和一个实体映射字段,字段注解为JPA标准注解标签,这里不过多阐述。
四、 使用代码生成器生成POJO的Java代码、HTML代码
下面需要根据前面建立的实体类Article来完成SJV框架代码的生成,步骤如下:
1、建立一个SJV生成器类,该类代码如下:
public class Generator {
public static void main(String[] args) throws FileNotFoundException, IOException {
GenerateFactory.generSimple();
}
}
该生成器只有语句代码,只是需要通过main方法执行
2、在Tomcat项目work(work文件夹为sources folder类型)目录下建立package.properties及theme.properties文件,其中package.properties配置文件用来指定需要生成代码的POJO及代码生成后基础包名,可以使用列表批量生成,生成Article如下代码:
com.iskyshop.domain.User=com.iskyshop
配置文件使用键/值配置,键用来指定需要生成的POJO,值用来指定生成代码的基础包名,这里是将com.iskyshop.domain.User实体类的SJV代码生成到com.iskyshop的包里面,将User替换为你要生成的POJO即可;
theme.properties文件用来配置系统后台管理风格,如下代码:
theme=default
default表示后台界面风格,目前系统支持3种风格,分别为default、brown、pink,可以根据需要选择使用。
3、运行main方法,eclipse控制台有如下提示(提示是根据POJO自动生成):
以上提示表示在建立的Tomcat工程下的result目录中生成了SJV开发基础代码及2个后台管理页面。
4、复制result文件夹下的com文件夹到WEB-INF/src下,复制xxx_list.html、xxx_add.html到WEB-INF/templates/manage下,最终目录如下:
5、启动tomcat,输入http://localhost:8080/Test/admin/index.htm打开系统管理后台页面:
五、 定义管理页面URL
使用Dreamweaver建立站点,
建立站点方法如下:
1、点击图片中的按钮并选择新建站点
在“你打算为您的站点起什么名字”位置处填写任意名称,点击“下一步”,选择“否,我不想使用服务器技术”,然后找到项目的位置,点击选择,然后点击下一步新建站点完成,
打开站点目录下/WEB-INF/templates/manage/left.htm页面,如下图:
增加<div class=”collapsed”></div>j节点,增加如下代码:
<div class="collapsed">
<span>文档管理</span>
<a href="$!webPath/admin/article/list.htm " target="mainFrame">文档列表/a>
<a href="$!webPath/admin/ article /add.htm" target="mainFrame">添加文档</a>
</div>
重新打开http://localhost:8080/Test/admin/index.htm页面,点击“文章列表”、“添加文章”,应该能够看到对应的页面,输入数据后能够完成数据保存。
到此为止,SJV框架DEMO设计完毕。
六、 定义自己的业务action
用户根据需要可以任意定义自己的控制器,也可以在生成的action添加自定义方法:
1、 建立自己的控制器类
@Controller//表示这个类是一个控制器类,不可缺少
public class NewsManageAction {
@Autowired
private ISysConfigService configService;//系统必备service,通过该service获取对应的基础配置
@Autowired
private IUserConfigService userConfigService; //系统必备service,通过该service获取对应的用户基础配置,特殊情况要用到
}
2、 添加一个自定义action方法
@SecurityMapping(title = "news列表", value = "/admin/news/list.htm*", rtype = "admin", rname = "news管理", rcode = "news_manage", rgroup = "news")
@RequestMapping("/admin/news/list.htm")//方法的请求路径。
public ModelAndView list(HttpServletRequest request,HttpServletResponse response,String currentPage, String orderBy,
String orderType) {
ModelAndView mv = new JModelAndView("news_list.html", configService
.getSysConfig(),this.userConfigService.getUserConfig(), 0, request,response);
return mv;
}
1、超级基础类IdEntity
字段名称 |
字段类型 |
字段备注 |
|
id |
Long |
使用JPA策略自动生成 |
|
addTime |
Date |
添加时间 |
|
deleteStatus |
boolean |
删除状态(默认为false,表示数据正常,true表示处于删除状态,该字段用来扩展系统特定需求) |
IdEntity是系统所有POJO的父类,该类不能建立数据表,所有系统类、程序员开发类均要求继承该类,同时在编写自定义类时候不允许重复id、addTime、deleteStatus字段。
2、用户类User
字段名称 |
字段类型 |
字段备注 |
userName |
String |
用户名(用户登录名) |
trueName |
String |
用户真实姓名 |
password |
String |
用户密码(使用MD5加密) |
userRole |
String |
用户角色(根据系统需要扩展),管理员为ADMIN |
bornDate |
Date |
用户出生日期 |
telephone |
String |
用户电话号码 |
String |
用户QQ |
|
MSN |
String |
用户MSN |
address |
String |
用户地址 |
sex |
int |
用户性别(0为男,1为女,-1为保密) |
String |
用户邮件 |
|
mobile |
String |
用户手机号码 |
photo |
Accessory |
用户照片(一对一关系) |
status |
int |
用户状态,该字段可以扩展系统需求 |
3、附件类Accessory
当需要使用附件添加的时候就需要附件类Accessory,在POJO类中需要建立与Accessory的对应关系,
@OneToOne
Private Accessory acc;
在Action中需要注入
@Autowired
Private IAccessoryService accessoryService;
上传附件代码如下:
String uploadFilePath = this.configService.getSysConfig()
.getUploadFilePath();
String saveFilePathName = request.getSession().getServletContext()
.getRealPath("/")
+ uploadFilePath;
Map map = new HashMap();
try {
map = CommUtil.saveFileToServer(request, "acc", saveFilePathName, "", null );
if (map.get("fileName") != "") {
Accessory acc= new Accessory();
acc.setName((String) map.get("fileName"));
acc.setExt("." + (String) map.get("mime"));
acc.setSize((Float) map.get("fileSize"));
acc.setPath(uploadFilePath);
acc.setWidth((Integer) map.get("width"));
acc.setHeight((Integer) map.get("height"));
acc.setAddTime(new Date());
this.accessoryService.save(acc);
newscase.setAcc(acc);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
在html页面中
<input name = "acc" type="file" value = "$!obj.acc"/>
上传附件代码可以上传任意附件,如图片、视频、音频,附件大小不要超出10M。
4、权限资源类Res
5、权限角色分类RoleGroup
6、权限角色类Role
当需要对User类拓展时候,建立心累并继承User类
@SuppressWarnings("all")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Entity
@Table(name = "iskyshop_user")
@javax.persistence.DiscriminatorValue(value = "0")
public class AddUser extends User {
.
.
}
POJO类中:
@Title(value=”标题”)
private String title;
在POJO字段中加@Lock标签,锁定该字段
添加数据时因地点被锁定不能进行数据的存储,需要在逻辑Action中save方法中wf.topo(....)下添加xx.set(...),xx代表被锁定的字段。
@SecurityMapping(title = "news列表", value = "/admin/news/list.htm*", rtype = "admin", rname = "新闻管理", rcode = "news_manage", rgroup = "新闻管理")
title:该方法的名称;
value:该方法权限的请求路径,注意以“*”号结尾;
rtype:权限类型,为两种,user和admin;
rname为该权限名称;
rgroup为权限分组名称,例如:rname=”新闻管理“,rgroup=“系统管理”,表示在系统管理中包括新闻管理;
rcode:多个方法中rcode值相同说明这些方法为同一个权限支配,例如:rcode="article_manage"。
注意:不是所有方法都加权限标签,权限可以理解为对用户行为的控制,有些的方法请求不需要权限,添加权限标签后要在UserManagerAction中init_role方法中添加超级管理权限加载,添加内容为已经添加权限标签所在Action名称,如:clzs.add(ArticleManageAction.class)。添加完成后需要重启Tomcat并在后台管理页面管理员管理中初始化权限,初始化后新添加的用户将受到权限的控制。