Jeecms网站直接访问html静态页面

时间:2020-12-07 13:02:58

         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/>