J2EE 学习指南——给入门者的一点启示

回顾熟知的程序

如同我们使用 windows 下的程序一样,任何程序都可以大致分类为三类,它们的开发方法也不同:

l         具有可操作窗口的 windows 程序,比如目前 windows 操作系统下的许多工具,wordQQ 等;这些程序通常叫做“视窗编程”开发模式,就是有一个程序要使用VB 等工具设计这个菜单、窗口,给使用者操作;

l         需要使用浏览器访问的程序,比如各种网站;这些程序通常叫做 web 程序,它也有基本的语言,就是熟知的 HTML,能够设计出各种浏览界面;这种工具也很多,比如 frontpagedreamweaver,甚至是文本编辑器;但做出的代码文件都是固定的,不能根据用户的具体操作动态显示信息,如果要根据用户的具体操作动态显示信息,就需要编码实现,最基本的就是 javascript,但如果涉及到数据库操作,则还需要编程,这个时候,就用到了 java,jsp 等技术;

l         第三种常见的就是命令行程序,比如在 CMD 命令下执行的各种程序,是单一的命令,这在 Linux 下非常常见;

 

目前程序员开发的最常见的程序就是:视窗程序和web程序。

 

理解程序结构

由于计算机本身的局限性,也就决定了我们要与计算机打交道,操控计算机,必须有程序来提供一个操作界面和环境,以便执行各种命令。目前,最常见的就是视窗程序和web程序了。他们实际上具有共同点,我们按照这个思路,就知道无论开发什么程序,都要编写相应的控制代码:

 

从上图可以看出,作为程序开发人员,我们必须在以下几个方面学会设计和编写处理代码:

1.         界面设计,为了给使用软件的人一个人机交互操作的界面,我们要设计这些界面。对于 windows 视窗编程,我们使用微软等公司的开发工具,提供了菜单、窗口和控件,可以完成界面设计;对于 web 方式,我们则需要使用网页设计工具来编写界面;

2.         用户操作的处理代码,任何用户操作,都要通过界面与计算机交互,这种交互其实已经成为规范的标准,无非都是通过窗口和各种输入框、选择框、按钮等来实现,我们需要编写代码来处理。对于 windows 视窗编程,则有一个套方法,大多是控件方式;对于 web 方式,则需要我们编写更多的处理代码来完成;

3.         用户操作的方式和步骤控制代码,用户的操作方式和步骤千变万化,是随机发生的,我们要编写出可能的组合处理代码,也就是操作流程控制,以便完成用户请求的各种操作;

4.         数据信息处理代码,这部分代码是处理数据的,包括磁盘文件,数据库中的表格等,这部分代码用来根据用户的请求,处理各种数据信息,包括保存文件、查询、添加等;

5.         权限控制代码,这部分代码往往用来控制用户的操作权限,就像 windows 的登录一样,不同的权限,能够使用的软件功能不同,这些代码往往和操作系统权限以及数据库帐户权限紧密结合,我们可以通过编码控制用户的软件功能使用权限和数据访问操作权限;

 

理解编码结构

从程序结构,我们可以看出,程序开发人员必须在几个层面上编写代码,从界面到控制代码。目前,看似烟花缭乱的程序,其实设计思想是一致的,我们可以按照统一的思路来学习编程的技术知识。

 

图中的 1 都是我们常见的 windows 下的视窗程序的开发过程,其中的 2 则是我们要学习的 java web 方式编程的过程。

 

Web 编程下的思路

既然任何程序都需要具备界面、控制代码等控制,我们就要编写相应的代码。现在我们分析一下从哪里下手来掌握各个层面的编程知识。我们将以最熟悉的 windows 下的各种程序作为对比,来理解 web 编程模式。

 

1.         windows 下常见的编程逻辑

首先看一个标准的 windows 程序界面,通过菜单、窗口和控件组合成用户界面:

窗口+各种控件设计

各种控件设计

菜单设计

 

后面要编写很多代码来处理上面提出的问题:控制用户操作、控制权限、数据处理等。这里我们不作详细介绍。

 

2.         web 下对应的编程逻辑

web 方式下,我们同样要有类似的界面,只不过这个界面是在浏览器下出现,浏览器成了虚拟的操作系统,依据的界面设计规则也不再是 windows 视窗的菜单、窗口和控件了,而是标准的、能够被浏览器理解的 HTML 和脚本程序。下面是常见的 java 编写的网站程序界面:

 

 

这里也有任何程序必须具备的要素:界面代码、界面操作控制代码、数据处理代码和用户权限控制代码。

 

Web 程序结构剖析

我们可以通过下图看到我们必须掌握的编程知识,从界面到各种操作,对于 J2EE 来说,所有的编码语言都是 JAVA 的,从 javascript jsp servlet,只要我们熟练掌握 java 语言就可以了。Jsp 中的很多内置对象和操作其实都是厂商使用 java 编写好的代码,让我们直接使用,类似 windows 的控件。我们按照语法规则使用就可以了。包括 JDBC 部分也是如此,我们直接使用,但要有能够运行这些现成的代码的环境:JDK/JRE tomcat web 服务器,他们负责与后台数据库打交道,帮助我们把代码中的数据库操作命令发送给数据库系统执行,并接受其返回的结果而已。

 

 

