`
workaccount
  • 浏览: 915 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

【转载】JSP的静态化

    博客分类:
  • JAVA
阅读更多

什么是静态化?静态化就是将动态的jsp转换为静态的html;

为什么要静态化?提高性能加快访问速度,静态化的页面html不需要访问数据库等操作所以要比动态的jsp快很多。
怎样实现静态化
实现静态化的方法很多,本文章要说明的是通过过滤器实现jsp的静态化。
1、我们先了解下jsp页面的请求流程

JSP的静态化 - 程序民工 - suntengjiao1的博客
 
通过上图我们可以知道servlet对象的响应是html,如果我们在servlet对象之后增加个拦截htm响应的功能将html响应保存到服务器,下次访问时直接返回这个静态页面,也就实现了静态化功能。
2、新的请求流程如下图
JSP的静态化 - 程序民工 - suntengjiao1的博客
 
 实现上图拦截servlet响应、判断是否已经静态化功能最好的方法就是拦截器filter。
 
3、具体实现包括,两个类一个配置,两个类分别是FileCaptureFilter(过滤器)和FileCaptureResponseWrapper(静态化)。
FileCaptureFilter(过滤器):负责判断是否已经静态化,调用FileCaptureResponseWrapper(静态化)实现静态化,加载静态化html生成html响应。
FileCaptureResponseWrapper(静态化):继承 HttpServletResponseWrapper,覆写PrintWriter getWriter()方法获得servlet响应内容,负责生成静态化的html、负责将响应返回给客户。
FileCaptureFilter 具体代码如下:
package cn.ce.sale.customer.filter;
 
import java.io.File;
import java.io.IOException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import cn.ce.framework.exception.api.NoLoginException;
import cn.ce.framework.security.api.LoginConstant;
import cn.ce.framework.security.api.LoginUser;
 
public class FileCaptureFilter implements Filter{
 
private String protDirPath;
private FilterConfig filterConfig;
@Override
public void destroy() {
// TODO Auto-generated method stub
 
}
 
@Override
public void doFilter(ServletRequest request,ServletResponse response,FilterChain
chain) throws IOException, ServletException {
//
LoginUser loginUser = (LoginUser) ((HttpServletRequest)request).getSession().getAttribute(LoginConstant.USER);
        if (loginUser == null)
            throw new NoLoginException();
String fileName = "/forum/userId_"+loginUser.getUserId()+".html";
File file = new File(filterConfig.getServletContext().getRealPath(fileName));
// 判断缓存文件是否存在或者是否重新设置了缓存内容
if (!file.exists()) {// 如果缓存文件不存在
fileName=protDirPath+fileName;
FileCaptureResponseWrapper responseWrapper = new
FileCaptureResponseWrapper((HttpServletResponse)response);
chain.doFilter(request, responseWrapper);
//得到的html 页面结果字符串
//String html = responseWrapper.toString();
// 写成html 文件
responseWrapper.writeFile(fileName);
// back to browser
responseWrapper.writeResponse();
}else{
// 转发至缓存文件
request.getRequestDispatcher(fileName).forward(request, response);
 
}
}
 
@Override
public void init(FilterConfig arg0) throws ServletException {
this.filterConfig=arg0;
protDirPath = arg0.getServletContext().getRealPath("/");
}
}
 
  FileCaptureResponseWrapper  具体代码如下:
package cn.ce.sale.customer.filter;
 
import java.io.CharArrayWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
 
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
 
public class FileCaptureResponseWrapper extends HttpServletResponseWrapper {
private CharArrayWriter output;
private HttpServletResponse response;
public String toString()
{
return output.toString();
}
public FileCaptureResponseWrapper(HttpServletResponse response)
{
super(response);
this.response=response;
output =new CharArrayWriter();
}
//覆写getWriter()
public PrintWriter getWriter()
{
return new PrintWriter(output);
}
public void writeFile(String fileName)throws IOException
{
//FileWriter fw = new FileWriter(fileName,"utf-8");
//fw.write( output.toCharArray(),"utf-8" );
//PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(fileName),"utf-8"));
FileOutputStream fos=new FileOutputStream(fileName);
OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
osw.write(output.toCharArray());
osw.close();
}
public void writeResponse() throws IOException
{
PrintWriter out = response.getWriter();
// 重置响应输出的内容长度
response.setContentLength(-1);
out.print( output.toCharArray() );
out.flush();
out.close();
}
}
 
web.xml过滤器配置如下:
<filter>
<filter-name>FileCaptureFilter</filter-name>
<filter-class>
cn.ce.sale.customer.filter.FileCaptureFilter
</filter-class>
</filter>
    <filter-mapping>
<filter-name>FileCaptureFilter</filter-name>
<url-pattern>/order/customer/addCust/*</url-pattern>
</filter-mapping>

 

分享到:
评论

相关推荐

    jsp静态化,jsp静态化

    JSP(JavaServer Pages)静态化是一种常见的优化技术,主要目的是提高网站的访问速度和搜索引擎友好性。在动态网页系统中,JSP页面通常需要经过服务器端的解释和执行,然后将结果发送到客户端。这个过程对服务器资源...

    jsp静态化和伪静态化

    在JSP中,实现伪静态化通常需要借助Web服务器(如Apache、Nginx)或应用服务器(如Tomcat)的URL重写模块,通过配置规则将看似静态的URL映射到实际的动态处理程序。 总的来说,静态化和伪静态化都是优化Web性能的...

    jsp静态化总结(jsp2html)

    **一、JSP静态化的原理** JSP静态化的基本思路是将用户请求的JSP页面在首次访问时或定时任务中预先执行,生成不包含任何服务器端脚本的纯HTML页面,然后将这个HTML页面返回给客户端。这样,后续的请求就可以直接...

    Jsp页面静态化(freemarker)教程及源码

    前台页面的静态化就有利于SEO,所以这个问题摆在了我的面前,在网上一搜,关于这方面的资料不是很多,又很杂,关于这方面的知识,越来或多的程序员将会碰到,原来项目中这部分静态化的功能主要由我来做的,现在我将...

    JSP页面静态化最普遍用的三种

    以下是JSP页面静态化最常用的三种方法的详细解释: 1. 模板替换法 这种方法是通过读取一个静态模板文件(如`template.htm`),然后使用Java代码动态替换其中的占位符,最终生成HTML文件。例如,`buildhtml.jsp`中的...

    jsp的页面静态化技术,很实用

    **JSP页面静态化技术详解** 在Web开发中,JavaServer Pages(JSP)是一种常见的动态网页技术,它允许开发者将HTML代码与Java代码混合编写,以实现动态内容的生成。然而,在高流量的网站中,为了提高性能和降低...

    jsp页面静态化

    **JSP页面静态化**是一种优化网站性能的技术,它的核心思想是将动态生成的HTML页面保存为静态文件,以便后续的访问可以直接返回静态页面,从而减少服务器资源的消耗,提高响应速度。 在Web应用程序中,动态页面是...

    java JSP页面静态化总结_动态页面变为静态页面以减少访问数据库的次数提高速度.zip

    1. **JSP页面静态化原理**: - JSP页面静态化的核心思想是将原本需要服务器实时解析的动态内容,提前转换为静态HTML文件,存储在服务器上。这样,当用户请求这些页面时,服务器不再需要执行JSP脚本,而是直接返回...

    JSP页面静态化

    包括使用freemarker和velocity两种技术来实现静态化。压缩包里面的文件有说明文档,说得很仔细,特别适合入门级别的人参考。还有freemarker和velocity开发所需要的jar包和插件。

    动态JSP页面静态化,html输出

    在Web开发领域,动态JSP页面静态化是一种常见的优化策略,其主要目的是提高网站的性能和用户体验。这一过程涉及到将原本由服务器动态生成的JSP页面转换为纯HTML页面,从而减少服务器处理请求的压力,加快页面加载...

    freemarker把jsp静态化简单应用

    本教程将介绍如何在Java Web项目中利用FreeMarker进行JSP页面的静态化,适合初学者入门学习。 1. **FreeMarker基本概念** FreeMarker是一个基于模板的语言,它与编程语言不同,不包含任何控制结构或函数调用。它的...

    JSP静态化(已测试)

    【资源介绍】:JSP静态化(已测试),多种方法 【备注】: 亲爱的下载用户: 谢谢您光临CSDN阿Q资源中心! 本中心发布的资源均是经过本人测试通过后才发布的,请放心下载。如果您有不清楚的问题或者建议,...

    jsp伪静态化

    /jsp-rewrite/WebRoot/WEB-INF/urlrewrite.xml sql文件: DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) NOT NULL, `userpwd` varchar(20)...

    动态Jsp页面转换成静态Html页面

    动态Jsp页面转换成静态Html页面动态Jsp页面转换成静态Html页面动态Jsp页面转换成静态Html页面动态Jsp页面转换成静态Html页面动态Jsp页面转换成静态Html页面动态Jsp页面转换成静态Html页面动态Jsp页面转换成静态Html...

    页面静态化实例,jsp转化成html

    3. **静态页面生成**:静态化过程中,我们需要在用户请求之前,或者在后台定期执行,将`index.jsp`的动态内容转换为HTML文件,例如生成`index.html`。这通常通过读取JSP,执行其中的Java代码,然后将结果写入HTML...

    JSP生成静态页面

    总的来说,JSP生成静态页面是提高网站效率的有效手段,但同时也需要谨慎处理静态化过程中的各种细节,以确保网站的正常运行和用户体验。在实际项目中,应结合具体需求和资源来选择合适的静态化策略。

    首页静态化步骤

    在Web开发中,首页静态化是常见的性能优化手段。 首先,我们需要了解动态首页和静态首页的区别。动态首页是由服务器端的脚本(如PHP、JSP或ASP.NET)实时生成的,每次请求都会根据数据库中的数据动态生成页面内容。...

    jsp简单静态网页

    - **JSP生命周期**:包括翻译、编译、加载、初始化、服务和销毁六个阶段。 - **JSP元素**:包括指令(directives)、脚本元素(scriptlets)、表达式(expressions)和声明(declarations)。 **2. 静态网页概念*...

    jsp动态页面转化静态化--实例

    2. 编写JSP页面:编写你需要静态化的JSP页面,确保其功能正常。 3. 实现静态化逻辑:在Servlet或Filter中,当接收到请求时,判断是否需要生成静态页面。如果需要,可以使用JSP的`javax.servlet.jsp.JspWriter`对象...

    jsp页面的静态化处理方法一

    NULL 博文链接:https://liu0107613.iteye.com/blog/394825

Global site tag (gtag.js) - Google Analytics