JSP技术实现动态页面到静态页面的方法_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技术实现动态页面到静态页面的方案,从动态页面到静态的转变就已经告一段落,你是否有点启发呢?感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索jsp页面静态化
jsp动态页面静态化、jsp生成静态html页面、jsp页面静态化、jsp页面静态化技术、jsp静态页面,以便于您获取更多的相关知识。

时间: 2024-09-15 13:38:39

JSP技术实现动态页面到静态页面的方法_JSP编程的相关文章

两个JSP页面父页面获取子页面内容的两种方法_JSP编程

需求说明:两个JSP页面,父页面需要子页面的内容,但子页面是隐藏的,具体来说,子页面是一系列的模板,父页面要通过id来获取这些模板,不愿意通过<include>方式导入,因为如果模板过多,就导致整个父页面太大,加载缓慢,以下两个方案,不知有没有解决这个问题. 1.通过ajax方式 实现过程:通过ajax请求到子页面中,子页面获取参数id使用java和js变量的交互后,返回需要的模板信息 缺点:把js变量转换成java变量比较麻烦,需要使用form表单来提交,而且jsp中的java脚本是在服务器

jsp简单实现页面之间共享信息的方法_JSP编程

本文实例讲述了jsp简单实现页面之间共享信息的方法.分享给大家供大家参考.具体如下: 这里演示jsp父页面得到在子页面的配置信息,减少代码重复. 1. 父页面: <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html ng-app> <head> <meta http-equiv="Content-Type

JSP+jquery使用ajax方式调用json的实现方法_JSP编程

本文实例讲述了JSP+jquery使用ajax方式调用json的实现方法.分享给大家供大家参考,具体如下: 前台: <script type="text/javascript" src="jquery-1.5.1.min.js"></script> <script type="text/javascript"> //test function test(uid) { if(confirm("确定该用户

JSP教程之使用JavaBean完成业务逻辑的方法_JSP编程

本文实例讲述了JSP教程之使用JavaBean完成业务逻辑的方法.分享给大家供大家参考.具体如下: 一.目标: ① 掌握什么是JavaBean: ② 掌握如何编写JavaBean: ③ 掌握如何在JSP中访问JavaBean: ④ 理解JSP中对象的4个作用范围. 二.主要内容: 通过把上一讲中login_process.jsp中的验证过程进行封装形成JavaBean,然后在JSP页面中调用这个JavaBean,介绍JavaBean的编写和访问. 通过简单实例介绍JavaBean对象的4个作用范

jsp实现将信息放入xml中的方法_JSP编程

本文实例讲述了jsp实现将信息放入xml中的方法.分享给大家供大家参考,具体如下: 一.jsp代码: 省: <select id="province" name="province" onchange="jsSubmit()"> <option value="北京" selected="selected">北京</option> <option value=&quo

jsp中为表格添加水平滚动条的实现方法_JSP编程

首先,本项目中使用的是bootstrap框架,因此有些人会说,给表格设置自适应属性就可以了 这里要申明的是 bootsrtap自适应是针对当浏览器不占满整个屏幕,而是一半的时候才会出现横向的滚动条 而当我们将浏览器最大化的时候,如果列数增多了呢?会出现什么效果 答案就是会出现挤压的效果,横向并不会出现滚动条 查看网上的教程,很多人都说将什么父div设置100%,table添加scrool属性均不可 这里,解决的方法很简单,设置<th>标签的属性即可,让其不要自动换行 $(document).r

jsp导出excel并支持分sheet导出的方法_JSP编程

本文实例讲述了jsp导出excel并支持分sheet导出的方法.分享给大家供大家参考,具体如下: public DownloadFile exportToExcel() throws Exception{ String config_value = systemConfigService.getConfigValueByKey("Export.Xls"); logger.info("获取的导出类型为execl表格"+",每页sheet导出的行数为:&quo

jsp通过自定义标签库实现数据列表显示的方法_JSP编程

本文实例讲述了jsp通过自定义标签库实现数据列表显示的方法.分享给大家供大家参考,具体如下: 1. 定义标签库类 UserListTag.java package com.yanek.cms.tag; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.servlet.jsp.JspException; impo

打开页面就是全屏的方法_JSP编程

<script language="javaScript">function intro(){    if ((navigator.appVersion.indexOf("Mac")!=-1) &&(navigator.userAgent.indexOf("MSIE")!=-1) &&(parseInt(navigator.appVersion)=4))    {    skip()    }    e

解决JSP开发中Web程序显示中文三种方法_JSP编程

方法一:最简单也是用的最多的方法 <%@ page language="java" pageEncoding="GBK" %> 或者<%@ page contenttype="text/html;charset=gbk";>这里可以用gb2312或者gbk,只是gbk比gb2312支持跟多的字符. 这个方法用于jsp页面中的中文显示. 方法二:使用过滤器 过滤器使用主要针对表单提交,插入数据库的数据都是?号.这也是应为to