Web 结构与 javascript

Javascript 是最常用的控制 web 上的各种标记的程序片断了。Html 语言本身可以理解为是一组特殊格式的文件,每个都是类似 windows 的控件。通常设计一个网页,其实就是编写这些特殊的文件,通过规定的 html 标记语言实现。而这些标记语言,其实都可以通过 javascript 来编程控制,这也是 html 的特点。比如下面的一段 html 文件在浏览器中显示的结果,我们很熟悉:

 

 

看似复杂,实际上,就是 html+javascript 实现的,网页代码如下:

 

 

 

<script src="richtext.js" type="text/javascript" language="javascript"></script>

<script src="config.js" type="text/javascript" language="javascript"></script>

 

这个网页调用了一个 javascript 文件,通过这个文件实现界面的丰富,这个 javascript 文件就是:richtext.js 文件,具体内容很长,这里不再列出,但都是操作 HTML 中的各种标记对象的,包括 HTML 中的任何语法描述的内容。通常,我们把这些叫做 HTML DOM,就是网页的“文档对象模型”。我们可以认为,html 标记语言的任何东西,都类似 windows 的界面控件。可以被 javascriptjspservlet 操作,哪怕一个超级链接:http://www.xxx.com 这个语法也是如此!

 

Web 界面部分

不象我们看到的 windows 程序,在 java 开发下,我们虽然可以通过 awt/swing 实现类似 windows 的窗口界面,但这并不是我们最终发挥 java 技术的长处,而是短处。要实现类似 windows 下的视窗编程,java awt/swing 可是实现,但要麻烦得多,不如微软的那套方法。

Java 的长处实际上是编写 web 程序,通过 jspservletstruts技术实现更加丰富的和灵活的网站开发。

通常,一个典型的网页界面都要包含基本的操作界面元素:超级链接、表单和控件,如编辑框、列表框等,这和 windows 很相似。但是通过 HTML 语言描述的,不是简单的控件。下面的代码是这些用户界面的设计结果和 HTML 原代码。

 

HTML 表单 form 以及控件

 

HTML 标准语言结构,描述了浏览器中显示的界面的样子:

 

<!DOCTYPE HTML PUBLIC /"-//W 3C //DTD HTML 4.0 Transitional//EN/">

 

<Html>

<Head>

<Title>Java 论坛 - 论坛</Title>

<link rel="stylesheet" href="./css/forum.css" type="text/css">

</Head>

<Body>

<center><img src="./images/logo.jpg"></center>

<TABLE cellSpacing="0" cellPadding="0" width="100%" bgColor="#336699" border="0" align="center">

<TR>

<TD>

<TABLE cellSpacing="1" cellPadding="4" width="100%" border="0">

<TR bgColor="#ccccff">

<TD align=left colspan=1>

<FONT face=Verdana,Arial,Helvetica color=#003366 size=1>

<B>控制栏</B>

</FONT>

</TD>                        

<TR bgColor=#ffffff>

<TD align="left" valign="top" width=0>

<FONT face=Verdana,Arial,Helvetica color=#003366 size=1>

    <table width="100%" height="0" border="0" cellpadding="0" cellspacing="0" class="infobar">

         <tr>

             <td width="50%" height="0" align="left" valign="top">

                

                <form action="../servlet/forum.Login" method=POST name=form>

                      用户名:<input type="text" name="username" size="10" maxlength="60">

                      密码:<input type="password" name="password" size="10" maxlength="60">

                      <input type="submit" value="登录">

                </form>

                

             </td>

             <td width="50%" height="0" align="right" valign="top">

                

             </td>

         </tr>

    </table>

</FONT>

</TD>

</TR>               

</TABLE>

</TD>

</TR>

</TABLE>

    <br>

    <TABLE cellSpacing="0" cellPadding="0" width="100%" bgColor="#336699" border="0" align="center">

<TR>

<TD>

<TABLE cellSpacing="1" cellPadding="4" width="100%" border="0">

<TR bgColor="#ccccff">

   

 

 

<TD align=left colspan=1>

<FONT face=Verdana,Arial,Helvetica color=#003366 size=1>

<B>提示</B>

</FONT>

</TD>                        

    <TR bgColor=#ffffff>

    <TD align="left" valign="top" width=200>

<FONT face=Verdana,Arial,Helvetica color=#003366 size=1>

    你需要先登录

    <br>

    <br>

   如果你是第一次使用请先 <a href="./register.jsp">注册</a>

    </FONT>

</TD>

</TR>               

    </TABLE>

</TD>

</TR>

</TABLE>

  

<br>

<center>

