荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Rog (leang kei ka), 信区: Linux
标  题: [CLDP]Javacgi-HOwto
发信站: BBS 荔园晨风站 (Sun Dec 13 20:19:00 1998), 站内信件

【 以下文字转载自 Rog 的信箱 】
【 原文由 rog.bbs@@IEESR-SUN.stu.edu.cn 所发表 】
发信人: linux (熊哥), 信区: Unix
标  题: [CLDP]Javacgi-HOwto
发信站: 郁金香 BBS (Mon Oct 19 21:25:56 1998), 转信


                              Java CGI HOWTO 中译版

 作者: David H. Silber dhs@orbits.com
 译者: C.W.Huang cwhuang@phys.ntu.edu.tw

    v0.4, 18 November 1996. 芬肴掌?: 21-25 August 1997
      _________________________________________________________________

    本文解释如何设定你的伺服器,使其能使用 Java 来写 CGI 程式,以及如何用
    Java 来写 CGI 程式.虽然 HOWTO 文件的目的是用在 Linux
    作业系统上,但这篇特别的文章事实上与特定版本的 UNIX 系统无关.
      _________________________________________________________________

   1. 简介

    1.1. 预备知识
           1.2. 这份文件
           1.3. 软体套件
           1.4. 广告一下

   2. 设定伺服器以执行 Java CGI 程式 (解释篇)

    2.1. 系统需求
           2.2. Java CGI 辅助软体
           2.3. 解开允嫉?
           2.4. 决定你的本地目录策略
           2.5. 测试你的安装

   3. 设定伺服器以执行 Java CGI 程式 (简略篇)

   4. 执行一个 Java CGI 程式

    4.1. 以 CGI 模式执行 Java 程式的障?
           4.2. 执行 Java CGI 解决问题

   5. 使用 Java CGI 类别

    5.1. CGI
           5.2. CGI_Test
           5.3. Email
           5.4. Email_Test
           5.5. HTML
           5.6. HTML_Test
           5.7. Text

   6. 未来的计?

   7. 版本修改记录

    7.1. 由 0.3 到 0.4 的修改
           7.2. 由 0.2 到 0.3 的修改
           7.3. 由 0.1 到 0.2 的修改

    Java CGI HOWTO 中译版 : 简介
    Previous: Java CGI HOWTO 中译版
    Next: 设定伺服器以执行 Java CGI 程式 (解释篇)
      _________________________________________________________________

 1. 简介

    由於 Java 的设计方式程式设计师没有简易的方法可以取得系统的环境变数.
    由於 Java 发展工具 (JDK)
    建立的方式,呼叫一个程式必须使用多重表徵(tokens), 这和标准的 HTML
    forms/CGI 运作方式不易配合.
    有一些办法可以克服这些限制,而我就实作了其中一种.详情请见下述.

   1.1. 预备知识

    我假定你有 HTML 与 CGI 概念的一般知识,而且了解关於你的 HTTP
    伺服器的最基本知识. 你也应该知道如何写 Java
    程式,否则这些都没有意义.

   1.2. 这份文件

    本文的最新版本可以从此找到:
    http://www.orbits.com/software/Java_CGI.html.

   1.3. 软体套件

    本文所提到的软体套件的最新版本可由匿名 FTP
    取得ftp://ftp.orbits.com/pub/software/java_cgi-0.4.tgz.
    这套件包含本文的 SGML 允嫉担?

    这些套件的散布必须依据 GNU Library General Public License. 本文可依
    Linux HOWTO 的版权声明散布.

    如果你使用本软体,请将某些参考指向
    http://www.orbits.com/software/Java_CGI.html, 以便让其它人能找到 Java
    CGI 的类别.

   1.4. 广告一下

    本文是由 Stellar Orbits Technology Services 所提供.(请到
    http://www.orbits.com/ 以了解我们是做什麽的.)
      _________________________________________________________________

    Java CGI HOWTO 中译版 : 简介
    Previous: Java CGI HOWTO 中译版
    Next: 设定伺服器以执行 Java CGI 程式 (解释篇) Java CGI HOWTO 中译版 :
    设定伺服器以执行 Java CGI 程式 (解释篇)
    Previous: 简介
    Next: 设定伺服器以执行 Java CGI 程式 (简略篇)
      _________________________________________________________________

 2. 设定伺服器以执行 Java CGI 程式 (解释篇)

    这一节教你安装我的 Java CGI
    套件,以及大量的解释,让你能够了解你的行为会导致什麽结果.如果你只想安
    装程式而不想了解为什麽,直接跳到 设定伺服器以执行 Java CGI 程式
    (简略篇).

   2.1. 系统需求

    本软体应该能在已安装 Java 程式发展工具的任何类 UNIX 的 web
    伺服器上安装.我将它装在执行 apache 伺服器的 Debian Linux 系统上.
    如果你发觉它无法在你的伺服器上运作,请与我联络: dhs@orbits.com.

    不幸的是,Java 执行时期解译器似乎是吃记忆体的怪物 -- 如果你将使用许多
    Java CGI 程式的话你可能要再丢数 MB 的 RAM 到你的伺服器里.

   2.2. Java CGI 辅助软体

    我写的辅助软体就叫做 Java CGI.你可从
    ftp://www.orbits.com/pub/software/java_cgi-0.4.tgz
    取得(版本号码可能会改变).

   2.3. 解开允嫉?

    找一个合适的目录将套件解开.
    (如果你还没有标准放置软体的地方,我建议你放在 /usr/local/src.)
    用这个指令解开套件:
 gzip -dc java_cgi-0.4.tgz | tar -xvf -

    这会产生一个叫 java_cgi-0.4 的目录.
    在那里你可以找到本文其它地方提到的档案.
    (如果版本号码改变了,就改用那套件里的.)

   2.4. 决定你的本地目录策略

    你必须决定让你的 Java CGI 程式住在那里. 一般来说,你会希望放在和你的
    cgi-bin 平行的目录. 我的 apache 伺服器设定使用 /var/web/cgi-bin 为
    cgi-bin 目录, 因此我用 /var/web/javacgi 作为放置 Java CGI
    程式的地方. 你可能不会想让将你的 Java CGI 程式放进某一已存在的
    CLASSPATH 目录. 编? Makefile 来反应你的系统配置.确定你用 root
    签入然後执行 make install. 这将编译 Java 程式,修改 java.cgi
    指令稿以符合你的系统,并且将程式安装进适当的位置.如果你希望拥有本文的
    HTML 版本以及一份 HTML 测试文件,改用 make all.

   2.5. 测试你的安装

    由本套件安装的 HTML 文件叫做 javacgitest.html, javaemailtest.html 以及
    javahtmltest.html. 如果你在前节使用 make all,它们会放在你於 Makefile
    中指定的 WEBDIR 目录中. 如果不是,你可以执行 make test 从
    javacgitest.html-dist, javaemailtest.html-dist 以及
    javahtmltest.html-dist 来建立它们.

    当你确定你的安装可以正确运作後,你可能希望从你的 JAVACGI 目录移除
    CGI_Test, Email_Test 以及 HTML_Test 类别,还有从 WEBDIR 目录移除
    javacgitest.html, javaemailtest.html
    以及javahtmltest.html,因为它们会显示应该只有伺服器管理者才看得到的使?
    谜咦恃叮?
      _________________________________________________________________

    Java CGI HOWTO 中译版 : 设定伺服器以执行 Java CGI 程式 (解释篇)
    Previous: 简介
    Next: 设定伺服器以执行 Java CGI 程式 (简略篇) Java CGI HOWTO 中译版 :
    设定伺服器以执行 Java CGI 程式 (简略篇)
    Previous: 设定伺服器以执行 Java CGI 程式 (解释篇)
    Next: 执行一个 Java CGI 程式
      _________________________________________________________________

 3. 设定伺服器以执行 Java CGI 程式 (简略篇)

     1. 从ftp://www.orbits.com/pub/software/java_cgi-0.4.tgz. 取回 Java
        CGI 套件.(版本号码可能会改变.)
     2. 用这个指令解开套件:
 gzip -dc java_cgi-0.4.tgz | tar -xvf -
        (如果版本号码改变了,就改用那套件里的.)
     3. 修改在新产生的 java_cgi-0.4 目录里的 Makefile 以符合你的系统.
     4. 以 root 身份,执行 make install. 这将编译 Java
        程式,加上你系统特定的资讯并安装许多档案. 如果你希望拥有本文的
        HTML 版本以及一份 HTML 测试文件,改用 make all.
     5. 然後应该就可以用了.
      _________________________________________________________________

    Java CGI HOWTO 中译版 : 设定伺服器以执行 Java CGI 程式 (简略篇)
    Previous: 设定伺服器以执行 Java CGI 程式 (解释篇)
    Next: 执行一个 Java CGI 程式 Java CGI HOWTO 中译版 : 执行一个 Java CGI
    程式
    Previous: 设定伺服器以执行 Java CGI 程式 (简略篇)
    Next: 使用 Java CGI 类别
      _________________________________________________________________

 4. 执行一个 Java CGI 程式

   4.1. 以 CGI 模式执行 Java 程式的障?-

    从 web 伺服器执行 Java 程式有两个主要的问题:

     4.1.1. 你不能像一般执行档一样执行 Java 程式

    你必需执行 Java
    的执行时刻(run-time)解译器并且以命令列的方式提供初始类别(程式执行所需)
    . 在一个 HTML form 里面没有办法提供命令列给 web 伺服器.

     4.1.2. Java 程式没有一般的方法可以取得环境变数

    Java 程式所需的每个环境变数都必需被传入. (在 Java 程式中)没有类似 C
    语言的 getenv() 函数.

   4.2. 执行 Java CGI 解决问题

    为了处理这些困难,我写了一个 CGI 指令稿程式,提供 Java
    解译器所需的资讯.

     4.2.1. java.cgi 指令稿

    这个指令稿管理 HTTP 伺服器与你希望使用的 Java CGI 程式之间的互动.
    它从 server 端提供的资料中取出你想要执行程式的名称.
    它将所有的环境变数资料将髹到一个暂存档里.然後,它将这个档案以及程式名
    称加命令列中, 执行 Java 的执行时刻解译器.

    java.cgi 指令稿的设定与安装在 决定你的本地目录策略 一节说明.

     4.2.2. 从 HTML form 中引发 java.cgi

    使用 Java CGI 程式的 HTML form 以下面的方式指定其行为:
 <form action="/cgi-bin/java.cgi/CGI_Test" method="POST">

    其中 /cgi-bin/ 是你本地端的 CGI 二进位执行档目录, java.cgi
    是允许我们从 web 上执行 Java 程式的前端, 而 CGI_Test 是一个欲执行的
    Java 程式名称的例子.
      _________________________________________________________________

    Java CGI HOWTO 中译版 : 执行一个 Java CGI 程式
    Previous: 设定伺服器以执行 Java CGI 程式 (简略篇)
    Next: 使用 Java CGI 类别 Java CGI HOWTO 中译版 : 使用 Java CGI 类别
    Previous: 执行一个 Java CGI 程式
    Next: 未来的计?
      _________________________________________________________________

 5. 使用 Java CGI 类别

    目前为止支援三个主要类别 -- CGI, Email 以及 HTML.
    我正在考虑分别加上处理 MIME 格式输入与输出的类别 -- MIMEin & MIMEout.

    也有一些用来支援和测试的类别. CGI_Test, Email_Test 以及 HTML_Test
    是拿来测试你的安装用的.
    你也可拿来当做你自己程式中使用这些类别库的起点. Text 类别是 Email 与
    HTML 的基底类别.

   5.1. CGI

     5.1.1. 类别语法

    public class CGI

     5.1.2. 类别描述

    CGI 类别持有的「CGI 资讯」 -- web 伺服器所设定的环境变数以及按下
    submit 时由 form 所传送来的名称/数值. 所有的资讯都被存放在类别物件
    Properties 中.

    这个类别位於 ``Orbits.net'' 包装(package)中.

     5.1.3. 成员摘要
      _________________________________________________________________

         CGI()         //  建构子
         getNames()    //  取得名称的串列
         getValue()    //  取得指定名称的值
      _________________________________________________________________

     5.1.4. 请参阅

    CGI_Test.

     5.1.5. CGI()

    目的
           建构一包含可用 CGI 资料的物件

    语法
           public CGI()

    描述
           当一 CGI 物件被建立时,所有可用的 CGI
           资料被存放在新物件的局部储存空间中.

     5.1.6. getNames()

    目的
           列出已定义对应值的名称.

    语法
           public Enumeration getNames ()

    描述
           提供所有已定义对应值的名称的完整列表.

    返回
           所有名称的 Enumeration 物件.

     5.1.7. getValue()

    目的
           取回所指定对应於 name 的 value.

    语法
           public String getValue ( String name )

    描述
           这个方法提供由 HTML form 送入的 names 与 values 之间的对应.

    参数

         name
                 所选择的键值.

    返回
           一个包含对应值的 String 物件.

   5.2. CGI_Test

    这个类别提供两个功能,一个如何使用 CGI 类别的例子以及一个用来确定 Java
    CGI 套件运作正常的测试程式.

     5.2.1. 成员摘要
      _________________________________________________________________

         main()      //  Program main().
      _________________________________________________________________

     5.2.2. 请参阅

    CGI.

     5.2.3. main()

    目的
           提供 main() 方法.

    语法
           public static void main( String argv[] )

    描述
           这是 CGI
           程式的入口,只不过返回可用的名称/数值对与其现值的列表.

    参数

         argv[]
                 由 java.cgi 指令稿传入的参数.目前未使用.

   5.3. Email

     5.3.1. 类别语法

    public class Email extends Text

     5.3.2. 类别描述

    讯息由 Text 类别的 add*() 方法所建立,加入电子邮件专用的方法.
    完成後,讯息被送到它的目的地.

    这个类别位於 ``Orbits.net'' 包装中.

     5.3.3. 成员摘要
      _________________________________________________________________

         Email()      //  建构子
         send()       //  送出电子邮件讯息
         sendTo()     //  增加讯息的目的地
         subject()    //  设定讯息的主题
      _________________________________________________________________

     5.3.4. 请参阅

    Email_Test, Text.

     5.3.5. Email()

    目的
           建立一包含电子邮件讯息的物件.

    语法
           public Email()

    描述
           建立一空的讯息以利由此类别方法加以完成.

    请参阅
           Text.

     5.3.6. send()

    目的
           送出电子邮件讯息.

    语法
           public void send ()

    描述
           本方法编排并送出讯息.如果目的位址还未设定,将不会有动作发生.

     5.3.7. sendTo()

    目的
           增加本讯息的目的地.

    语法
           public String sendTo ( String address )

    描述
           将 address
           加入到目的地列表中.一份电子邮件目的地的数目是没有限制的.
           不过我相信如果你建了过大的列表,你将可能会超过你的邮件传送代理?
           淌?(MTA) 所能接受的大小或用光你的记忆体.

    参数

         address
                 本讯息欲送达的一个目的地.

     5.3.8. subject()

    目的
           设定本讯息的主题.

    语法
           public void subject ( String subject )

    描述
           本方法设定电子邮件的 Subject:
           栏位.如果呼叫超过一次以上,会使用最後一次呼叫的结果.

    参数

         subject
                 Subject: 栏位的文字.

   5.4. Email_Test

    这个类别提供一个如何使用 Email 类别的例子以及一个用来确定 Java CGI
    套件运作正常的测试程式.

     5.4.1. 成员摘要
      _________________________________________________________________

         main()      //  Program main().
      _________________________________________________________________

     5.4.2. 请参阅

    Email.

     5.4.3. main()

    目的
           提供 main() 方法.

    语法
           public static void main( String argv[] )

    描述
           这是 CGI 程式的入口,返回可用的名称/数值对与其现值的列表.
           它也将列表送到由 Email 变数所指定的位址.

    参数

         argv[]
                 由 java.cgi 指令稿传入的参数.目前未使用.

   5.5. HTML

     5.5.1. 类别语法

    public class HTML extends Text

     5.5.2. 类别描述

    讯息由 Text 类别的 add*() 方法所建立,并加入 HTML 专用的方法.
    完成後,讯息被送到它的目的地.

    目前,还没有错误检查机制以确保列表建立的方法被以正确的顺序使用.
    因此程式设计者必须自行确定没有违反 HTML 的语法.

    这个类别位於 ``Orbits.net'' 包装中.

     5.5.3. 成员摘要
      _________________________________________________________________

         HTML()                  //  建构子
         author()                //  设定文件作者的名字
         definitionList()        //  起始一定义列表
         definitionListTerm()    //  在定义列表中增加一项目
         endList()               //  结束列表
         listItem()              //  在列表中增加一项目
         send()                  //  送出此 HTML 讯息
         title()                 //  设定文件标题的文字
      _________________________________________________________________

     5.5.4. 请参阅

    HTML_Test, Text.

     5.5.5. HTML()

    目的
           建立一包含 HTML 讯息的物件.

    语法
           public HTML()

    描述
           建立一空的讯息以利由 HTML 方法加以完成.

    请参阅
           Text.

     5.5.6. author()

    目的
           设定文件作者的名字.

    语法
           public void author ( String author )

    描述
           将文件的作者名字设定为 author.

    参数

         author
                 用来作为此讯息作者的文字.

    请参阅
           title().

     5.5.7. definitionList()

    目的
           起始一定义列表.

    语法
           public void definitionList ()

    描述
           起始一定义列表.
           一个定义列表是一种特别的列表,列表中的每一项是由 项目
           其後跟著定义的 文字
           所形成的.一定义列表的起始应跟著(至少)一项目/文字配对以及一个
           endList() 方法的呼叫. 请注意,目前列表不能是巢状的.

    请参阅
           definitionListTerm(), endList(), listItem().

     5.5.8. definitionListTerm()

    目的
           在定义列表中增加一项目.

    语法
           public void definitionListTerm ()

    描述
           在定义列表中增加一项目.
           目前列表的项目部份的文字应该在此方法被呼叫後并且在对应的
           listItem 方法被呼叫前加入.

    请参阅
           definitionList(), listItem().

     5.5.9. endList()

    目的
           结束一列表.

    语法
           public void endList ()

    描述
           本方法结束一列表.注意,目前列表不能是巢状的.

    请参阅
           definitionList().

     5.5.10. listItem()

    目的
           在列表中增加一项目.

    语法
           public void listItem ()

    public void listItem ( String item )

    public boolean listItem ( String term, String item )

    描述
           在列表中增加一项目.
           如果使用第一种形式,目前列表项目的文字应在此方法被叫後并在任何?
           渌斜矸椒ū缓艚星凹尤耄? 在第二及第三种形式中,item
           文字被指定为方法的参数而不是在其後被加入.第三种形式是定义列表?
           ㄓ貌⑶彝敝付斜淼南钅坑攵ㄒ逦淖植糠荩?

    参数

         item
                 此列表项目的文字.

         term
                 此定义列表的项目部份的文字.

    请参阅
           definitionList(), definitionListTerm(), endList().

     5.5.11. send()

    目的
           送出此 HTML 讯息.

    语法
           public void send ()

    描述
           送出此 HTML 讯息.

     5.5.12. title()

    目的
           设定文件标题的文字.

    语法
           public void title ( String title )

    描述
           设定此文件的标题文字.

    参数

         title
                 此文件标题的文字.

    请参阅
           author().

   5.6. HTML_Test

    这个类别提供一个如何使用 HTML 类别的例子以及一个用来确定 Java CGI
    套件运作正常的测试程式.

     5.6.1. 成员摘要
      _________________________________________________________________

         main()      //  Program main().
      _________________________________________________________________

     5.6.2. 请参阅

    HTML.

     5.6.3. main()

    目的
           提供 main() 方法.

    语法
           public static void main( String argv[] )

    描述
           这是 CGI 程式的入口,返回在一 HTML
           文件中可用的名称/数值配对与其现值的列表,并将每一名称/数值配对?
           允驹谝欢ㄒ辶斜淼脑乩铮?

    参数

         argv[]
                 由 java.cgi 指令稿传入的参数.目前未使用.

   5.7. Text

     5.7.1. 类别语法

    public abstract class Text

     5.7.2. 类别描述

    本类别为 Email 与 HTML 的基础类别.
    讯息以此类别的方法建立,并以衍生类别的方法完成并编排.

    这个类别位於 ``Orbits.net'' 包装中.

     5.7.3. 成员摘要
      _________________________________________________________________

         Text()            //  建构子
         add()             //  加入文字到此物件
         addLineBreak()    //  加入分行符号
         addParagraph()    //  加入分段符号
      _________________________________________________________________

     5.7.4. 请参阅

    Email, HTML.

     5.7.5. add()

    目的
           在此项目中加入文字.

    语法
           public void add ( char addition )

    public void add ( String addition )

    public void add ( StringBuffer addition )

    描述
           在这个文字项目的内容中加入 addition.

    参数

         addition
                 加入此文字项目的文字.

    请参阅
           addLineBreak(), addParagraph().

     5.7.6. addLineBreak()

    目的
           强迫在目前文字位置分行.

    语法
           public void addLineBreak ()

    描述
           在目前位置加入一分行符号.

    请参阅
           add(), addParagraph().

     5.7.7. addParagraph()

    目的
           起始一新的段落.

    语法
           public void add ()

    描述
           在目前的文字位置起始一新的段落.

    请参阅
           add(), addLineBreak().
      _________________________________________________________________

    Java CGI HOWTO 中译版 : 使用 Java CGI 类别
    Previous: 执行一个 Java CGI 程式
    Next: 未来的计? Java CGI HOWTO 中译版 : 未来的计?
    Previous: 使用 Java CGI 类别
    Next: 版本修改记录
      _________________________________________________________________

 6. 未来的计?-

      * Email 类别的扩充:

         Email( int capacity )
                 用来当我们知道需多少空间来储存讯息时.

         sendTo( String [] address )
                 增加允嫉缱佑始康牡氐牧斜恚?

         sendCc( String address )
                 增加一个复制电子邮件目的地.

         sendCc( String [] address )
                 增加复制电子邮件目的地的列表.

         sendBcc( String address )
                 增加一个 Blind Carbon-Copy 的电子邮件目的地.

         sendBcc( String [] address )
                 增加 Blind Carbon-Copy 的电子邮件目的地列表

      * HTML 类别的扩充:

         HTML( int capacity )
                 用来当我们知道需多少空间来储存讯息时.

         public void unorderedList()
                 起始一无序列表.

         public void orderedList()
                 起始一有序列表.

         public void directoryList()
                 起始一目录列表.

         public void menuList()
                 起始一选单列表.

         void anchor( String anchorName )
                 指定一锚(anchor).

         void link( String url, String text )
                 指定一连结.

         void applet( String url, String altText )
                 指定一 applet 连结.

      * 允许巢状的 HTML 列表.
      * 增加错误检查码以强迫修正 HTML 列表格式码的顺序.
      * 环境变数资料的档案位置应能由 Makefile 设定.
      * 除去在处理 GET 方法的资料传送时出现之假的空名称/数值对.
      * 考虑让 CGI 实作 java.util.Enumeration 界面以依序地提供变数名称.
      * 加入一 Test 类别,使用本套件中的每个方法.
      * 说明 CGI_Test, Email_Test 与 HTML_Test
        如何相互建立以提供侦错目的用的渐进测试.
      * 说明如何测试使用本套件的每一个特徵.
      _________________________________________________________________

    Java CGI HOWTO 中译版 : 未来的计?
    Previous: 使用 Java CGI 类别
    Next: 版本修改记录 Java CGI HOWTO 中译版 : 版本修改记录
    Previous: 未来的计?
    Next: Java CGI HOWTO 中译版
      _________________________________________________________________

 7. 版本修改记录

   7.1. 由 0.3 到 0.4 的修改

      * 增添 HTML 类别提供的基本功能.
      * 增加 HTML_Test 类别与 javahtmltest.html-dist.
      * 增加 HTML 方法来处理定义列表.

   7.2. 由 0.2 到 0.3 的修改

      * 加入 Text 与 Email 类别. HTML 也被加入,但此时只是一小部份而已.
      * 将不同的类别放入包装中. 主要的类别在 Orbits.net.*,支援用的类别
        Text 放在 Orbits.text.Text.
      * 将 CGItest 改为 CGI_Test.
      * 增加 Email_Test 类别.

   7.3. 由 0.1 到 0.2 的修改

      * 环境变数被放入一暂存档中而不是勉强挤入 Java 解译器的命令列里. CGI
        类别与 java.cgi 已被修改.
      * 将 javacgitest.html 文件加入成为套件的一部份.
      * 安装时由 make 所修改的档案全都以结尾 -dist 来命名.
      _________________________________________________________________

    Java CGI HOWTO 中译版 : 版本修改记录
    Previous: 未来的计?
    Next: Java CGI HOWTO 中译版

--

████████████████████
█ 曼桢有这么个脾气,一样东西一旦属于她█
█ 了, 她总是越看越好,以为它是世界上最█
█ 好的,...他知道,因为他曾经是属于她的█
████████████████████

※ 来源:.郁金香 BBS bbs.stu.edu.cn.[FROM: energy-lx.stu.ed]
--
※ 转寄:.郁金香 BBS bbs.stu.edu.cn.[FROM: 202.96.151.222]
--
※ 转载:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.141]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店