springmvc 与velocity的配置 返回html

来源:互联网 发布:孙悟空结拜兄弟 知乎 编辑:程序博客网 时间:2024/04/29 08:17
<!--视图 velocity 可以不用jsp 替换jsp视图即可返回时必须返回 xx.html--><bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">    <property name="resourceLoaderPath">        <value>WEB-INF/views/</value>    </property>    <property name="configLocation" value="classpath:properties/velocity.properties"/></bean><bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">    <property name="prefix" value=""/>     <property name="viewNames" value="*.html"/>    <property name="contentType" value="text/html;charset=UTF-8"/>    <property name="viewClass" value="com.frame.mall.core.velocity.VelocityView"/></bean><bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">    <property name="requestContextAttribute" value="rc"/>    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/></bean>
需要引入的实体类
package com.frame.mall.core.velocity;import org.apache.commons.lang.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.velocity.context.Context;import org.apache.velocity.exception.MethodInvocationException;import org.apache.velocity.tools.view.CookieTool;import org.apache.velocity.tools.view.ParameterTool;import org.apache.velocity.tools.view.ViewToolContext;import org.springframework.web.servlet.view.velocity.VelocityToolboxView;import org.springframework.web.util.NestedServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.PrintWriter;import java.util.Map;/**
create by wangyanlong * VelocityToolboxView: VelocityView子类,增加了对速度的工具工具箱和工具ViewTool回调速度/速度工具1.3 * init方法的支持。 指定一个“toolboxConfigLocation”,例如“/ WEB-INF/toolbox.xml”,以自动加载速度的工具工 * 具箱定义文件,揭露在指定的范围定义的所有工具 。如果没有配置指定位置,没有工具箱将被载入和暴露。这种观点将 * 总是创建一个特殊的速度范围内,即一类的ChainedContext这是鉴于对速度的工具包的一部分实例。这允许使用 从速度工具,如LinkTool, * 这就需要用一个特殊的背景下实现ViewContext接口(即ChainedContext) * 初始化的视图工具包。这种观点还检查是被称为“toolAttributes”指定工具:如果他们执行ViewTool接口, * 他们将获得与速度范围内进行初始化。这使得从AS LinkTool作为工具包的观点,速度等工具,对界定被"toolAttributes" * 在VelocityToolboxView,而不是一个单独的XML文件中的工具箱。这是一个单独的类主要是为了避免在速度 * 上需要依赖包的查看工具VelocityView本身。在Spring 2.0中,这个类需要1.2或更高速度的工具。 */public class VelocityView extends VelocityToolboxView {   private static final Log logger = LogFactory         .getLog(VelocityView.class);   public static final String RENDER_XML = "RENDER_TO_XML";   public static final String RENDER_JSON = "RENDER_TO_JSON";   public static final String KEY_HTTP_STATUS = "KEY_HTTP_STATUS";   public static final String USE_OTHER_CHARSET = "USE_OTHER_CHARSET_CONTENT_KEY";   public static final String KEY_IGNORE_TOOLS = "IGNORE_EXPORT_TOOL";   public VelocityView() {      super();   }   public static void processHeader(HttpServletRequest request,         HttpServletResponse response, Map<String, Object> model) {      if (model.get(USE_OTHER_CHARSET) != null) {         response.setCharacterEncoding((String) model               .remove(USE_OTHER_CHARSET));      }      if (model.get(KEY_HTTP_STATUS) != null) {         response.setStatus((Integer) model.get(KEY_HTTP_STATUS));      }      if (model.get(USE_OTHER_CHARSET) != null) {         response.setCharacterEncoding((String) model               .remove(USE_OTHER_CHARSET));      }      if (model.get(RENDER_XML) != null) {         model.remove(RENDER_XML);         response.setContentType("text/xml");         model.put("charset", "UTF-8");         if (StringUtils.isNotBlank(request.getParameter("charset"))) {            response.setCharacterEncoding(request.getParameter("charset"));            model.put("charset", request.getParameter("charset"));         }      } else if (model.get(RENDER_JSON) != null) {         // json视图设置         model.remove(RENDER_JSON);         response.setCharacterEncoding("utf-8");         response.setContentType("application/json;charset=utf-8");      }   }   @Override   protected void renderMergedTemplateModel(Map<String, Object> model,         HttpServletRequest request, HttpServletResponse response)         throws Exception {      processHeader(request, response, model);      try {         PrintWriter writer = response.getWriter();// IllegalStateException         Context velocityContext = createVelocityContext(model, request,               response);         getTemplate().merge(velocityContext, writer);         response.getWriter().flush();      } catch (IllegalStateException e) {// response output         logger.error("uri:" + request.getRequestURI() + ", model:" + model,               e);      } catch (MethodInvocationException ex) {         Throwable cause = ex.getWrappedThrowable();         throw new NestedServletException(               "Method invocation failed during rendering of Velocity view with name '"                     + getBeanName() + "': " + ex.getMessage()                     + "; reference [" + ex.getReferenceName()                     + "], method '" + ex.getMethodName() + "'",               cause == null ? ex : cause);      } catch (Exception e) {         logger.error("uri:" + request.getRequestURI() + ", model:" + model,               e);         throw e;      }   }   @Override   protected Context createVelocityContext(Map<String, Object> model,         HttpServletRequest request, HttpServletResponse response)         throws Exception {      // System.out.println("-------------期待不--------------------");      ViewToolContext velocityContext = new ViewToolContext(            getVelocityEngine(), request, response, getServletContext());      velocityContext.putAll(model);      if (model.get(KEY_IGNORE_TOOLS) == null) {// API等不需要这些渲染         ParameterTool tool = new ParameterTool(request);         velocityContext.put("params", tool);         CookieTool cookieTool = new CookieTool();         cookieTool.setRequest(request);         cookieTool.setResponse(response);         velocityContext.put("cookieTool", cookieTool);         // velocityContext.putAll(Config.getPageTools());      } else {         model.remove(KEY_IGNORE_TOOLS);      }      return velocityContext;   }}
1 0
原创粉丝点击