<span class="copyRight">&copy; 2003 by </span><a href="mailto:grieks03@ie.hva.nl">Erwin Griekspoor</a>

<br><br>

Beta 1.0

</span>

</center>

</Body>

</Html>

 

可以看出,在 web 方式下,我们也可以设计类似 windows 的界面。并可以包含基本的界面元素:

1、  各种 HTML 标记命令,如 TDDIVBODYTABLE 等,都可以理解为控件对象,也可以使用 javascript 编程控制;

2、  超级链接:相当于菜单和按钮的作用,实现主程序调用子程序的功能;

3、  表单 form,实现窗体功能,上面还可以有控件:输入框、单选、复选、列表和编辑框等,并可以执行特定的程序:通过 action 语法实现调用另外一个程序,处理 form 中的数据;

4、  独立的控件,form 中的控件可以独立使用,无需有一个 form;并可以通过 javascript 来编码控制;

5、  直接使用 frontpage,dreamweaver 等工具直接编辑界面,然后编写控制代码;

6、  一个网页可以有多个 form,并可以分别操作,这样可以控制用户不同的操作方法;

 

实际上,这些界面的代码是通过 jsp java 程序输出的,也就说明了,可以通过 java 编程的输出命令,按照标准的浏览器可以识别的 HTML 语法,返回任何文字,浏览器都可以显示出来,这就是动态网页的含义。

 

可以看出,无论我们使用网页设计工具设计的具体网页文件,通过超级链接访问也好,还是我们通过代码输出的信息也好,只要符合 HTML 语言格式,都会被浏览器理解,并正确显示成一个页面!

 

JSPjsp 内置语言命令和servlet 正是利用这一点,通过输出让浏览器理解的 HTML 信息,蒙混过关!

 

 

动态 web 网页的实现

所谓动态的 web 网页,就是根据用户操作的不同,动态显示的网页。固定的 html 文件中的信息都已经预先设计好,无法改变,而如果我们要根据用户提交的信息动态显示不同的数据,则需要动态网页了。比如,根据用户的用户名和密码,显示不同的网页页面,这些信息在数据库中,我们要查询出来,并提交给浏览器显示不同样子的网页,但 HTML 没有这种编码技术,我们只能通过 jsp 来实现。要记住,浏览器只认识 HTML 格式的数据,因此,任何程序返回到浏览器的数据格式必须是 HTML 语言格式的。Jsp 有两种方法可以动态输出一个网页,让浏览器显示,我们必须理解一下技术:

 

1.         java 语言本身没有直接的输出 html 语言文档格式的方法,除非使用 applet 程序,就是在浏览器中嵌入了一个 java awt/swing 界面的程序,实际上还是在浏览器中运行了一个窗口程序。目前的浏览器都可以运行,但10年前的浏览器不能。这种方法其实并不好,因为我们说过,java awt/swing 程序效果不好,速度慢,需要安装 jre等。只有偶尔才使用。

2.         为了解决这个问题,jsp 扩展的 java 语言,这些扩展部分不再是 java 虚拟机来执行,而是 web 服务器 tomcat 等调用 JRE 来执行了,并把结果返回给浏览器。因此,在编程语法上有所扩展。方法如下:

 

l         通过在普通的网页中嵌入 jsp 语言<%   %>标记,告诉 web 服务器 tomcat,把这段代码翻译一下,输出标准 html 格式数据,<%  %> 内部的代码仍然是标准的 java 程序代码:

 

<%@  page  contentType="text/html;charset=gb2312"%>

<html>

<head>

        <title> 学习 JSP </title>

</head>

<body>

<%

    java.util.Date date = new java.util.Date();

%>

        当前时间 <%= date %>

</body>

</html>

 

当我们假设web 服务器帮助我们把 <%  %> 中的java代码执行了,其中,java代码中的变量等都有了具体的数据,我们看到的浏览器中的结果是:

 

 

实际上通过 web 服务器 tomcat 解释执行了 java 代码,返回给浏览器的数据是:

 

<html>

       <head>

              <title> 学习 JSP </title>

       </head>

       <body>

      

              当前时间 Tue Jan 02 18:46:43 CST 2007

       </body>

</html>

 

其中:当前时间 Tue Jan 02 18:46:43 CST 2007 web 服务器把原来的 <% %> 中的java 代码解释执行了,并把运行结果返回到了浏览器中(别忘了,我们是通过浏览器来启动程序的,而不是命令行!)。因此,在浏览器看来,数据就是一个标准的 HTML 文件格式,可以正常显示了。

凡是<% %>中的,都是 jsp java 语言的扩展,这些扩展就是为了和浏览器接口。

 

3.         servlet

servlet 也是一样,只不过是无需 <%  %> 标记混在 html 文件中,并把文件后缀改为 .jsp。而是纯粹的 java 程序,并是一个独立的 java 程序文件。但,servlet 通过另外一种语法方式也能输出标准的 HTML 格式数据。这些新的语法也是对 java 基本语言的扩展。看下面的网页:

 

