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

本文是介绍了jsp技术实现动态页面到静态页面的方法,分享给大家,具体如下:

对于JSP技术实现动态页面到静态页面的方案,我们从三个步骤来说明:

JSP技术实现动态页面到静态页面的方案第一:

为了能深入浅出的理解这个框架的由来,我们首先来了解一下JSP解析器将我们写的JSP代码转换成的JAVA文件的内容。

下面是一个JSP文件test.jsp

﹤%@ page language=java contentType=text/html;charset=GB2312 %﹥
﹤%
out.write(﹤!--文件开始--﹥);
%﹥
﹤html﹥
﹤head﹥
﹤body﹥
﹤%=输出%﹥
﹤/body﹥
﹤/head﹥
﹤/html﹥ 

经过Tomcat转换出的Java文件test$jsp.java内容如下:

package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import org.apache.jasper.runtime.*; 

public class test$jsp extends HttpJspBase { 

 static { 

 }
 public testOutRedir$jsp( ) {
 } 

 private static boolean _jspx_inited = false; 

 public final void _jspx_init() throws org.apache.jasper.runtime.JspException { 

  }
  public void _jspService(HttpServletRequest request, HttpServletResponse response) 

    throws java.io.IOException, ServletException {
 JspFactory _jspxFactory = null;
 PageContext pageContext = null;
 HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out= null;
    Object page = this;
    String _value = null;
    try { 

      if (_jspx_inited == false) {
        synchronized (this) {
          if (_jspx_inited == false) {
            _jspx_init();
            _jspx_inited = true; 

          }
        }
      }
      _jspxFactory = JspFactory.getDefaultFactory(); 

      response.setContentType(text/html;charset=GB2312); 

      pageContext = _jspxFactory.getPageContext(this, request, response, 

             , true, 8192, true); 

      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out= pageContext.getOut(); 

        //为了节省篇幅,我删除了解释器添加的注释 

        out.write(\r\n); 

 //上一句是由于
 ﹤%@ page language=java contentType=text/html;charset=GB2312 %﹥后面的换行产生的 

        out.write(﹤!--文件开始--﹥); 

        out.write(\r\n﹤html﹥\r\n﹤head﹥\r\n﹤body﹥\r\n); 

        out.print(输出); 

        out.write(\r\n﹤/body﹥\r\n﹤/head﹥\r\n﹤/html﹥\r\n); 

    } catch (Throwable t) { 

      if (out!= null &&out.getBufferSize() != 0) 

        out.clearBuffer(); 

      if (pageContext != null) pageContext.handlePageException(t); 

    } finally { 

      if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext); 

    } 

  } 

}

从上面的代码中可以清晰的看到JSP内建的几个对象(out、request、response、session、pageContext、application、config、page)是怎么产生的,懂servlet的朋友一看就能明白。

下面重点理解一下out对象,它被声明为JspWriter类型,JspWriter是一个抽象类,在包javax.servlet.jsp中可以找到它的定义。

abstractpublicclassjavax.servlet.jsp.JspWriterextends java.io.Writer{ 

   final public static intNO_BUFFER = 0; 

   final public static intDEFAULT_BUFFER = -1; 

   final public static intUNBOUNDED_BUFFER = -2; 

   protected intbufferSize; 

   protected BooleanautoFlush; 

   protectedjavax.servlet.jsp.JspWriter(intarg1,booleanarg2); 

  abstractpublicvoidnewLine()throwsIOException; 

  abstractpublicvoidprint(booleanarg0)throwsIOException; 

  abstractpublicvoidprint(chararg0)throwsIOException; 

  abstractpublicvoidprint(intarg0)throwsIOException; 

  abstractpublicvoidprint(longarg0)throwsIOException; 

  abstractpublicvoidprint(floatarg0)throwsIOException; 

  abstractpublicvoidprint(doublearg0)throwsIOException; 

  abstractpublicvoidprint(char[]arg0)throwsIOException; 

  abstractpublicvoidprint(Stringarg0)throwsIOException; 

  abstractpublicvoidprint(Objectarg0)throwsIOException; 

  abstractpublicvoidprintln()throwsIOException; 

  abstractpublicvoidprintln(booleanarg0)throwsIOException; 

  abstractpublicvoidprintln(chararg0)throwsIOException; 

  abstractpublicvoidprintln(intarg0)throwsIOException; 

  abstractpublicvoidprintln(longarg0)throwsIOException; 

  abstractpublicvoidprintln(floatarg0)throwsIOException; 

  abstractpublicvoidprintln(doublearg0)throwsIOException; 

  abstractpublicvoidprintln(char[]arg0)throwsIOException; 

  abstractpublicvoidprintln(Stringarg0)throwsIOException; 

  abtractpublicvoidprintln(Objectarg0)throwsIOException; 

  abstractpublicvoidclear()throwsIOException; 

  abstractpublicvoidclearBuffer()throwsIOException; 

  abstractpublicvoidflush()throwsIOException; 

  abstractpublicvoidclose()throwsIOException; 

  publicintgetBufferSize() ; 

  abstractpublicintgetRemaining(); 

  publicbooleanisAutoFlush(); 

}

相信到这里你可能已经知道怎么做了。是的,来个偷天换日,继承JspWriter类,然后实现其定义的虚函数,然后把out变量替换成你自己实现的类的实例就ok了。

JSP技术实现动态页面到静态页面的方案第二:

实现替换

假设

﹤%@ page language=java contentType=text/html;charset=GB2312 import=jwb.util.HtmlIntoFile,jwb.util.TempSinglet,java.io.File%﹥
﹤% 

JspWriter outout_bak =out;String arg1=argument1;String filePath = /cache/根据参数生成文件名_ + arg1 + .html; 

