展现层
Freemarer介绍
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
后台页面
后台页面需要的文本信息在messages_zh_CN.properties中配置国际化属性
spring中配置好资源文件,使spring mvc在html文件能够读到资源文件信息。
读取控制层的属性非常简单,freemark只需用类似jsp的el表达式输出普通对象。对于控制层传输过来的集合对象可用freemark内置对象list来循环出来
前台模版页面
在default目录相应的文件夹添加html,在html文件中引入freemark机制控制control层传输对象的显示。
控制层
SpringMVC简介
Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 FreeMarker、JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
控制层实现
配置SpringMVC支持
Web.xml配置Spring后台核心调度器
<servlet>
<servlet-name>JeeCmsAdmin</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/jeecms-servlet-admin.xml
/WEB-INF/config/plug/**/*-servlet-admin-action.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Web.xml配置Spring后台核心调度器匹配路径
<servlet-mapping>
<servlet-name>JeeCmsAdmin</servlet-name>
<url-pattern>/jeeadmin/jeecms/*</url-pattern>
</servlet-mapping>
Web.xml配置Spring前台核心调度器
<servlet>
<servlet-name>JeeCmsFront</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/jeecms-servlet-front.xml
/WEB-INF/config/plug/**/*-servlet-front-action.xml
</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
Web.xml配置Spring前台核心调度器匹配路径
<servlet-mapping>
<servlet-name>JeeCmsFront</servlet-name>
<url-pattern>*.jhtml</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>JeeCmsFront</servlet-name>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>JeeCmsFront</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>JeeCmsFront</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
Spring Controller
action.admin.main核心管理模块Controller
action.admin.assist辅助管理模块Controller
/**
@Controller标志该类是Srping Controller
**/
@Controller
public class WelcomeAct {
/*
*/index.do该地址将由Spring DispatchServlet负责调度给该方法处理
*/
@RequestMapping("/index.do")
public String index() {
return "index";
}
@RequestMapping("/top.do")
public String top(HttpServletRequest request, ModelMap model) {
// 需要获得站点列表
List<CmsSite> siteList = cmsSiteMng.getList();
CmsSite site = CmsUtils.getSite(request);
CmsUser user = CmsUtils.getUser(request);
// 传输对象到view层
model.addAttribute("siteList", siteList);
model.addAttribute("site", site);
model.addAttribute("siteParam", AdminContextInterceptor.SITE_PARAM);
model.addAttribute("user", user);
return "top";
}
/**
*装配service层对象,调用业务逻辑层
*/
@Autowired
private CmsSiteMng cmsSiteMng;
}
SpringMVC扩展配置
servlet-admin.xml 后台Spring国际化、拦截器、SpringMVC视图解析器配置
servlet-front.xml前台Spring国际化、拦截器、SpringMVC视图解析器配置
servlet-admin-action.xml 后台action配置文件
servlet-front-action.xml前台action配置文件
配置action bean
<bean id="welcomeAct" class="com.jeecms.cms.action.admin.WelcomeAct"/>
逻辑层
类存放包介绍
com.manager.main.impl核心service层
com.manager.assist.impl 辅助service层
com.service 采集、栏目、内容、流量公用service包
service类代码编写样例
@Service
@Transactional
public class CmsConfigMngImpl implements CmsConfigMng {
@Transactional(readOnly = true)
public CmsConfig get() {
CmsConfig entity = dao.findById(1);
return entity;
}
public void updateCountCopyTime(Date d) {
dao.findById(1).setCountCopyTime(d);
}
public void updateCountClearTime(Date d) {
dao.findById(1).setCountClearTime(d);
}
public CmsConfig update(CmsConfig bean) {
Updater<CmsConfig> updater = new Updater<CmsConfig>(bean);
CmsConfig entity = dao.updateByUpdater(updater);
entity.blankToNull();
return entity;
}
public MarkConfig updateMarkConfig(MarkConfig mark) {
get().setMarkConfig(mark);
return mark;
}
public void updateMemberConfig(MemberConfig memberConfig) {
get().getAttr().putAll(memberConfig.getAttr());
}
private CmsConfigDao dao;
//自动装配dao层
@Autowired
public void setDao(CmsConfigDao dao) {
this.dao = dao;
}
}
需要@Service@Transactional
注解标志该类为业务逻辑层,所有的service层均采用接口开发模式
@Transactional(readOnly = true)只读事务
配置service bean
context.xml中增加service bean的配置
<bean id="cmsConfigMng" class="com.jeecms.cms.manager.main.impl.CmsConfigMngImpl"/>
持久层
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操作数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用
DAO类代码编写样例
持久层采用Hibernate3,缓存采用Ehcache
com.dao.main.impl 核心DAO层
com.dao.assist.impl 辅助DAO层
@Repository
public class CmsConfigDaoImpl extends HibernateBaseDao<CmsConfig, Integer>
implements CmsConfigDao {
public CmsConfig findById(Integer id) {
CmsConfig entity = get(id);
return entity;
}
//重写getEntityClass方法
@Override
protected Class<CmsConfig> getEntityClass() {
return CmsConfig.class;
}
}
@Repository注解标志该类是DAO层组件,可以选择继承HibernateBaseDao基础类,需要实现接口。
配置DAO bean
jeecms-context.xml中增加dao bean的配置
<bean id="cmsConfigDao" class="com.jeecms.cms.dao.main.impl.CmsConfigDaoImpl"/>