其标准的 HTML 文件是:

 

<%@ page contentType="text/html; charset=gb2312" %>

 

<html>

       <head>

              <title>helloapp</title>

       </head>

       <body>

                     <p><font size="10">你好!这是第一个主页</font></p>

       </body>

</html>

 

实际上,这个网页是一个 servlet 输出的,servlet java 原代码如下:

 

文件名:helloWWW.java

编译后的文件:helloWWW.class,在 web-inf/class 目录下

 

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

 

public class HelloWWW extends HttpServlet {

  public void doGet(HttpServletRequest request,

                    HttpServletResponse response)

      throws ServletException, IOException {

    response.setContentType("text/html");

    PrintWriter out = response.getWriter();

    out.println("<!DOCTYPE HTML PUBLIC /"-//W 3C //DTD HTML 4.0 " +

                                        "Transitional//EN/">/n" +

                "<HTML>/n" +

                "<HEAD><TITLE>Hello WWW</TITLE></HEAD>/n" +

                "<BODY>/n" +

                "<H1>Hello WWW</H1>/n" +

                "</BODY></HTML>");

  }

}

 

而在动态网页中,也就是我们设计的程序代码中,是这样放置的:

 

<html>

<header>

<body>

<form action=”/helloapp/hellowww”>

</form>

</body>

</header>

</html>

 

这里,通过 form action 属性调用了具体的 java 程序:helloapp 目录下的 hellowww.class,用来处理用户的操作,就是点击了按钮。

 

或者,直接在浏览器地址栏中输入:http://localhost:8000/helloapp/hellowww

也可以直接运行程序 hellowww.class,相当于超级链接到这个程序。为什么浏览器知道呢?因为是 web 服务器 tomcat 解释的。为了让 tomcat 知道调用哪个 java 程序,我们还要作一些配置工作,就是在 web.xml 文件中,告诉 tomcat 调用哪个程序,浏览器地址输入的 helloapp/hellowww,实际上是一个磁盘目录的路径:helloapp 目录,其下有一个 web-inf 目录,下面有一个 classes 目录,其中有一个 java 编译好的程序 hellowww.class
通过这种 tomcat 规定的语法格式,告诉 tomcat 运行程序 hellowww.class,并把结果返回给浏览器。

 

因此,这种特殊的“超级链接”方式很灵活,我们可以根据需要来处理。在网页上,要调用另外一个程序,可以通过以下方式:

l         超级链接;

l         Form 表单的 action 属性;

l         直接在浏览器地址栏输入程序名称,需要 web.xml 配合,其实这是 struts 的基础,也是 jsp 的灵活性;否则,岂不要做很多超级链接或者表单了?很麻烦!

 

谈谈 javaBean

jabaBean 作为一种特殊的程序,实际上还是基本的 java 语言编写的程序,但类似 windows 的控件。在 java awt/swing 开发中,也常用 javaBean,这就类似自己定义了一个控件。而在 web 开发中,一般来说,在以下两种情况下使用:

l         把常见的处理代码编写成一个 java 文件,然后通过 jsp 的内部对象直接调用这个程序:语法是:

<jspuseBean  id="xxx scope=request class=”xxx”>

    <jspsetProperty  name=”calculatOr” property=*”/>

    </jspuseBean>

 

通过 jsp 的扩展命令就可以调用你编写好的 java 程序,扩展了 jsp 内置的程序。javaBean 程序存放在网站的 classes 目录中,tomcat 会自动寻找这个程序来执行。

 

l         javaBean 实际上是 form 表单控件的扩展,可以执行各种功能,但局限于具体的一种操作,类似一个函数,如果要同时使用多个 javaBean,则需要执行多个 jspuseBean  标签语言。相互之间调用也很麻烦。

l         javaBean 有属性和方法函数,通过这些与调用它的程序进行接口并传递信息;这些都是 javaBean 语法规定的要求,我们可以按照语法规定进行编写程序。

 

javaBean 实际上是 jsp 的一种补充,同时可以作为 jsp 语言补充的就是标签功能。扩展了 jsp 现有的 <% %> 中的标签,也就是命令或者称为传统意义上的函数库。

 

 

HTML java 代码的接口技术

上面我们已经看到,要能够通过标准的 HTML 语言,或者理解为一种特殊的界面,让用户操作很多功能,我们必须通过以下方式,来实现程序的调用:

l         超级链接;

l         表单的 action

l         特殊的 jsp 扩展命令,就是 <% %> 中的 java 代码;

 

为了把标准的 HTML 页面的信息提交给 java 程序,包括 jsp或者servlet,我们必须有一个套编码规则,用来获取 html 提交的信息,就是通过超级链接、表单的 action 或者控件的输入的数据,传递给 java 程序,这些 java 程序包括 javascriptjsp <% %> 中的,也包括 javaBean,更包括 servlet程序。有以下方法:

