jeecms网站维护,遇到了直接通过链接的方式访问静态页面,jeecms官网也做了详细的解答,但是没有得到满意的结果。但是通过自己的深入研究以及别人的帮助,发现了一个很好的解决方法。
首先说明一下jeecms网站的访问特点,例如这个链接:http://127.0.0.1:8080/news/3567.jhtml
前面为ip地址:127.0.0.1
端口号:8080
栏目访问路径:news
文章id:3567
访问后缀:.jhtml
jeecms项目的web.xml对访问的形式做了过滤,后台有3个过滤器,如下
<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>这里分别为时间的处理,字符编码的处理以及hibernate的session的处理,这些跟访问的链接没有什么关系。
访问静态的html页面,在web.xml中可以找到对应servlet的代码,如下
<servlet-mapping> <servlet-name>JeeCmsFront</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping>这样可以找到对应的文件,其实就是jeecms-servlet-front.xml
<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>在jeecms-servlet-front.xml中没有找到对前台访问链接的过滤对应的类,但是在jeecms-servlet-front.xml中可以找到这个文件,其实就是jeecms-servlet-front-action.xml文件,这个文件中包含了很多的控制层代码,重要的代码如下:
<bean id="dynamicAct" class="com.jeecms.cms.action.front.DynamicPageAct"/>
前面说了很多,重要的就是在DynamicPageAct类里面,前台访问的链接主要通过DynamicPageAct里面的dynamic处理,代码如下
/** * 动态页入口 */ @RequestMapping(value = "/**/*.*", method = RequestMethod.GET) public String dynamic(HttpServletRequest request, HttpServletResponse response, ModelMap model) { // 尽量不要携带太多参数,多使用标签获取数据。 // 目前已知的需要携带翻页信息。 // 获得页号和翻页信息吧。 int pageNo = URLHelper.getPageNo(request); String[] params = URLHelper.getParams(request); PageInfo info = URLHelper.getPageInfo(request); String[] paths = URLHelper.getPaths(request); int len = paths.length; if (len == 1) { //连接后的第一个参数 if(paths[0].equals("xxx")){ //返回静态页的文件位置 return "xxx.html"; } // 单页 return channel(paths[0], pageNo, params, info, request, response, model); } else if (len == 2) { if (paths[1].equals(INDEX)) { // 栏目页 return channel(paths[0], pageNo, params, info, request, response, model); } else { // 内容页 try { Integer id = 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); } } } else { log.debug("Illegal path length: {}, paths: {}", len, paths); return FrontUtils.pageNotFound(request, response, model); } }这样就可以访问jeecms项目下的静态页了,如上代码可以通过http://127.0.0.1:8080/xxx.html访问到项目WebRoot下的xxx.html页面。访问其它的页面,可以修改一下上述代码。
还有另一种方式:在spring-mvc的配置文件中加入以下代码可以实现上述功能
<!-- 将springmvc不能处理的请求交给tomcat 处理--> <mvc:default-servlet-handler/> <mvc:annotation-driven/>