JSP生成静态的HTML页面

STM32F103移植NuttX实战:从零搭建最小系统到串口Shell(附完整配置文件) 本文详细介绍了在STM32F103C8T6开发板上移植NuttX实时操作系统的完整过程,包括环境搭建、BSP配置、系统时钟初始化、驱动裁剪、编译烧录及串口Shell交互。通过实战指南帮助开发者快速掌握NuttX移植技巧,解决典型问题,适用于嵌入式系统开发。 阅读详情

转载自:http://suntengjiao1.blog.163.com/blog/static/992110882012925111712224/

同时可以参考http://www.oschina.net/code/snippet_1862802_37160?p=4#comments这篇文章 特别是下面的评论 很精彩


整体思路:请求 jsp之后,  服务器会把 资源jsp  放入到 response.getOutputStream() 中。得到这个流信息,然后  生成 html或者shtml等文件 

什么是静态化?静态化就是将动态的jsp转换为静态的html; (如果直接修改response的输出位置行不行呢?不让它输出到HTTP 不输出到浏览器 而是直接将其修改为输出到硬盘上行不行呢?? 如果可以的话 那么此次请求 岂不是没有响应了??? 希望高手给点指示)

为什么要静态化?提高性能加快访问速度,静态化的页面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>
深入解析进化算法中的选择与多样性 在计算科学的世界里,最优雅的解决方案往往源于最古老的智慧——大自然。进化算法(Evolutionary Algorithms, EAs)正是这样一种受达尔文自然选择学说启发的强大工具。它们通过模拟“适者生存”的过程,在庞大的可能性海洋中搜寻最优解。。:指的是深入挖掘和优化已知的优质解。这就像在一片已知的沃土上精耕细作,力求获得最高产量。强大的选择压力会促进这一过程。:指的是在整个搜索空间中寻找全新的、可能更优的解。这好比派遣探险队去发现新大陆,充满了未知与机遇。保持种群的多样性是探索的关键。 阅读详情

相关推荐

java 页面静态化

NULL 博文链接:https://xh584990686.iteye.com/blog/1392265

thymeleaf局部改变页面元素_页面静态化,让你的系统快的飞起来

点击关注"故里学Java"右上角"设为星标"好文章不错过页面静态化,相比很多人都听过,但是我们为什么使用页面静态化和使用页面静态化的好处又有哪些呢?今天这篇文章我们就来详细的讲讲。什么是页面静态化?静态化就是指把原本动态生成html页面变为静态内容保存,用户客户端请求的时候,直接返回静态页面,不用再经过服务渲染,不用访问数据库,可以大大的减小数据库的压力,显著的提高性能。页面静态化可以...

weixin_39612122的博客 437

电子-一种电容式MEMS压力传感器

行业分类-电子-一种电容式MEMS压力传感器

jsp 静态化

JSP静态化   2012-10-25 12:45:39|  分类: java |  标签: |字号大中小 订阅 什么是静态化静态化就是将动态的jsp转换为静态html; 为什么要静态化?提高性能加快访问速度,静态化页面html不需要访问数据库等操作所以要比动态的jsp快很多。 怎样实现静态化? 实现静态化的方法很多,本文章要说明的是通过过滤器实现jsp静态

软件的世界 1206

java页面静态化

1.概念 页面静态化,其实就是将动态生成jsp页面,变成静态HTML页面,让用户直接访问。 2.优点 (1)加快页面打开浏览速度,静态页面无需连接数据库,打开速度较动态页面有明显提高。 (2)降低数据库压力,数据库只有在最初写入HTML文件时被访问一次,之后都直接访问静态页面,大大降低与数据库交互次数。 (3)即使客户端数据库出错,也不影响网站的正常访问。 2.原理 ...

qq_42922647的博客 1615

Java使用Freemarker页面静态化生成实现

2、创建模板文件 模板文件中有四种元素:在D盘创建ftl目录,在ftl目录中创建名称为test.ftl的模板文件,内容如下: 创建模板文件示例使用步骤:第一步:创建一个 Configuration 对象,直接 new 一个对象。构造方法的参数就是 freemarker的版本号。第二步:设置模板文件所在的路径。第三步:设置模板文件使用的字符集。一般就是 utf-8。第四步:加载一个模板,创建一个模板对象。第五步:创建一个模板使用的数据集,可以是 pojo 也可以是 map。一般是 Map。第六步:创建一个 W

我要记录学习博客 1980

jsp页面中的静态html页面,jsp生成静态html页面