l         Javascript则通过 DOM 技术,参考教材的内容;

l         Jsp,则通过<% %> 中的代码实现;

l         javaBean,则通过 javaBean 的属性和方法实现;

servlet,则通过 doPost 等特殊的 java 扩展语法实现,这些语法在 javax.servlet.* javax.servlet.http.* 标准 API 中。可以查看相关帮助文件。

 

这样,无论后面的 java 程序作什么操作,在浏览器看来都无所谓,只要结果是 html 格式就行了。包括这些 java 程序进行数据库操作。

Web 界面流程控制部分

由于 web 界面是一种特殊的 windows 界面,也有用户可以操作的部分,比如超级链接,表单,控件,甚至任何标记部分,那么,有时为了控制用户的操作方法和流程,比如验证输入的信息格式、控制能否超级链接、控制图形显示大小、控制动态的颜色显示等。

 

可以把上图中能够看到的任何东西都理解成控件,都可以被编码操作。这也是 web 页面的灵活性,但也是导致编程控制更加有难度的原因。一旦灵活了,自然就变化多了,控制起来就繁琐一些。好在,我们无须控制一切,只是根据需要控制很少一部分该控制的就行了!

我们需要通过编写代码来控制,这些编码技术就是:

l         javascipt——常用来控制 HTML 标记对象;

l         jsp——常用来控制动态显示的部分,并与其他程序接口,如其他java程序,数据库程序等;

l         javaBean——常用来扩展 jsp 基本元素;

l         servlet——常用来控制动态显示,并于其他程序接口,如其他 java 程序,数据库程序等,实际上,所谓 jsp 编程,核心技术就是 servlet ,只不过 jsp 内置元素是一些公司帮助我们首先编写好的 servlet ,无须我们自己编写了,这在 windows 下可以理解为系统提供的 dll ;

l         struts——核心还是 servlet,但它把复杂的操作流程通过组织管理,让我们更加清晰地管理起来,与其说是编程技术,不如说是一种程序代码执行调用流程的组织管理配置技术;

 

对于用户操作流程的控制,我们可以通过以下方法来设定:

l         javascript 编码控制;

l         jspjavabeanservelet的编码,繁琐,不灵活;

l         利用 struts 配置文件设置,灵活但缺乏丰富性,比如多个表单提交数据的处理;

 

 

 

数据库连接部分

数据库连接部分是实现从 java 代码到操作数据库的部分,归根结底是通过 java 代码给数据库发送命令,执行数据库操作,这些命令在 java 看来就是 sql,这些命令完全可以直接在数据库管理系统中执行,但非常麻烦,也没有用户界面,因此,开发程序的主要目的就是要简化这种技术性很强的操作,让更多不懂得数据库命令的用户能方便使用数据库。这些都是通过 SQL 命令完成。J2ee 提供了两种方式执行数据库命令:

l         JDBC+Odbc 方式,通常用于 awt/swing 的类视窗程序的数据库操作;

l         JDBC 直接操作,无须配置 ODBC,就可以操作,通常用在 web 编程;

 

通过这些连接,都可以通过 java 代码操作数据库。

 

 

数据库信息处理部分

数据库信息处理主要通过 SQL 语言,无论我们使用什么数据库,比如 sql server,mysql,oracle 等,数据库系统都会接受 java 通过 jdbc 传递的 sql 标准命令,就如同在数据库管理系统中操作一样。比如 sql server ,我们可以通过两种方式执行 sql 命令,操作数据库:

l         数据库管理系统的操作界面,必须到数据库管理系统中执行,没有丰富的操作界面,要求所有用户进入数据库系统,这是可能的,比如 QQ ,有数据库系统 oracle,是不是所有的 QQ 用户都到腾讯公司服务器上操作呢?当然不现实,肯定要通过 QQ 程序通过互联网操作数据库!发送 SQL 命令给那个 oracle 数据库系统。

我们看看如果直接在数据库系统中操作,是什么样子:

 

用户直接在数据库管理系统中数据 SQL 命令

 

看来不可想象,有多少用户会这些操作,并可以有数据库操作权限呢?因此,必须提供给用户一套程序,就是有界面,有控件,并可以通过网络远程操作数据库,并用到服务器上操作。因此,这就是 java 网站编程的意义。如果通过 jsp 网站,则对用户来说,简单明了,比如我们前面提到的 jsp forum 网站,通过这个网站,就可以操作数据库了。

l         Sql server 数据库中的设计:数据库、表以及用户权限;

 

Jsp forum 网站的后台数据库

 

l         用户操作的网页

 

其中通过 html,javascript,jsp,javabean,servlet,struts 提供给用户一个方便的操作界面,并可以通过互联网操作!而对于程序开发者来说,要编写很多代码,比如这个网站的主页的代码如下:

 

<% String requestPage = request.getParameter("page"); %>

<%

if(requestPage == null){

    requestPage = "0";

}

%>

