刚开始研究jeecms的时候很纳闷,找不到首页的加载页面。。经过一番仔细研究,发现这个加载还是经过了很多曲折的过程的。整个程序的架构师 ssh+freemarker模板构成的,所以先要熟悉freemarker模板技术。
先看web.xml文件,其中欢迎页面有:
1. <welcome-file-list>
2. <welcome-file>index.jspa</welcome-file>
3. <welcome-file>index.do</welcome-file>
4. <welcome-file>index.html</welcome-file>
5. </welcome-file-list>
接着再看jeecms/core/struts-core-front.xml配置文件,发现有个 action的通用配置:
1. <action name="**" class="core.dynamicSystemAct">
2. <result type="chain">
3. <param name="namespace">${namespace}</param>
4. <param name="actionName">${actionName}</param>
5. </result>
6. <interceptor-ref name="exception"/>
7. <interceptor-ref name="domain"/>
8. <interceptor-ref name="cookieIdentity"/>
9. <interceptor-ref name="url"/>
10. </action>
struts收到请求以后,将请求转发到core.dynamicSystemAct这个对象,注意这个这个class并不是真正的类,是类的别名,由spring通过标注@Controller进行绑定,web应用上下文可以通过 classpath自动扫描到这个类。
1. @Controller("core.dynamicSystemAct")
2. public class DynamicSystemAct
在这个action执行之前,先要执行好几个拦截器。其他struts和webwork 自带的拦截器不必说,主要说一下在程序里面自定义的几个比较重要的拦截器(定义在jeecms/src/struts-default.xml文件中)。
DomainNameInterceptor
UrlInterceptor
CookieIdentityInterceptor
然后执行action自己的execute方法,产生 2个参数:
namespace = "/jeedynamic/" + sys;
actionName = "Page";
这2个参数决定了程序的走向,组成转发路径:/jeedynamic /jeecms/Page.do,然后通过查找下面的配置信息
1. <package name="cms.front.page" namespace="/jeedynamic/jeecms" extends="empty-default">
2. <action name="Page" class="cms.cmsPageAct">
3. <result>${tplPath}</result>
4. <result name="pageCache" type="pageCache">${tplPath}</result>
5. <interceptor-ref name="exception"/>
6. <interceptor-ref name="chain"/>
7. </action>
8. </package>
注:其他的请求过程类似,先找到命名空间,然后找到对应的 acting进行处理。
将请求转发给cms.cmsPageAct对象,同上的道理,对应到控制器:com.jeecms.cms.action.front.CmsPageAct。拦截器处理完毕后,执行自己的 execute方法,判断若是首页,则执行sysIndex()方法,返回一个模板路径tplPath:/WEB-INF/user_base/jeecms_com_www/template /article/default/index.html,找到这个文件,是文章对应的首页模板,里面有自定义的freemarker标签@cms,定义在配置文件freemarker.properties中:
auto_import="/WEB-INF/ftl_lib/ponyjava.com/index.ftl" as p, "/WEB-INF/ftl_lib/jeecms/index.ftl" as cms
@cms标签所用的ftl模板文件为index.ftl。 打开index.ftl文件,includes了多个ftl,其中有action_cms.ftl,该文件用标签#macro,自定义许多directive:ChnlList和CommentList 等。里面使用struts2标签@s.action来请求数据,整个的index.html页面就是这么加载出来的。通过 freemarker引擎来解析数据模型,最后显示到前台,展现给客户。
index.html include head.html
[@cms.ChnlList id='' inner='1';c]<li class="thisclass"><a href="${c.url}">${c.name}</a></li>[/@cms.ChnlList]
对应action_cms.ftl中macro ChnList 定义, 使用strusts标签 action
<@s.action name='ChnlListInner' namespace='/jeecms/tag/cms'>
在struts-front.xml中找到对应的class="cms.chnlPartAct".
private Pagination tagChnlList() {
list = cmsChannelMng.getChild(getWebId(), sysType, chnlId, orderBy,
isDisplay == 1 ? true : false, hasContent == 1 ? true : false,
firstResult, count);
pagination = new Pagination(pageNo, count, list.size(), list);
return pagination;
}
CmsChannelMng--> CmsChannelMngImpl-->BaseManagerImpl-->BaseDao-->BaseDaoImpl
待整理:
如页面跳到action: article.articleAct
list()将取出对应的文章
pagination = articleMng.getRightArticle(getWebId(), chnlId,
getAdminId(), queryInputAdminId, queryContentCtgId,
queryDisabled, queryTopTime, queryTopLevel, queryStatus,
queryTitle, queryOrder, pageNo, getCookieCount());
(freemarker macro对应参数)
最终掉到 ArticleDaoImpl.
public Pagination getRightArticle(Long webId, Long chnlId, Long adminId,
Long inputAdminId, Long contentCtgId, boolean disabled,
boolean topTime, int topLevel, int status, String title, int order,
int pageNo, int pageSize)
http://hhlcq.blog.163.com/blog/static/575906812010111735559502/
分享到:
相关推荐
同时,性能优化也是Jeecms二次开发中的重要考虑因素,包括页面加载速度、服务器资源占用等。 综上所述,Jeecms的二次开发涉及到的内容广泛,涵盖Java编程、MVC架构、模板引擎使用、数据库管理、安全防护以及测试...
UEditor的引入,无疑提升了Jeecms在内容创作方面的专业度,使得编辑过程更加直观和高效。 在使用"ueditor for jeecms"时,首先需要下载压缩包,并从中解压出UEditor的相关文件。这个压缩包中的唯一文件名"ueditor...
此外,文档可能还会介绍如何进行页面元素的动态加载和交互效果的实现,以提升网站的吸引力和互动性。 3. **aa.txt** 这个文件名看起来像是一个临时或备忘性质的文档,可能是开发过程中的笔记、问题记录或者待办...
3. 执行表结构脚本:加载`oracle10g-jeecms-table.sql`,按照脚本中的顺序逐条执行DDL语句,创建Jeecms所需的所有表。 4. 初始化数据:接着执行`oracle_jeecms-initdata.sql`,将初始数据导入到已经创建好的表中。 ...
在Jeecms的开发过程中,主要涉及以下几个核心模块: 1. **内容管理** - 内容管理是Jeecms的核心功能,允许管理员添加、编辑和删除页面内容以及专题。内容可以通过不同模板进行展示,以满足不同的页面布局需求。 -...
CMS的主要目的是简化内容的创建过程,使得非技术人员也能轻松管理和更新网站内容。CMS通常具有以下特点: - **基于模板的设计**:用户可以通过预设的模板来快速构建网站,无需编写复杂的代码。 - **快速开发**:相比...
因此,首页模板需要使用`[@cms.ArtiListchnlId=.../`这样的标签来动态加载数据。 2. **栏目页**:栏目页用于展示某一类别下的文章列表,可以通过`[@cms.ArtiListchnlId=.../`等标签来实现。同时,为了增强用户体验...
2. **手把手教你用JEECMS建站**:分为三个部分详细介绍建站的全过程。 3. **轻松给网站配置留言板**:通过Jeecms内置的功能实现留言板功能。 4. **JEECMS网站管理系统栏目模型管理**:介绍如何管理和编辑网站的栏目...
在Java和JSP的学习过程中,Jeecms是一个非常实用的实践平台,可以帮助开发者深入理解这两种技术的结合应用。 Java是面向对象的编程语言,以其跨平台的特性而广受欢迎。学习Java,你需要掌握其基础语法、类与对象、...
在实际开发过程中,Jeecms微信小程序可能会包含以下几个关键技术点: 1. **接口设计**:需要设计合理的RESTful API,以便于小程序调用,这些接口通常包括登录验证、新闻列表获取、新闻详情查询、评论发表等功能。 ...
同时,为了提供良好的用户体验,你需要在刷新过程中显示一个指示器,比如旋转的菊花图标,告诉用户数据正在加载。 自定义的PullToRefreshView相比现成的库,如SwipeRefreshLayout,最大的优势在于灵活性。开发者...
三 首页的加载过程 在浏览器中输入http://localhost:8080/jeecms,回车 首先进入配置文件web.xml, <context-param> <param-name>contextConfigLocation</param-name> <!----> <param-value> /WEB-INF/...
11. **性能优化**:Jeecms可能会包含缓存机制,以提高页面加载速度,减少服务器压力。 12. **API接口**:Jeecms可能提供API接口,允许与其他系统集成,如CRM、ERP等,实现数据的同步。 安装Jeecms V5.1时,用户...
1. **新特性**:3.1.9版本在2.3.1的基础上增加了更多的自定义选项,如生成的实体类是否启用懒加载、是否生成equals()和hashCode()方法等。 2. **性能优化**:针对大量表的同步,3.1.9版本进行了性能提升,处理速度...
- 静态文件策略:首页和频道页定时生成,详情页实时生成,商品删除时相应页面需重新生成。 3. **静态文件命名与目录设计**: - 固定目录和静态文件名用于频道页和概览页,定时生成时覆盖旧文件,简化管理。 - ...
10. **JSP生命周期**:理解JSP页面从加载到销毁的过程,包括编译成Servlet、初始化、服务、销毁等阶段。 通过这个项目,你不仅能学习到JSP的基本知识,还能接触到实际的项目开发流程,提升自己的实战能力。记住,...