package message.mvc.commons; import com.alibaba.fastjson.JSON; import message.utils.JsonUtils; import message.utils.ResultSet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; /** * 封装HttpServletResponse * @author sunhao(sunhao.java@gmail.com) */ public class WebOutput { private HttpServletResponse response; private HttpServletRequest request; private static Map _defaultMimeTypes; private static Map _defaultCharacter; static{ _defaultMimeTypes = new HashMap(); _defaultMimeTypes.put(".avi", "video/x-msvideo"); _defaultMimeTypes.put(".bmp", "image/bmp"); _defaultMimeTypes.put(".class", "application/octet-stream"); _defaultMimeTypes.put(".css", "text/css"); _defaultMimeTypes.put(".doc", "application/msword"); _defaultMimeTypes.put(".exe", "application/octet-stream"); _defaultMimeTypes.put(".gif", "image/gif"); _defaultMimeTypes.put(".html", "text/html"); _defaultMimeTypes.put(".htm", "text/html"); _defaultMimeTypes.put(".js", "application/x-javascript"); _defaultMimeTypes.put(".jpeg", "image/jpeg"); _defaultMimeTypes.put(".jpg", "image/jpeg"); _defaultMimeTypes.put(".movie", "video/x-sgi-movie"); _defaultMimeTypes.put(".mp3", "audio/mpeg"); _defaultMimeTypes.put(".pdf", "application/pdf"); _defaultMimeTypes.put(".ps", "application/postscript"); _defaultMimeTypes.put(".ppt", "application/vnd.ms-powerpoint"); _defaultMimeTypes.put(".png", "image/png"); _defaultMimeTypes.put(".swf", "application/x-shockwave-flash"); _defaultMimeTypes.put(".txt", "text/plain"); _defaultMimeTypes.put(".wav", "audio/x-wav"); _defaultMimeTypes.put(".xml", "text/xml"); _defaultMimeTypes.put(".zip", "application/zip"); _defaultCharacter = new HashMap(); _defaultCharacter.put("gbk", "GBK"); _defaultCharacter.put("utf8", "UTF-8"); _defaultCharacter.put("gb2312", "GB2312"); } /** * 构造函数 * * @param request * @param response */ public WebOutput(HttpServletRequest request, HttpServletResponse response) { this.request = request; this.response = response; } public HttpServletResponse getResponse() { return response; } public void setResponse(HttpServletResponse response) { this.response = response; } public HttpServletRequest getRequest() { return request; } public void setRequest(HttpServletRequest request) { this.request = request; } /** * 设置cookie * * @param name name * @param value value * @param maxAge 存活时间 */ public void setCookie(String name, String value, int maxAge){ Cookie c = new Cookie(name, value); if(maxAge > 0){ c.setMaxAge(maxAge); } c.setPath("/"); this.response.addCookie(c); } public void setContentType(String contentType){ this.response.setContentType(contentType); } public void setContentType(String contextType, String charset){ if(charset == null){ this.response.setContentType(contextType); } else { this.response.setContentType(contextType + "; charset=" + charset); } } public void print(String content) throws IOException{ PrintWriter out = this.response.getWriter(); out.write(content); out.close(); } public void sendRedirect(String url) throws IOException{ this.response.sendRedirect(url); } /** * 将对象用json的方式给前台,调用对象的toString方法,不推荐使用 * @param obj * @throws Exception */ @Deprecated public void toNativeJson(Object obj) throws Exception{ this.response.setContentType(_defaultMimeTypes.get(".xml") + ";charset=" + _defaultCharacter.get("utf8")); this.print(obj.toString()); } /** * 使用map的形式生成json数据给前台(flexjson) * * @param params * @throws Exception */ public void toFlexJson(Map<String, ?> params) throws Exception { this.response.setContentType(_defaultMimeTypes.get(".html") + ";charset=" + _defaultCharacter.get("utf8")); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); write(JsonUtils.toString(params)); } /** * ResultSet传回前台 * * @param rs * @throws Exception */ public void toFlexJson(ResultSet rs) throws Exception { Map<String, Object> params = new HashMap<String, Object>(); params.put("msg", rs.msg); params.put("result", rs.result); params.put("status", rs.status); toFlexJson(params); } /** * 使用fastjson返回json数据 * * @param params */ public void toFastJson(Map<String, Object> params) throws Exception { this.response.setContentType(_defaultMimeTypes.get(".html") + ";charset=" + _defaultCharacter.get("utf8")); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); write(JSON.toJSONString(params)); } /** * ResultSet传回前台 * * @param rs * @throws Exception */ public void toFastJson(ResultSet rs) throws Exception { Map<String, Object> params = new HashMap<String, Object>(); params.put("msg", rs.msg); params.put("result", rs.result); params.put("status", rs.status); toFastJson(params); } public void write(String content) throws Exception { Writer out = response.getWriter(); out.write(content); } public void flush() throws IOException{ this.response.flushBuffer(); } }