/* * Copyright (c) 2004 Your Corporation. All Rights Reserved. */ package com.jetmaven.oa; import org.apache.velocity.app.VelocityEngine; import org.springframework.ui.velocity.VelocityEngineUtils; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; /** * @author yourname Date: 2004-11-22 */ public class ViewVelocityTemplateController implements Controller { private VelocityEngine engine; private String encoding; public VelocityEngine getEngine() { return engine; } public void setEngine(VelocityEngine engine) { this.engine = engine; } public String getEncoding() { return encoding; } public void setEncoding(String encoding) { this.encoding = encoding; } public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType("text/html;charset=gb2312"); String relativeUri = request.getRequestURI().replaceFirst(request.getContextPath(), ""); File reportFilePath = new File(request.getSession(true).getServletContext().getRealPath(relativeUri)); if (reportFilePath.exists()) { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(response.getOutputStream())); VelocityEngineUtils.mergeTemplate(engine, relativeUri, encoding, getVelocityContextFromRequest(request), writer); writer.flush(); writer.close(); } else { setError404(response); } return null; } /** * 从request中构建VelocityContext对象(提取request中的属性值) * * @param request HttpServletRequest变量 * @return VelocityContext对象 */ private Map getVelocityContextFromRequest(HttpServletRequest request) { Map context = new HashMap(); Enumeration allAttrKey = request.getAttributeNames(); while (allAttrKey.hasMoreElements()) { String attrKey = (String) allAttrKey.nextElement(); context.put(attrKey, request.getAttribute(attrKey)); } return context; } /** * 设置404错误,指定的vm文件未找到 * * @param response web的response变量 * @throws java.io.IOException 异常 */ private void setError404(HttpServletResponse response) throws IOException { response.setContentType("text/html;charset=gb2312"); response.setStatus(404); response.getOutputStream().write("Error:404,File not Found!".getBytes()); } }