利用过滤器,使用HttpServletResponse装饰器,获取流,生成静态文件。
来源:互联网 发布:c 语言入门经典 编辑:程序博客网 时间:2024/06/05 20:17
ResponseWrapper.javapackage com.wind.frame.base.wrapper;import java.io.PrintWriter;import java.io.StringWriter;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;/** * * 使用装饰器模式,包装HttpServletResponse * */public class ResponseWrapper extends HttpServletResponseWrapper {/** * 我们自己定义的writer,用于接收处理后的输出流 */private StringWriter output;/** * 典型的装饰器模式 * @param response */public ResponseWrapper(HttpServletResponse response) {super(response);output = new StringWriter();}@Overridepublic PrintWriter getWriter() { //当servlet或jsp请求输出流时,并不给它真正的response中的writer,而是给它我们自己定义的writer return new PrintWriter(output); }/** * * 返回流中的内容,方法叫什么名都可以。 * * @return */public String getResult() { return output.toString();}}
ArticleStaticFilter.javapackage com.wind.frame.base.filter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.wind.frame.base.wrapper.ResponseWrapper;/** * 利用过滤器,使用HttpServletResponse装饰器,获取流,生成静态文件。 * */public class ArticleStaticFilter implements Filter { private ServletContext servletContext = null; @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; boolean isStatic = false; String servletPath = httpRequest.getServletPath(); if (servletPath.endsWith("showArticle.do")) { isStatic = true; } //需要静态化 if (isStatic) { //使用装饰后的response传给过滤器链,处理后的结果在装饰后的response中 ResponseWrapper responseWrapper = new ResponseWrapper((HttpServletResponse) response); filterChain.doFilter(request, responseWrapper); String articleId = request.getParameter("id"); String path = servletContext.getRealPath("/") + "static/" + articleId + ".html"; //生成静态文件 String responseText = responseWrapper.getResult(); FileWriter fw = new FileWriter(new File(path)); fw.write(responseText); fw.close(); //使用原始的response,向客户端输出结果 response.getWriter().write(responseText); response.getWriter().flush(); } else { filterChain.doFilter(request, response); } } @Override public void init(FilterConfig filterConfig) throws ServletException { servletContext = filterConfig.getServletContext(); }}
- 利用过滤器,使用HttpServletResponse装饰器,获取流,生成静态文件。
- 利用freemarker生成静态文件
- 使用拦截器获取HttpServletResponse 对象,HttpServletRequest对象
- 使用HttpServletResponse提供文件下载
- 过滤器中生成静态网页
- 数据模型是对象时如何利用freemarker生成静态文件
- 利用JDBC导出数据库并生成静态导航界面文件
- 使用FreeMarker生成Html静态文件(实例)
- 使用FreeMarker生成Html静态文件
- 使用FreeMarker生成Html静态文件(实例)
- 使用FreeMarker生成Html静态文件(实例)
- 使用FreeMarker生成Html静态文件
- Qt 静态库文件的生成使用!
- 使用FreeMarker生成静态html文件
- 利用Freemarker生成html静态页面,也可利用模版功能生成不同格式的文件
- tornado入门 - 静态文件处理 和 登陆装饰器
- 通过过滤器生成静态页面-springmvc
- 文件过滤器的使用
- Nginx转发代理配置
- 浅谈UML的概念和模型之UML九种图
- ubuntu 下Android 反编译APK
- spring 注入 cronExpression
- buffer cache深度分析3:buffer cache的优化
- 利用过滤器,使用HttpServletResponse装饰器,获取流,生成静态文件。
- 好久不写算法,学习积累中!
- swich语句 编译错误,Expected expression
- poj3461 找子串出现的个数
- 将设计映射为代码
- 通向架构师的道路(第三天)之apache性能调优
- JavaScript中cookie的使用
- linux 下fcntl的使用
- GetWindowRect和GetClientRect