用JSP生成HTM网页,减轻数据库操作
原文:http://www.jspkongjian.net/news.jsp?id=396
此教程的功能: 利用servlet 实现抓取一个网页,把这个网页保存为.htm 比如抓取我们的主页index.jsp,在把他保存为htm,这样当使用了apache和tomcat分离后,我们的主页就由原来的index.jsp 变为 index.htm 了,当tomcat关闭的时候,您的主页也可以访问(实际上是所有静态文件还是一样可以访问)
可能还需要纠正的一个误区: 正常情况下用户在后台发布了一个新闻,会返回一个对话框提示说新闻增加成功!而利用我们这个教程您就不需要在返回一个对话框,直接返回一个网页,问下管理员 发布了新的新闻要不要把主页的htm也更新下,,用户点更新,你们就调用我们的这个servlet重新抓取index.jsp生成一个新的htm文件,事先htm和动态网页更新同步!!
大家跟着做就可以了,首先我们建立个toHtml.java 文件 在里面输入,不需要做任何修改,可以修改的地方我会告诉大家的
package com.jetsum.mystatic;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
public class toHtml extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String url = request.getParameter("urls")!=null?request.getParameter("urls"):"";
String xx = request.getParameter("xx")!=null?request.getParameter("xx"):"";
String jishu = request.getParameter("i")!=null?request.getParameter("i"):"";
int i = Integer.valueOf(jishu).intValue();
i = i+1;
//url是要生成htm的jsp页面
String name = "";
response.setContentType("text/html;charset=GBK");
ServletContext sc = getServletContext();
System.out.println("request.getRealPath"+request.getRealPath(""));
name = request.getRealPath("") + xx;
RequestDispatcher rd = sc.getRequestDispatcher(url);
final ByteArrayOutputStream os = new ByteArrayOutputStream();
final ServletOutputStream stream = new ServletOutputStream()
{
public void write(byte[] data, int offset, int length) {
os.write(data, offset, length);
}
public void write(int b) throws IOException {
os.write(b);
}
};
final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));
HttpServletResponse rep = new HttpServletResponseWrapper(response)
{
public ServletOutputStream getOutputStream() {
return stream;
}
public PrintWriter getWriter() {
return pw;
}
};
rd.include(request, rep);
pw.flush();
FileOutputStream fos = new FileOutputStream(name); // 把jsp输出的内容写到xxx.htm
os.writeTo(fos);
fos.close();
PrintWriter out = response.getWriter();
out.print("<p align=center>首页生成成功!!!</p>");
");
}
}
把他放到WEB-INF/classes/com/jetsum/mystatic/toHtml文件夹下,编译为classes 用jdk1.6编译,编译成功后会出现3个文件 toHtml$1.class , toHtml$2.class , toHtml.class 生成好放在这里就可以了!!
接下来我们设置web.xml
<servlet>
<servlet-name>tohtm</servlet-name>
<servlet-class>com.jetsum.mystatic.toHtml</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>tohtm</servlet-name>
<url-pattern>/web/tohtm</url-pattern>
</servlet-mapping>
这个配置好后需要重启tomcat
然后做个htm网页 在里面输入
<a href="http://www.您的域名.com/web/tohtm?urls=/index.jsp&xx=/index.htm&i=0">生成 首页 网页</a>
这里的urls=/index.jsp 是要被抓取的网页
xx=index.htm 是抓取后要生成的htm文件名称
i=0 是如果有分页的情况下自动抓取下一页,默认情况下为0就可以了
把这个htm网页放到您的空间里,打开浏览器,访问这个htm只要点下这个连接,他就会把您的index.jsp文件自动访问抓取保存为index.htm文件
这样就实现了,您的主页或者其他网页都生成为htm的功能
用JSP生成HTM网页,减轻数据库操作的更多相关文章
- JSP生成静态html网页
/** * jsp生成静态html网页 */ public class ToHtml extends HttpServlet { public void service(HttpServletRequ ...
- 在MVC3中使用code first生成数据局库并操作数据库
1.建立Users和UserInfos两个实体类 对应的是数据库中的表 public class User { //类名+Id(User+Id)组成的字符串在数据库表中会设置该字段是主键且是按1的增量 ...
- 基于OCILIB的oracle数据库操作总结及自动生成Model和Dao的工具
基于OCILIB的oracle数据库操作总结 1. 类图 2. 基类BaseOCIDao的设计与实现 BaseOCIDao.h头文件 #pragma once /* ----- ...
- 使用MVC写模式jsp连接到数据库操作
首先用一个JavaBean封装数据库操作,即mvc中的模型 JdbcBean.java package data; import java.sql.*; public class JdbcBean { ...
- 05:ModelForm 数据验证 & 生成html & 数据库操作
目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...
- jsp数据库连接大全和数据库操作封装到Javabean
一.jsp连接Oracle8/8i/9i数据库(用thin模式) testOracle.jsp如下: <%@ page contentType="text/html;charset=g ...
- net core天马行空系列:降低net core门槛,数据库操作和http访问仅需写接口,实现类由框架动态生成
引文 hi,大家好,我是三合.不知各位有没有想过,如果能把数据库操作和http访问都统一封装成接口(interface)的形式, 然后接口对应的实现类由框架去自动生成,那么必然能大大降低工作量,因 ...
- MySQL数据库操作生成UUID
问题描述: 通过数据库操作,生成无横线的uuid,同时插入至数据库之中. 因为我要给项目做一些测试数据,项目的主键为32位无'-'的uuid,然后在数据库中,通过数据库操作,然后插入一些测试数据. 生 ...
- jsp JDBC连接MySQL数据库操作标准流程参考
1. 此案例以帐号密码后台更新维护为例子,对数据库调取数据更新流程进行演示: 代码示例: <%@page import="java.io.IOException"%> ...
随机推荐
- php文件读取的问题
PHP字符编码问题 首先说下字符编码问题,当我们给定路径后如果路径中包含中文,可能会出现问题,打印到屏幕则显示没问题, 但是读取文件会报错:readfile(E:/素玄文件/app历史版本/素玄ERP ...
- Xcode7 iOS9.0 的真机调试
Xcode7的真机调试: 1.Xcode偏好 -> 账号 -> 增加 Apple ID ->显示 free 2.Target 运行 iOS 版本号 3.修正 Team 项 选择 ...
- [How to]如何自定义plist文件和读取plist文件内容
1.简介 plist作为IOS的固化文件,就好比java中properties文件,但是在IOS中plist是可读写的. 本文将介绍自定义静态的plist文件. 2.自定义静态plist文件 右击你的 ...
- java中的逻辑运算符,以及&与&&的区别,|与||的区别
原创,转载请留言联系 逻辑运算符: & 与 false&true=false:true&true=true:false&false=false 必须两个都是true才返 ...
- Zookeeper 入门第一篇
转载原文地址: ZooKeeper学习总结 第一篇:ZooKeeper快速入门 ZooKeeper学习总结 第二篇:ZooKeeper深入探讨 ZooKeeper学习第一期---Zookeeper简单 ...
- 数据结构与算法之--高级排序:shell排序和快速排序
高级排序比简单排序要快的多,简单排序的时间复杂度是O(N^2),希尔(shell)排序大约是O(N*(logN)^2),而快速排序是O(N*logN). 说明:下面以int数组的从小到大排序为例. 希 ...
- flex布局各种情况总结分析及实例演示
2009年,W3C提出了一种新的方案----Flex布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能. 通过笔者大量实践,发现 ...
- Appscan的第一个测试请求就是提交MAC地址
GET /AppScan_fingerprint/MAC_ADDRESS_真实的MAC地址.html HTTP/1.0 还好都是合法测试,否则情何以堪...
- JDBC连接执行mysql存储过程报权限错误:User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted,
分析:JDBC在调用存储过程时不光用户要有execute的权限,还需要对mysql.proc具有访问权限.否则它无法访问metadata 解决方案:给数据库用户赋权,赋执行mysql.proc表的se ...
- try catch finally 执行顺序面试题总结
在网上看到一些异常处理的面试题,试着总结一下,先看下面代码,把这个方法在main中进行调用打印返回结果,看看结果输出什么. public static int testBasic(){ int i = ...