动态JSP页生成静态HTML的方法

本文实例讲述了动态JSP页生成静态HTML的方法。分享给大家供大家参考。具体如下:

具体实现:

利用Filter的过滤功能把*.jsp过滤出来,判断是否存在对应的.html文件,如果不存在对应的.html文件,则将其内容读出写入指定的.html文件,再跳转到对应的.html即可。如果存在对应的.html文件,则直接跳转到对应的.html即可。
 
代码:

JspFilter.java:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
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;
public class JspFilter implements Filter {
  public void destroy() {
    // TODO 自动生成方法存根
  }
  public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException {
    HttpServletRequest hreq = (HttpServletRequest) request;
    HttpServletResponse hresp = (HttpServletResponse) response;
    String name = hreq.getRequestURL().substring(
          hreq.getRequestURL().lastIndexOf("/") + 1,
          hreq.getRequestURL().lastIndexOf("."));
    if (hreq.getRequestURL().indexOf(".jsp") != -1 && (null == hreq.getParameter("type") || hreq.getParameter("type").equals(""))) {
        hresp.sendRedirect(hreq.getContextPath()+"/conversion?name="+hreq.getRequestURL());
        return ;
    }
    chain.doFilter(request, response);
  }
  public void init(FilterConfig arg0) throws ServletException {
    // TODO 自动生成方法存根
  }
}

ConversionServlet.java:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ConversionServlet extends HttpServlet {
  public ConversionServlet () {
    super();
  }
  public void destroy() {
    super.destroy(); // Just puts "destroy" string in log
    // Put your code here
  }
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    //----获取请求的URL
    String reqTarget = request.getParameter("name");
    //----指定对应JSP的HTML名称
    String name = reqTarget.substring(reqTarget.lastIndexOf("/") + 1,reqTarget.lastIndexOf("."));
    //---判断是否存在对应的HTML文件
    File file = new File(request.getRealPath("/") + name + ".html");
    if (!file.exists()) {  //--------如果不存在对应的HTML文件
      try {
        file.createNewFile();  //--------创建HTML文件
        //-------将JSP的内容写入对应的HTML文件内
        InputStream in;
        StringBuffer sb = new StringBuffer("");
      //----注意这里,不能直接访问请求的URL,如果直接访问的话,会陷入死循环
        URL url = new java.net.URL(reqTarget.toString()+"?type=11");
        HttpURLConnection connection = (HttpURLConnection) url
            .openConnection();
        connection.setRequestProperty("User-Agent", "Mozilla/4.0");
        connection.connect();
        in = connection.getInputStream();
        java.io.BufferedReader breader = new BufferedReader(
            new InputStreamReader(in, "GBK"));
        String currentLine;
        FileOutputStream fos = new FileOutputStream(file);
        while ((currentLine = breader.readLine()) != null) {
          sb.append(currentLine);
          fos.write(currentLine.getBytes());
        }
        if (null != breader)
          breader.close();
        if (null != fos)
          fos.close();
        //---------------转到与JSP对应的HTML页
        response.sendRedirect(request.getContextPath()+"/"+name + ".html");
      } catch (Exception e) {
        e.printStackTrace();
      }
    }else{
      //----------如果存在指定的HTML,直接跳转到指定的HTML页
      response.sendRedirect(request.getContextPath()+"/"+name + ".html");
    }
  }
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    doGet(request, response);
  }
  public void init() throws ServletException {
    // Put your code here
  }
}

WEB.XML配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
  xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <filter>
  <filter-name>jspfilter</filter-name>
  <filter-class>com.beanutil.JspFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>jspfilter</filter-name>
  <url-pattern>*.jsp</url-pattern>
 </filter-mapping>
 <servlet>
  <servlet-name>conversion</servlet-name>
  <servlet-class>com.beanutil.ConversionServlet </servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>conversion</servlet-name>
  <url-pattern>/conversion</url-pattern>
 </servlet-mapping>
</web-app>

希望本文所述对大家的JSP程序设计有所帮助。

(0)

