编程开发 > JSP > 文章内容

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

2017-7-4编辑:daibenhua

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

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

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

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

  下面是一个JSP文件test.jsp

  ?

1

2

3

4

5

6

7

8

9

10

11

﹤%@ page language=java contentType=text/html;charset=GB2312 %﹥

﹤%

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

%﹥

﹤html﹥

﹤head﹥

﹤body﹥

﹤%=输出%﹥

﹤/body﹥

﹤/head﹥

﹤/html﹥

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

  ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

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中可以找到它的定义。

  ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

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技术实现动态页面到静态页面的方案第二:

  实现替换

  假设

  ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

﹤%@ 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教程:jspservletjavaBean后台分页实例代码解析

热点推荐

登录注册
触屏版电脑版网站地图