JEECMS v3.0.1 beta版源码分析

本文主要分析了JEECMS v3.0.1 beta版的web.xml配置,涉及Spring MVC、Hibernate和过滤器等。配置中包含ProcessTimeFilter、CharacterEncodingFilter和OpenSessionInViewFilter,用于记录处理时间、设置编码和处理ORM会话。此外,还探讨了DispatcherServlet的配置及其对不同扩展名请求的处理方式。
摘要由CSDN通过智能技术生成
JEECMS v3.0.1 beta版发布,采用的是采用hibernate3+spring mvc+spring2+freemarker主流技术架构.



首先对web.xml分析一下
这里面用的是springmvc的配置


<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>JeeCms3</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<!---->
<param-value>
/WEB-INF/config/application-context.xml
/WEB-INF/config/cache-context.xml
/WEB-INF/config/captcha-context.xml
/WEB-INF/config/jeecore-context.xml
/WEB-INF/config/jeecms-context.xml
</param-value>
</context-param>
<filter>
<filter-name>processTime</filter-name>
<filter-class>com.jeecms.common.web.ProcessTimeFilter</filter-class>
</filter>
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter>
<filter-name>osivFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<!--
<filter>
<filter-name>urlrewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>confReloadCheckInterval</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>logLevel</param-name>
<param-value>sysout:DEBUG</param-value>
</init-param>
</filter>
-->
<filter-mapping>
<filter-name>processTime</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>osivFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>processTime</filter-name>
<url-pattern>*.jspx</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.jspx</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>osivFilter</filter-name>
<url-pattern>*.jspx</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>processTime</filter-name>
<url-pattern>*.jhtml</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.jhtml</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>osivFilter</filter-name>
<url-pattern>*.jhtml</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>processTime</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>osivFilter</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>processTime</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>osivFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<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</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<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</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>Jcaptcha</servlet-name>
<servlet-class>com.jeecms.common.captcha.JcaptchaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Jcaptcha</servlet-name>
<url-pattern>/captcha.svl</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DbFile</servlet-name>
<servlet-class>com.jeecms.core.action.front.DbFileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JeeCmsAdmin</servlet-name>
<url-pattern>/jeeadmin/jeecms/*</url-pattern>
</servlet-mapping>
<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>
<servlet-mapping>
<servlet-name>DbFile</servlet-name>
<url-pattern>/dbfile.svl</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<session-config>
<session-timeout>20</session-timeout>
</session-config>
<!--
<jsp-config>
<taglib>
<taglib-uri>http://displaytag.sf.net/el</taglib-uri>
<taglib-location>/WEB-INF/tld/displaytag-el.tld</taglib-location>
</taglib>
</jsp-config>
-->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jhtml</welcome-file>
</welcome-file-list>
<error-page>
<error-code>403</error-code>
<location>/WEB-INF/error/403.jsp</location>
</error-page>
<mime-mapping>
<extension>rar</extension>
<mime-type>application/zip</mime-type>
</mime-mapping>
<mime-mapping>
<extension>doc</extension>
<mime-type>application/zip</mime-type>
</mime-mapping>
<!--
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/WEB-INF/error/uncaughtException.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/WEB-INF/error/500.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/error/404.jsp</location>
</error-page>
-->
</web-app>


分析jeecms filter配置
几个公用的filter

<filter>
<filter-name>processTime</filter-name>
<filter-class>com.jeecms.common.web.ProcessTimeFilter</filter-class>
</filter>





可以记录处理时间的在外面统计加,感觉比原来在程序内部加的好.包括整个处理流程中的时间都会记录
processTime被配置在过滤器的最前端
下面是编码encoding过滤器
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>


默认字符编码是utf-8





下面是编码osivFilter过滤器
<filter>
<filter-name>osivFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>


一个Request的处理周期内,Session都是Open





对这几个filter

处理不同的扩展名的请求:*.do,*.jspx,*.jhtml,*.htm,*.jsp

processTime
à

?
encoding
à

?
osivFilter




后台处理过滤器

JeeCmsAdmin

/jeeadmin/jeecms/*



Jeecms路径前台采用的是二级路径,不属于后台的请求被前台的filter拦截

JeeCmsFront

*.do,*.jspx,*.jhtml,*.htm,*.jsp



验证码
Jcaptcha

/captcha.svl



DbFile

/dbfile.svl

在com.jeecms.cms.action.front. DynamicPageAct中预处理这些请求如/news/index.jhtml


/**
* <pre>

* 映射所有路径到 这个方法如 /news/index.jhtml
</pre>
*/
@RequestMapping(value={"/**/*.*"}, method={org.springframework.web.bind.annotation.RequestMethod.GET})
public String dynamic(HttpServletRequest request, HttpServletResponse response, ModelMap model)
{
int pageNo = URLHelper.getPageNo(request);
String[] params = URLHelper.getParams(request);
URLHelper.PageInfo info = URLHelper.getPageInfo(request);
String[] paths = URLHelper.getPaths(request);
int len = paths.length;
if (len == 1)
{
return channel(paths[0], pageNo, params, info, request, response,
model);
}if (len == 2) {
if (paths[1].equals("index"))
{
return channel(paths[0], pageNo, params, info, request,
response, model);
}
try
{
Integer id = Integer.valueOf(Integer.parseInt(paths[1]));
return content(id, pageNo, params, info, request, response,
model);
} catch (NumberFormatException e) {
log.debug("Content id must String: {}", paths[1]);
return FrontUtils.pageNotFound(request, response, model);
}
}

log.debug("Illegal path length: {}, paths: {}", Integer.valueOf(len), paths);
return FrontUtils.pageNotFound(request, response, model);
}






