`
isiqi
  • 浏览: 16820194 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

产生静态的hmtl文件

阅读更多

产生静态的hmtl文件


从publish.jsp开始执行,html.template是模板文件,publish.jsp提交给
publishOK.jsp处理,生成静态的html文件!

//html.template文件

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>学生商行『新闻系统』--<$title$></title>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="778" align="center">
<tr>
<td>标题:</td>
<td><$title$></td>
</tr>
<tr>
<td>内容:</td>
<td><$content$></td>
</tr>
</table>
</body>
</html>

//publish.jsp文件

<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>首页</title>
</head>
<body>
<form name="form1" method="post" action="publishOK.jsp">
<table>
<tr>
<td>标 题:</td>
<td><input type="text" name="title" size="60"></td>
</tr>
<tr>
<td>内 容:</td>
<td><textarea name="content" rows="10" cols="100"> </textarea> </td>
</tr>
<tr>
<td><input type="submit" value="确定"/></td>
<td><input type="reset" value="重置"/></td>
</tr>
</table>
</form>
</body>
</html>

//publishOK.jsp文件
<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gbk"%>
<%@ page import="com.ok.*" %>
<%@ page import="java.util.Calendar" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>处理转化成hmtl</title>
</head>
<body>
<%
String title = request.getParameter("title");
String content = request.getParameter("content");

String filePath = "";
filePath = application.getRealPath("/html.template"); //这个也可以获得路径,或通上下文也可以!

String[] flag = {"<$title$>","<$content$>"}; //html模板中要替代的字符串
String templateContent;
try
{
templateContent = ReadTemplates.getTlpContent(filePath);
}
catch(ReadTemplateException e){
throw new Exception(e.getMessage());
}

title = new String(title.getBytes("iso-8859-1"),"gbk"); //将其转化成GBK编码,不然输入中文时,不能正确显示!
content = new String(content.getBytes("iso-8859-1"),"gbk");

//要正确显示字符串的回车(使显示的内容和原来的一样),要将获得的内容的回车\n换成<br>.
title=title.replaceAll(" ","&nbsp;");
content=content.replaceAll("\n","<br/>"); //换行转化
content=content.replaceAll(" ","&nbsp;"); //空格转化
//html模板中的<$title$>,<$content$>替换为实际内容
templateContent = ReplaceAll.replace(templateContent,flag[0],title);
templateContent = ReplaceAll.replace(templateContent,flag[1],content);

// 根据时间得文件名与路径名
Calendar calendar = Calendar.getInstance();
String fileName = String.valueOf(calendar.getTimeInMillis()) +".html";

// 如果是linux系统中,要把下面的 "\\" 改为 "/"
String pathName = application.getRealPath("../news")+"/"+ calendar.get(Calendar.YEAR) +
"/"+ (calendar.get(Calendar.MONTH)+1) +"/"+ calendar.get(Calendar.DAY_OF_MONTH)+"/";
System.out.println("pathName="+pathName);//(正确)这是打印出的路径,如GenerateHtml\..\news/2007/4/26/这是正确的,因为它创建文件夹时,用"/"或"\\"都可以!
//只是打印出的信息/和\不一样转罢了.
System.out.println("fileName="+fileName);

/**
* 写文件
*/
try {
WriteHtml.save(templateContent,pathName,fileName);
}
catch(WriteFileException e){
throw new Exception("新闻发布失败。可能是目录不具备IO操作权限。请与管理员联系。");
}

//接下去,可以把生成的html路径写入数据库中就可以了,这样就生成了静静的html文件了。
//testForm.setNewsFilePath(calendar.get(Calendar.YEAR)+"/"+(calendar.get(Calendar.MONTH)+1)+"/"+ calendar.get(Calendar.DAY_OF_MONTH)+"/"+fileName);
out.println("测试成功!!");
out.println("生成静态html成功!!");
%>
</body>
</html>

在JSP文件中,要用到的类ReadTemplates.java、ReadTemplateException.java
ReplaceAll.java、WriteFileException.java、WriteHtml.java。
//ReadTemplates.java文件
package com.ok;
import java.io.FileInputStream;
import java.io.IOException;

public class ReadTemplates {
private static String tlpContent = null; //该字符串变量用来保存读取的文件内容

public ReadTemplates()
{
}

public static String getTlpContent(String s) //返回读取的文件内容,其中s是文件的存放路径
throws ReadTemplateException
{
if(tlpContent == null) // 如果字符串变量tlpContent为空
try
{
tlpContent = readTemplateContent(s); //调用readTemplateContent方法!
if(tlpContent == null)
throw new ReadTemplateException("tlpContent is null !");
}
catch(ReadTemplateException readtemplateexception)
{
throw new ReadTemplateException("read template error !");
}
return tlpContent;
}

private static synchronized String readTemplateContent(String s)
throws ReadTemplateException //读取的文件的方法,s是文件路径
{
String s1 = null;
try
{
FileInputStream fileinputstream = new FileInputStream(s);
int i = fileinputstream.available(); //返回文件内容的总字节数
byte abyte0[] = new byte[i]; //初始化一个字节数据
fileinputstream.read(abyte0);
fileinputstream.close();
s1 = new String(abyte0,"gbk");
}
catch(IOException ioexception)
{
throw new ReadTemplateException("io error !");
}

System.out.println("ReadTemplates的readTemplateContent方法读取的字符串s1是否是(gbk)="+s1);
return s1;
}
}

//ReadTemplateException.java文件

package com.ok;


public class ReadTemplateException extends Exception
{
/**
*
*/
private static final long serialVersionUID = 1L;

public ReadTemplateException()
{
}

public ReadTemplateException(String s)
{
super(s);
}
}

//ReplaceAll.java文件

package com.ok;


public class ReplaceAll {

public ReplaceAll()
{
}

public static String replace(String s, String s1, String s2)
{ //s为模板文件中的读取内容;s1为插入位置(如<$title$>);s2为插入参数值(即<$title$>替换的内容)
if(s == null)
return null;
StringBuffer stringbuffer = new StringBuffer();
int i = s.length(); //模板文件中的字节长度
int j = s1.length(); //插入位置的标签名长度
int k;
int l;
for(k = 0; (l = s.indexOf(s1, k)) >= 0; k = l + j)
{
stringbuffer.append(s.substring(k, l));
stringbuffer.append(s2); //插入参数值(如<$title$>替换的内容)
}

if(k < i)
stringbuffer.append(s.substring(k));

System.out.println("ReplaceAll中方法replace的返回内容:(是否是GBK)="+stringbuffer.toString());
return stringbuffer.toString();
}
}

//WriteFileException文件
package com.ok;


public class WriteFileException extends Exception{

/**
*
*/
private static final long serialVersionUID = 1L;

public WriteFileException()
{
}

public WriteFileException(String s)
{
super(s);
}
}

//WriteHtml.java文件
package com.ok;
import java.io.*;

public class WriteHtml {
public WriteHtml()
{
}

public static void save(String s, String s1, String s2)
throws WriteFileException //s为要写入的内容,s1为要写入的文件目录,s2为文件名
{
try
{
getFile(s1); //要写入文件目录s1是否存在,不存在则创建!
FileOutputStream fileoutputstream = new FileOutputStream(s1 + s2); //初始化写入操作流
byte abyte0[] = s.getBytes();
fileoutputstream.write(abyte0); //将内容写入到文件中!
fileoutputstream.close();
}
catch(IOException ioexception)
{
throw new WriteFileException("write file error !");
}
}

private static void getFile(String s)
throws WriteFileException
{
try
{
File file = new File(s);
if(!file.exists()) //查看目录是否存在,如果不存在,则创建目录
file.mkdirs();
}
catch(Exception exception)
{
throw new WriteFileException("wirte File error !");
}
}
}


分享到:
评论

相关推荐

    DZX3.5伪静态规则文件

    在这个场景下,"DZX3.5伪静态规则文件"指的是该系统用于实现伪静态功能的配置文件。 伪静态的主要优点在于: 1. **搜索引擎友好**:静态URL对于搜索引擎更加友好,因为它们看起来更像目录结构,有助于爬虫更好地...

    生成静态文件..

    当用户请求这些静态HTML文件时,服务器不再需要执行ASP.NET引擎中的代码,而是直接发送预生成的静态内容,这极大地提高了响应速度。 二、自定义生成静态文件 在ASP.NET中,可以编写自定义的解决方案来生成静态文件...

    PHP生成静态HTML的技术原理

    5. **反向代理与负载均衡**:配合Nginx或Apache等服务器,可以设置反向代理,将静态HTML文件作为缓存,减轻主服务器的压力。例如,Nginx可以配置为首先尝试从指定目录查找静态HTML,如果不存在才转发请求给PHP-FPM...

    解决pyecharts运行后产生的html文件用浏览器打开空白 下载引用资源到本地

    1. 根据网站资源引用说明:pyecharts 使用的所有静态资源文件存放于 pyecharts-assets 项目中,默认挂载在 https://assets.pyecharts.org/assets/ ...之后打开pyecharts图表,再也不用担心html文件用浏览器打开空白啦!

    html生成静态页,SEO优化

    2. **可爬性**:搜索引擎爬虫更善于处理和索引静态HTML内容,因为它们结构清晰,没有动态内容可能产生的复杂性。 3. **URL结构**:静态页面的URL往往更具可读性,更符合SEO最佳实践,可以清晰地反映出页面内容。 4...

    php页面静态化

    PHP页面静态化是一种常见的优化网站性能的技术,它将动态生成的网页内容转化为静态HTML文件,以便浏览器可以直接加载,而无需每次请求时都执行PHP脚本和查询数据库。这样可以显著提高页面加载速度,减轻服务器负担,...

    一号店html5首页静态代码

    在HTML5中,我们看到了一系列关键的技术进步,对前端开发产生了深远影响。首先,HTML5引入了新的语义化标签,如、、和等,这些标签有助于提高网页的可读性和可访问性,同时也便于搜索引擎优化(SEO)。此外,离线...

    servlet 截获 html 静态页面源码

    5. 检查请求的URI,如果以".html"或".htm"结尾,那么读取服务器上的HTML文件内容;否则,让FilterChain继续处理请求,即调用`chain.doFilter(request, prw)`,这里`prw`是一个自定义的`PageResponseWrapper`,用于...

    伪静态 伪静态配置 控件

    在配置伪静态时,我们需要在Web服务器配置文件中进行设定。例如,对于Apache服务器,我们可以使用`.htaccess`文件来实现这一目的。在这个文件中,我们可以定义重写规则,将动态URL重定向到静态形式。例如,一个典型...

    伪静态的实现及伪静态的意义.ASP.NET

    此外,随着网站内容的不断增长,存储和管理大量静态HTML文件将变得越来越复杂。相比之下,伪静态则通过服务器端的重写规则,在不生成实际静态文件的情况下,实现类似静态页面的效果,降低了对硬盘的依赖,同时也减少...

    ASP静态化插件

    5. **安全考虑**:静态HTML文件无法像动态页面那样直接处理用户输入,因此在设计和实现时要特别注意防止可能的安全问题,如跨站脚本攻击(XSS)和文件包含漏洞等。 综上所述,ASP静态化插件是提升ASP网站性能和优化...

    HHFtohtml 静态页面生成控件

    运行引子页面(index.html)后,自动产生各种需要的静态页面。 如果运行时间超过设定的时间(默认5分钟),则重新生成页面,每个页面都可以单独设置重新生成时间。 具体使用方法请进入控件文件夹,查看Method.txt文件

    Spring Boot Web 静态文件缓存处理的方法

    静态文件缓存处理是 Web 开发中非常重要的一步,特别是在移动设备上访问时,静态文件的加载速度会对用户体验产生很大的影响。在本文中,我们将介绍使用 Spring Boot 的缓存机制来缓存静态文件,从而提高页面加载速度...

    生静态网站ASP

    5. **易于分发和备份**:静态HTML文件可以轻松地进行分发和备份,而无需担心依赖的服务器环境或数据库。 在实施ASP生静态的过程中,开发者通常会使用一些工具或自定义代码来自动化这个过程,例如在发布网站内容时...

    网趣网上购物系统HTML静态版V2013

     网趣静态版采用多规则动态调用技术生成纯Html静态文件,自由支配要生成的静态部分。采用领先的进度条与百分比调度模式!统一百分比及进度条直观显示生成过程,动态实时显示生成进度与生成比率。系统完美支持HTM...

    解决pyecharts运行后产生的html文件用浏览器打开空白

    根据网站资源引用说明:pyecharts 使用的所有静态资源文件存放于 pyecharts-assets ...pyecharts-assets 提供了 pyecharts 的静态资源文件。 可通过 localhost-server 或者 notebook-server 启动本地服务。首先将项目

    mvc3 模板引擎生成静态页

    然而,对于某些内容不会频繁更改的页面,生成静态HTML页面可以提供更快的加载速度和更低的服务器负载。 静态页生成,就是将原本动态生成的网页转换为纯HTML文件,用户访问时直接读取这些文件,无需再经过服务器处理...

    网趣网上购物系统HTML静态版v2012版

    事实证明,HTML静态文件快速被搜索引擎收录,网趣HTML静态版V2012在采用先进的AJAX与XML技术生成的前提下,同时兼备了强大的SEO优化于一体,使您的网店推广变的尤为轻松!从此让您的网店在搜索引擎中脱颖而出! ...

    Nginx和Apache之伪静态设置 (运维珍藏版)

    2. **使用PHP文件读写功能生成静态页面**:直接使用PHP的文件读写功能将动态内容写入HTML文件。 3. **使用PHP输出控制函数缓存机制生成静态页面**:利用PHP的输出缓冲机制来缓存动态生成的内容,并将其输出为静态...

    PHP实现页面静态化1

    【PHP实现页面静态化】是提高网站性能的重要手段,它将动态内容转化为静态HTML文件,减少服务器处理负担,提升用户体验。本案例主要介绍如何在PHP 7环境下进行页面静态化,包括纯静态化和伪静态化的实现。 一、开发...

Global site tag (gtag.js) - Google Analytics