SpringMVC、Spring和freemarker 开发指导

来源:互联网 发布:局域网扫描软件 编辑:程序博客网 时间:2024/05/29 06:49

展现层

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**/@Controllerpublic 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层对象,调用业务逻辑层*/@Autowiredprivate 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@Transactionalpublic 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层@Autowiredpublic void setDao(CmsConfigDao dao) {this.dao = dao;}}

需要@Service@Transactional

注解标志该类为业务逻辑层,所有的service层均采用接口开发模式

@Transactional(readOnly = true)只读事务

配置service bean

context.xml中增加service bean的配置

<beanid="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

 
@Repositorypublic class CmsConfigDaoImpl extends HibernateBaseDao<CmsConfig, Integer>implements CmsConfigDao {public CmsConfig findById(Integer id) {CmsConfig entity = get(id);return entity;}//重写getEntityClass方法@Overrideprotected 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"/>



0 0