//首先判断文件是否已经存在,如果不存在则执行本页面,否则跳转到静态页面就OK了File f = new File(pageContext.getServletContext().getRealPath(filePath)); 

if(f.exists()){ out_bak.clear(); pageContext.forward(filePath); System.out.println(直接转到静态页面); 

 return;}out= new HtmlIntoFile(pageContext.getServletContext().getRealPath(filePath));out.write(﹤!--文件开始--﹥);
%﹥
﹤html﹥
﹤head﹥
﹤body﹥
﹤%= 看吧,这就是输出被重定向到文件的实现,很简单吧^_^%﹥
﹤/body﹥
﹤/head﹥
﹤/html﹥
﹤%
out.close(); 

//关闭生成的静态文件out_bak.clear();pageContext.forward(filePath); 

System.out.println(执行本页面后再转到静态页面);return;
%﹥

 JSP技术实现动态页面到静态页面的方案第三:

更新问题

下面就讨论一下如何更新生成静态文件,其实从上面实现中你可以看到,很简单的就是将生成的静态文件删除即可,至于什么时候删除,要看你的需求了。我能想到的几种情况如下:

◆当用来生成页面的数据更新时

◆如果不需要很提供时时的数据可以定时更新

◆永远不更新

那么通过这个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页生成静态HTML的方法

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

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

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

  • JS+JSP通过img标签调用实现静态页面访问次数统计的方法

    本文实例讲述了JS+JSP通过img标签调用实现静态页面访问次数统计的方法.分享给大家供大家参考,具体如下: 测试页面: test.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>test</title> <meta http-equiv="pragma" content

  • Asp.Net 动态页面转静态页面主要代码

    一个是一个页面转换的类,该类通过静态函数Changfile()来实现,动态页面到静态页面的转换. 复制代码 代码如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControl

  • 1个文件如何轻松搞定Asp.net core 3.1动态页面转静态页面

    前言 最近一个Asp.net core项目需要静态化页面,百度查找了一下,没有发现合适的.原因如下 配置麻烦. 类库引用了第三方类,修改起来麻烦. 有只支持MVC,不支持PageModel. 继承ActionFilterAttribute类,只重写了OnActionExecutionAsync,看似静态化了,其实运行时该查数据库还是查数据库,没有真正静态化. 缺少灵活性,没有在线更新静态文件方法,不能测试查看实时页面,没有进行Html压缩,没有使用gzip.br压缩文件. 于是我开始了页面静态化

  • JSP技术生成动态web页面

    随着WEB技术的发展,WEB内容从一些静态的页到内容丰富的动态页.对于广大WEB开发人员来讲动态页面的生成是一个挑战.有许多的方法来试图解决这个问题,如plug-in技术及基于服务器端的APIs等方法,但存在的一个问题是这些方法是针对某个特定的web服务器,如Microsoft提供的ASP技术就只针对它的IIS及Personal web服务器. 目前用于生成动态网页较为流行的方法有CGI.PHP及JavaServer Page(JSP)技术等.其中:CGI通过访问其它应用程序来获取信息并返回给浏

  • 基于C#实现12306的动态验证码变成静态验证码的方法

    本以为这次12306的动态验证码很厉害,什么刷票软件都不行了,看了以后发现并不是很复杂,估计不出两日刷票软件又会卷土重来,开来要一个验证码很难遏制这些刷票软了. 这次换的动态验证码采用的是GIF格式在客户端输出,至于要拿到这个gif文件然后把动态图的各张图片拼凑起来就能得到完整的静态验证码,接下来就是识别静态验证码的事情了. 比如这张动态验证码 他的静态效果就是 下面是随手写的代码,有点混乱 Image imgGif = Image.FromFile(Application.StartupPat

  • JSP页面的动态包含和静态包含示例及介绍

    一.静态包含 本文介绍JSP静态包含语句,即使用JSP的include指令来完成的包含操作. JSP中,有两种包含其它文件的方式,一种是静态包含,一种是动态包含.本文介绍其中的静态包含. 所谓静态包含,跟ASP中的包含是一样的效果,即将所有包含的文件,先静态的包含进来,组成一个大的JSP文件,然后再经过编译器统一编译,生成HTML代码. JSP静态包含的语句为: 复制代码 代码如下: <%@ include file="file.jsp" %> 这里的file.jsp就是要

  • JSP页面的静态包含和动态包含使用方法

    JSP中有两种包含:静态包含:<%@include file="被包含页面"%>和动态包含:<jsp:include page="被包含页面"flush="true">.下面以一个例子来说明如何使用包含. 实例: 项目文件树: header.jsp文件中内容: <html> <head> <meta http-equiv="Content-Type" content=&qu

  • ASP.NET动态生成静态页面的实例代码

    最近突然想把项目中新闻管理模块做成静态页,在网上找到很多很好的文章,在这里记录一下,现在只是实现静态页面的生成并没有实现分页功能.其主要原理就是读取数据库的数据然后替换掉静态模板页的内容.首先制作一个模板页,暂时命名为template.htm,示例代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-trans

  • asp动态页面防采集的新方法

    昨天在网上看到一个防采集软件,说采集只访问当前网页,不会访问网页的图片.JS等,今天突然想到,通过动态程序和Js访问分别记录访问者的IP,然后进行IP判断,由于采集过程不会访问JS,采集的时候只会查到用动态程序记录的IP,而不会有通过JS记录的IP,从而实现网页程序的防采集. 防采集的原理非常简单,首先放一段动态语句,把访问者的IP加入到数据库的一个表里,然后在页面底部加入一个JS,JS直接访问动态页面,将访问者的IP加入到数据库的另外一个表里.再次访问的时候,从两个表里读IP数据,然后判断时间

随机推荐