<% if(requestPage.equals("thread")){ %>

    <% String forum_id = request.getParameter("forum_id"); %>

    <jsp:include page="thread.jsp" flush="true" >

       <jsp:param name="forum_id" value="<%= forum_id %>" />

    </jsp:include>

<% }else if(requestPage.equals("message")){ %>

    <% String forum_id = request.getParameter("forum_id"); %>

    <% String thread_id = request.getParameter("thread_id"); %>

    <% String start = request.getParameter("start"); %>

 

    <jsp:include page="message.jsp" flush="true" >

       <jsp:param name="forum_id" value="<%= forum_id %>" />

       <jsp:param name="thread_id" value="<%= thread_id %>" />

       <jsp:param name="start" value="<%= start %>" />

    </jsp:include>

<% }else if(requestPage.equals("editmessage")){ %>

    <% String forum_id = request.getParameter("forum_id"); %>

    <% String thread_id = request.getParameter("thread_id"); %>

    <% String reply_id = request.getParameter("reply_id"); %>

    <% String start = request.getParameter("start"); %>

 

    <jsp:include page="editmessage.jsp" flush="true" >

       <jsp:param name="forum_id" value="<%= forum_id %>" />

       <jsp:param name="thread_id" value="<%= thread_id %>" />

       <jsp:param name="reply_id" value="<%= reply_id %>" />

       <jsp:param name="start" value="<%= start %>" />

    </jsp:include>

<% }else if(requestPage.equals("profile")){ %>

    <jsp:include page="profile.jsp" flush="true" />

<% }else{ %>

    <jsp:include page="forum.jsp" flush="true" />

<% } %>

 

其中很多知识都是我们要学习的编程技术,这也是程序员存在的价值!

 

特殊的 JAVA 程序组织形式

Java 开发,或者称为以 java 技术为基础的程序开发,包括 html,javascript,jsp,javabean,servlet,struts 等,我们都要明白自己编写的程序代码的结构和调用关系。

Java 编程很特殊,没有更好的文件管理的集成开发环境,就像vb一样的环境,可以帮助你管理和组织原代码,我们要清楚我们编写的代码的存储方式,以及调用方式。实际上,就是磁盘文件的存储方式,java 开发依赖于这种磁盘文件保存方式。

l         目录和包

最基本的 java 程序,组织形式实际上是磁盘目录,如果我们有多个 java 程序,而这些程序之间相互调用,我们可以通过 package 语法,告诉另外一个程序,原来的程序在哪里,在 java 编码中叫做包,比如:

 

package forum;

 

import java.io.*;

import javax.servlet.*;

......

public class AddForum extends HttpServlet {

 

……

 

其中,forum 实际上是磁盘目录,告诉 java 程序,如果调用的某个类没有在自己的程序代码文件中,则到这个目录找!java 通常是一个类一个磁盘文件。

 

这个目录告诉 java 程序,其他类文件在哪里,在 java 代码中,使用 package 命令说明!

 

 

l         Web 超级链接和表单 action

 

超级链接一般可以连接到具体 HTML 文件,但也可以是一个磁盘目录,其中包含了超级链接的位置。对于网页设计者来说,喜欢超级链接是具体文件,而对于动态网站开发者来说,则可能是 java 类文件,比如前面提到的 hellowww。其实,hellowww是个 java 类文件,而不是磁盘目录或者具体的 html 文件。但 tomcat web.xml 中说明了如何找到它,因此超级链接也可以成功。

当然,如果在 action 中直接说明调用哪个 java 程序,也就简单了。直接运行这个程序。

所有的 java 程序必须编译成 .class 文件才能运行。

 

l         多个 java 程序的调用控制流程设置;

对于视窗视窗编程,也就是 applet,awt/swing来说,调用多个 java 程序,通过菜单、按钮等就可以了。下图是程序设计界面,很象 VB,其中的按钮可以调用其它 java 程序。

 

 

通过代码:

                     ivjJButton1.addActionListener(new ActionListener()

 

可以执行相关类的处理代码。这是复杂的 java awt/swing 设计方法。我们的课程中有相关实训案例。

 

l         Web 方式的调用组织形式

web 方式下,目录,也就是 package,仍然有效,但因为超级链接等的存在,程序代码要复杂了,对于 java 代码来说,仍然是 package,但,对于多个 java 程序处理一个 html 页面来说,则需要借助配置文件:web.xmlstruts-config.xml

通常,我们使用的是 web.xml文件,其中说明不同的 html 用户操作应该调用哪个 java 程序。比如 jsp forum 网站的 web.xml 文件内容如下:

 

<?xml version="1.0" encoding="ISO-8859-1" ?>

 

<web-app>

 

    <!-- Filters --> 

    <filter>

       <filter-name>CharacterEncodingFilter</filter-name>

       <filter-class>com.alvin.CharacterEncodingFilter</filter-class>

       <init-param>

           <param-name>encoding</param-name>

           <param-value>GBK</param-value>

       </init-param>

    </filter>

 

    <filter-mapping>

       <filter-name>CharacterEncodingFilter</filter-name>

       <url-pattern>/*</url-pattern>

    </filter-mapping>

 

    <!-- servlets class-->

    <servlet>

       <servlet-name>forum.AddUser</servlet-name>

       <servlet-class>forum.AddUser</servlet-class>

    </servlet>

   

    <!-- servlets url-->

    <servlet-mapping>

       <servlet-name>forum.AddUser</servlet-name>

       <url-pattern>/servlet/forum.AddUser</url-pattern>

    </servlet-mapping>

   

    <servlet>

       <servlet-name>forum.Login</servlet-name>

       <servlet-class>forum.Login</servlet-class>

    </servlet>

   

    <servlet-mapping>

       <servlet-name>forum.Login</servlet-name>

       <url-pattern>/servlet/forum.Login</url-pattern>

    </servlet-mapping>

   

    <servlet>

       <servlet-name>forum.Logout</servlet-name>

       <servlet-class>forum.Logout</servlet-class>

    </servlet>

   

    <servlet-mapping>

       <servlet-name>forum.Logout</servlet-name>

       <url-pattern>/servlet/forum.Logout</url-pattern>

    </servlet-mapping>

   

    <servlet>

       <servlet-name>forum.ChangeProfile</servlet-name>

       <servlet-class>forum.ChangeProfile</servlet-class>

    </servlet>

   

    <servlet-mapping>

       <servlet-name>forum.ChangeProfile</servlet-name>

       <url-pattern>/servlet/forum.ChangeProfile</url-pattern>

    </servlet-mapping>

   

    <servlet>

       <servlet-name>forum.AddForum</servlet-name>

       <servlet-class>forum.AddForum</servlet-class>

    </servlet>

   

    <servlet-mapping>

       <servlet-name>forum.AddForum</servlet-name>

       <url-pattern>/servlet/forum.AddForum</url-pattern>

    </servlet-mapping>

 

    <servlet>

       <servlet-name>forum.AddThread</servlet-name>

       <servlet-class>forum.AddThread</servlet-class>

    </servlet>

   

    <servlet-mapping>

       <servlet-name>forum.AddThread</servlet-name>

       <url-pattern>/servlet/forum.AddThread</url-pattern>

    </servlet-mapping>

   

    <servlet>

       <servlet-name>forum.AddReply</servlet-name>

       <servlet-class>forum.AddReply</servlet-class>

    </servlet>

   

    <servlet-mapping>

       <servlet-name>forum.AddReply</servlet-name>

       <url-pattern>/servlet/forum.AddReply</url-pattern>

    </servlet-mapping>

   

    <servlet>

       <servlet-name>forum.DeleteThread</servlet-name>

       <servlet-class>forum.DeleteThread</servlet-class>

    </servlet>

   

    <servlet-mapping>

       <servlet-name>forum.DeleteThread</servlet-name>

       <url-pattern>/servlet/forum.DeleteThread</url-pattern>

    </servlet-mapping>

 

    <servlet>

       <servlet-name>forum.ChangeMessage</servlet-name>

       <servlet-class>forum.ChangeMessage</servlet-class>

    </servlet>

   

    <servlet-mapping>

       <servlet-name>forum.ChangeMessage</servlet-name>

       <url-pattern>/servlet/forum.ChangeMessage</url-pattern>

    </servlet-mapping>

   

    <servlet>

       <servlet-name>forum.DeleteReply</servlet-name>

       <servlet-class>forum.DeleteReply</servlet-class>

    </servlet>

   

    <servlet-mapping>

       <servlet-name>forum.DeleteReply</servlet-name>

       <url-pattern>/servlet/forum.DeleteReply</url-pattern>

    </servlet-mapping>

   

    <servlet>

       <servlet-name>forum.DeleteForum</servlet-name>

       <servlet-class>forum.DeleteForum</servlet-class>

    </servlet>

   

    <servlet-mapping>

       <servlet-name>forum.DeleteForum</servlet-name>

       <url-pattern>/servlet/forum.DeleteForum</url-pattern>

    </servlet-mapping>

   

</web-app>

 

不用现在就理解其中的语法规则,但我们能够看出,这里告诉了网站 tomcat 服务器,到哪里找到对应的程序。其中,register.jsp 网页内容如下:

 

<%@ page contentType="text/html;charset=gbk" %>

<jsp:include page="./include/header.jsp" flush="true">

    <jsp:param name="title" value="Forum" />

</jsp:include>

<jsp:include page="./include/body.jsp" flush="true" />

<br>

<jsp:include page="./include/table_start.jsp" flush="true" />

<jsp:include page="./include/table_title.jsp" flush="true">

    <jsp:param name="title" value="注册" />

    <jsp:param name="colspan" value="1" />

    <jsp:param name="align" value="left" />

</jsp:include>                    

<jsp:include page="./include/table_start_body.jsp" flush="true" />

<jsp:include page="./include/table_body.jsp" flush="true">

    <jsp:param name="width" value="0" />

</jsp:include>

 

<form action="../servlet/forum.AddUser" method=POST name=form>

    用户名:<br>

    <input type="text" name="user" size="62" maxlength="60"><br>

    密码:<br>

    <input type="password" name="password" size="62" maxlength="60"><br>

    再次输入密码:<br>

    <input type="password" name="password2" size="62" maxlength="60"><br>

    E-mail:<br>

    <input type="text" name="email" size="62" maxlength="60"><br>

    <input type="submit" value="注册"><br>

</form>

 

<jsp:include page="./include/table_close_body.jsp" flush="true" />          

<jsp:include page="./include/table_close.jsp" flush="true" />

<jsp:include page="./include/footer.jsp" flush="true" />

 

其中的表单 form 语法为:

 

<form action="../servlet/forum.AddUser" method=POST name=form>

 

Tomcat 如何找到这个 HTML 表单提交的操作的程序(就是用户的操作请求处理程序)?在 web.xml 中已经说明了,是在 tomcat 规定的相对磁盘目录的 web-inf/classes forum 下,文件名是:AddUser.class,为了符合 java 编程规则,必然要有包的说明,就是磁盘目录 forum,这样就告诉 tomcat,这个程序在 web-inf/classes/forum 下。具体使用则省略 web-inf/classes,这是默认的,无须说明,而后续目录要说明,就是:

Forum/adduser.class

这样,当用户点击提交按钮的时候,就会执行表单 form action 动作,并执行程序 adduser.class java 程序。

 

Tomcat目录结构

Tomcat目录如图所示。

bin:包括startupshutdown等批处理文件,其中tomcat.bat是主要文件,其他文都只是提供了一个tomcatbat的入口,可以方便地执行启动、关闭、编译等某一项特定的功能。

classesTomcat可以自行创建此目录,并且把附加的类文件放置在此,凡是放在这

个目录下的类文件将自动出现在CLASSPATH环境变量当中。

conf:包括Tomcat的各种配置文件,其中server.xmlweb.xml是两个主要的配置文

件。

doc:包括同Tomcat相关的各种文档。

lib:包括Tomcat使用到的各种jar文件,jar文件是Java的压缩格式的库文件。

srcServlet APl的源代码,但是仅仅包含空的接口和抽象类,而没有具体的实现。

webapps:是放置Web应用的目录,还包括一些例子,自己开发的应用也可以放在这个目录下。

work:如果不配置的话,Tomcat将自动创建这个目录。Tomcat将编译好的JSP文件

等临时文件放在这个目录下。

logs:用于放置Tomcat的各种日志文件,在配置和除错时很有帮助。

2Tomcat主配置文件——server.xml

server.xmlTomcat的主配置文件,完成两个目标:

(1)提供Tomcat组件的初始配置。

(2)说明Tomcat的结构和含义,使得Tomcat通过实例化组件完成启动及构建自身。

 

配置管理问题

大家都知道 VSS,就是 microsoft visual sourcesafe。这是一个配置管理工具,实际上,配置管理是公司开发资源的管理,对于软件开发来说,开发资源就是财富,比如代码、文档等,如果丢失或者被覆盖,那将是严重损失。因此,程序员要养成配置管理的习惯,保护自己的劳动成果。

配置管理工具可以帮助我们备份保护开发成果,就是代码,文档等,也能控制不同的版本,防止相互覆盖或者代码混乱。在配置管理工具中,通过控制用户权限,checkincheckout来控制。

配置管理工具建立了一套数据库,把我们的资源都保存到数据库中,这个数据库可以是一个磁盘目录,也可以是 access,也可以是 sql server 等数据库系统。具体的配置管理工具都有所不同。

安全性问题

软件系统也是有安全性的,我们开发的软件通常要考虑以下几个层面的安全性问题,因为如果安全性没有管理好,会出现信息泄露,如果安全性设置限定过高,会导致程序无法运行:

l         操作系统的帐户,这是第一层安全性,大家已经习惯了登录,但有时候你的程序的安全性会与这个相关,通常见于 windows 程序;

l         数据库系统帐户,数据库系统为了保护自己,独立有一套帐户体系,脱离与操作系统帐户之外,这样,就算有操作系统权限,也不一定能操作数据库,这在编写代码的时候很关键,比如我们连接数据库的代码一定要有数据库帐户;

l         网络层安全,这涉及到防火墙控制,端口控制,比如 tomcat 安装使用的端口是 8080,而不是 80,因为在 windows 下,80 端口被其他程序占用了。

l         程序开发者设置的帐户,就是我们经常建立一张表格,其中有用户名和密码字段,我们通过程序来判断用户的帐户,这是虚拟帐户,许多 BBS 等都采用这种方式,因为由于用户太多,成千上万,不可能都给一个系统级别的真实帐户,那样操作系统会崩溃的!

 

   

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值