相关推荐

  • JSP中动态include与静态include的区别介绍

    动态INCLUDE 用法:<jsp:include page="included.jsp" flush="true" /> 说明:它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数,先编译之后再进行处理. 原因:1.静态include的结果是把其他jsp引入当前jsp,两者合为一体. 2.静态include纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能有变量同名的冲突.而页面设

  • jsp实现将动态网页转换成静态页面的方法

    本文实例讲述了jsp实现将动态网页转换成静态页面的方法.分享给大家供大家参考.具体如下: 如果我可以将jsp动态网页转换成静态页面,那么访问的时候就不需要频繁的访问数据库了. jsp 显示内容缓存技巧 前段时间做自己社区的论坛,在jive 的基础上做一个页面显示所有论坛的帖子,可以称之为总版,模仿forum 类的接口做个superforum 并且实现cachable,不过因为这个页面刷新量比较大,虽然被cache 了,我还是想办法进行页面的缓存,感觉用jsp 产生的html静态内容当缓存,页面访

  • jsp中include指令静态导入和动态导入的区别详解

    1.什么是静态导入? 静态导入指的是,将一个外部文件嵌入到当前JSP文件中,同时解析这个页面的JSP语句,它会把目标页面的其他编译指令也包含进来.include的静态导入指令使用语法: 复制代码 代码如下: <%@include file="relativeURLSpec"%> 静态导入使用范例include1.jsp: 复制代码 代码如下: <%@ page contentType="text/html; charset=utf-8" langu

  • JSP技术实现动态页面到静态页面的方法

    本文是介绍了jsp技术实现动态页面到静态页面的方法,分享给大家,具体如下: 对于JSP技术实现动态页面到静态页面的方案,我们从三个步骤来说明: JSP技术实现动态页面到静态页面的方案第一: 为了能深入浅出的理解这个框架的由来,我们首先来了解一下JSP解析器将我们写的JSP代码转换成的JAVA文件的内容. 下面是一个JSP文件test.jsp ﹤%@ page language=java contentType=text/html;charset=GB2312 %﹥ ﹤% out.write(﹤!

  • 动态JSP页生成静态HTML的方法

    本文实例讲述了动态JSP页生成静态HTML的方法.分享给大家供大家参考.具体如下: 具体实现: 利用Filter的过滤功能把*.jsp过滤出来,判断是否存在对应的.html文件,如果不存在对应的.html文件,则将其内容读出写入指定的.html文件,再跳转到对应的.html即可.如果存在对应的.html文件,则直接跳转到对应的.html即可.   代码: JspFilter.java: import java.io.BufferedReader; import java.io.File; imp

  • PHP中实现生成静态文件的方法缓解服务器压力

    互联网快速普及的现在社会,越来越多的人会在一个web应用上进行交流,因而导致服务器与数据库访问压力与日俱增,这边就需要进行一些优化,譬如增加缓存.二级缓存.动态网页静态化以及其他的高端技术. 此处作者是使用生成静态文件的方法: 复制代码 代码如下: /** * @desc 生成静态文件时使用 * @todo htmlcache * @param $root string html文件存放路径 * @param $rule string html文件命名规则 * @param $url strin

  • ASP.NET编程简单实现生成静态页面的方法【附demo源码下载】

    本文实例讲述了ASP.NET编程简单实现生成静态页面的方法.分享给大家供大家参考,具体如下: 1. 使用场景 当页面的数据不需要经常更改时可采用静态页面方式. 2. 使用静态页面的好处 (1)提高网站的访问速度 (2)减轻服务器负担 (3)利于搜索引擎抓取 3. ASP.NET生成静态页面 生成静态页面方法有很多种,先说下我使用的其中的一种.参考资料 基本思路: (1)创建模板template.html文件,在里面定义一些特殊的字符串格式用于替换内容,如$htmlformat (2)读取模板,赋

  • Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法

    接着这篇文章Node.js+jade抓取博客所有文章生成静态html文件的实例继续,在这篇文章中实现了采集与静态文件的生成,在实际的采集项目中, 应该是先入库再选择性的生成静态文件. 那么我选择的数据库是mongodb,为什么用这个数据库,因为这个数据库是基于集合,数据的操作基本是json,与dom模块cheerio具有非常大的亲和力,cheerio处理过滤出来的数据,可以直接插入mongodb,不需要经过任何的处理,非常的便捷,当然跟node.js的亲和力那就不用说了,更重要的是,性能很棒.这

  • PHP动态页生成静态页的3种常用方法

    生成静态页的页面非常的简单就是定义好模板与模板标题,之后利用str_replace进行替换了,是最常用的方法,另一种是利用ob_get_contents输出获得然后生成html,还有一种不怎么推荐的是使用file_get_contents直接执行访问远程文件然后进行保存,性能极差. 具体方法简单说明如下: 1.使用文件函数得到静态页面的模板字符串,然后用str_replace函数将需要替换的东西替换了再写入到新的文件中. 2. 利用PHP的输出控制函数(Output Control)得到静态页面

  • ASP.NET MVC生成静态页面的方法

    本文主要讲述了在asp.NET mvc中,页面静态化的方法.对于网站来说,生成纯html静态页面除了有利于seo外,还可以减轻网站的负载能力和提高网站性能. 1.先付上封装好生成静态页的原代码: public class Common { #region 获取模板页的Html代码 /// <summary> /// 获取页面的Html代码 /// </summary> /// <param name="url">模板页面路径</param>

  • jsp生成静态页面的方法

    复制代码 代码如下: 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;

  • 用php的ob_start来生成静态页面的方法分析

    虽然方法很多,但使用起来简便容易的,我觉得还是先判断已经生成的首页文件的生成时间和现有时间之间的差值,如果满足某个值就开始生成,这种方法比较来得容易,不多说了,开始吧! 在开始之前还是提一下三个函数吧:"ob_start().ob_end_clean().ob_get_contents()" ob_start():是打开缓冲区的,就是要把您需要生成的静态文件的内容缓存在这里: ob_get_contents():是读出缓冲区里的内容,下面有代码为例: ob_end_clean():这个

  • ASP.NET静态页生成方法

    本文实例讲述了ASP.NET静态页生成方法.分享给大家供大家参考.具体实现方法如下: 一.问题: 由于业务需要,得把页面按照模板页生成静态页面,所以自己就琢磨了下,写些思路,以备日后需要的时候用. 二.解决方法: 静态页生成用到最多的就是匹配跟替换了,首先得读取模板页的html内容,然后进行你自己定义的标签匹配,比如说我要把我定义的标题标签换成读取数据库的标题内容,那么可以直接读取数据库的标题,然后直接进行替换,然后生成html文件就OK了. 具体代码如下: 复制代码 代码如下: /// <su

随机推荐