/*** 菜鸟研究一下生成静态页面,因为我是看着API来翻译的,所以如果有不对的话请指出来* 参数requestPageUrl想要生成htmljsp文件路径(如:/frontStage/articleMenuContent.jsp),这是实际存在的jsp文件* (同时我看了一些API想找到只需要传过来一个action也可以的方法,但是找不到...请高手帮帮忙..指点一下)* 参数createPa...

weixin_26968079的博客 627

JSP生成静态HTML页面的几种方法

转自:http://wenku.baidu.com/view/95c78069a45177232f60a2e8.html http://wenku.baidu.com/view/00d3a576f46527d3240ce046.html 还可以参考 JSP 生成静态 HTML 页面的几种方法   2008 年 04 月 12 日   ...

secondsyy的博客 1058

jsp生成静态html页面思路【2】

JSP生成静态页实践及其设计思想[2]                        为了减轻服务器压力,将原来的文章管理系统由JSP文件的从数据库中取数据显示改为由jsp生成静态html文件后直接访问html文件。下面是一个简单的示例1.buildhtml.jsp @ page contentType="text/html; charset=gb2312" import="jav

静心编程-java-php-jsp-数据库-网站-我们一起成长 926

jsp生成静态html页面

/** * 菜鸟研究一下生成静态页面,因为我是看着API来翻译的,所以如果有不对的话请指出来 * 参数requestPageUrl想要生成htmljsp文件路径(如:/frontStage/articleMenuContent.jsp),这是实际存在的jsp文件 * (同时我看了一些API想找到只需要传过来一个action也可以的

天才少年程序员-李荣盛专栏 1008

java 自动生成html_jsp生成静态页面——自动生成全部html文件

生成html页面的主要代码package vip.chencheng.blogstatic;import java.io.ByteArrayOutputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PrintWrit...

weixin_39756235的博客 565

怎么把jsp转换成html代码,把JSP转换成HTML生成静态页面

package com.simon.web;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import ja...

weixin_39760650的博客 806

JSP 生成静态HTML页面

JSP 生成静态HTML页面

上班搞IT,下班搞ITF。 3809

【转载】JSP生成静态Html页面

在网站项目中,为了访问速度加快,为了方便百度爬虫抓取网页的内容,需要把jsp的动态页面转为html静态页面。通常有2种常用的方式: 1.伪静态,使用URL Rewriter 2.纯静态,本文中代码实现的就是纯静态,Servlet实现。 代码: [java]view plaincopy importjava.io.ByteArrayOutputStre...

weixin_33962621的博客 202

Java页面静态化

我们需要理解Java页面的动态生成过程。在实际应用中,我们可以通过各种开源工具和框架来实现Java页面静态化,例如: - **FreeMarker** 或 **Thymeleaf**:这两个是常见的Java模板引擎,可以在服务器端将数据和模板结合生成HTML。- **SiteMesh** 或 **Layouts**:提供页面布局功能,方便进行静态页面的统一设计。- **Nginx** 或 **Apache** 的URL重写功能:可以通过配置规则,将动态请求重定向到对应的静态HTML文件。

kang2500的博客 526

java jsp静态常量,static与final变量-JSP教程,Java技巧及代码

一、illegal forward refrence前天写一个类时遇到一个很眼生的编译错误(问题简化后):punlic final class constants{public static int var2 = var1 + 1;public static int var1 = 1;}编译时出错(第2行):illegal forward refrence仔细一想,是因为var2引用的var1在v...

weixin_34690611的博客 554

java网站页面静态化方案

要生活得漂亮,需要付出极大的忍耐,一不抱怨,二不解释,绝对是个人才。——《变形记》 1、概述在大型网站中,如京东和当当商品详情界面,看到的页面基本上是静态页面。为什么都要把页面静态化呢?把页面静态化,好处有很多。例如:访问速度快,更有利于搜索引擎收录等。目前主流的静态化主要有两种: (1)一种是通过程序将动态页面抓取并保存为静态页面,这样的页面的实际存在于服务器的硬盘中;(2)另外一种是通过WEB

跨语言,跨平台,跨应用 1万+

Java页面静态化

1.页面静态化介绍 2.Freemarker介绍 3.Freemarker入门案例 3.1环境搭建 创建maven工程并导入Freemarker的maven坐标 <dependency> <groupId>freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </d

XiaoYabeI的博客 1907

jsp页面静态化例子

package com.htmlstatic; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import jav...

我的IT之旅 252
上一篇: sprinvMVC 中重定向、转发、重定向到Control
下一篇: Java路径问题最终解决方案—可定位所有资源的相对路径寻址
gwpJava
博客等级 码龄14年 11粉丝 91原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值