DynamicPageAct中将处理首页请求”/”和”/index.jhtml”


@RequestMapping(value={"/"}, method={org.springframework.web.bind.annotation.RequestMethod.GET})
public String index(HttpServletRequest request, ModelMap model)
{
CmsSite site = CmsUtils.getSite(request);
FrontUtils.frontData(request, model, site);
return FrontUtils.getTplPath(request, site.getSolutionPath(),
"index", "tpl.index");
}

@RequestMapping(value={"/index.jhtml"}, method={org.springframework.web.bind.annotation.RequestMethod.GET})
public String indexForWeblogic(HttpServletRequest request, ModelMap model)
{
return index(request, model);
}










例如运行访问首页运行结果
/WEB-INF/t/cms/www/red

CmsSite.java


public String getSolutionPath()
{
return "/WEB-INF/t/cms/" + getPath() + "/" + getTplSolution();
}







首页处理方法会返回到对应的视图:下面的首页地址
/WEB-INF/t/cms/www/red/index/首页.html



DynamicPageAct.java




@RequestMapping(value={"/"}, method={org.springframework.web.bind.annotation.RequestMethod.GET})
public String index(HttpServletRequest request, ModelMap model)
{
CmsSite site = CmsUtils.getSite(request);
FrontUtils.frontData(request, model, site);
return FrontUtils.getTplPath(request, site.getSolutionPath(),
"index", "tpl.index");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JEECMS是JavaEE网站管理系统(Java Enterprise Edition Content Manage System)的简称。 · 基于java技术开发,继承其强大、稳定、安全、高效、跨平台等多方面的优点 · 采用hibernate3 spring mvc spring2 freemarker主流技术架构 · 懂html就能建站,提供最便利、合理的使用方式 · 强大、灵活的标签,用户自定义显示内容和显示方式 · 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好性 · 完全生成全站静态页面,可自定义路径结构,无需urlrewrite · 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录 JEECMS V3.0.1 beta完整更新列表: 1、新增会员中心模块; 3、页头会员登录改为CSI方式调用,不再受页面静态化影响; 4、修正前台投票报错问题; 5、修正后台投票项无法删除的问题; 6、修正后台栏目“是否允许顶、踩”控制功能无效的问题; 7、修正后台栏目“是否允许评论”控制功能无效的问题; 7、新增父级栏目模板; 8、修正副栏目文章前台无法显示的问题; 9、新增是否开启栏目静态化功能; 10、新增自定义栏目访问路径功能; 11、修改某些有可能和数据库保留字相冲突的字段; 12、修正栏目页静态化后翻页问题; 13、新增后台登录、会员登录、评论时的验证码; 14、修正后台管理员权限控制问题; 15、站点管理修正。去掉一些没有的字段,加上一些有的字段; 16、增加首页访问地址,允许/index.jhtml的访问路径; 17、修正信息提示页无法自动跳转问题 18、增加审核后文章修改开关 19、修正上一篇下一篇读出未审核文章的问题; 20、修正firefox浏览器中swfupload无法上传的问题; 21、增加栏目翻页标签 22、修正文章删除后TAG相关文章数量统计问题; 23、修正敏感词控制无效的问题 24、修正发布多媒体视频文件无效的问题; 25、新增管理员管理的细微权限验证,低级别管理员不能管理高级别管理员 26、新增管理员username、email的服务器端验证; 27、新增图片栏目模型及图片集效果;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值