Struts开发人员必备

        本章介绍用Struts开发应用程序的开发人员必须掌握的知识。基本上每一个基于Java的应用程序都依赖于它们。

1. HTTP

        HTTP是一个“无状态”协议。一个HTTP服务器可以接受来自任何客户端的连接请求,就算是服务器拒绝该连接请求,服务器也会返回某种相应值。因为没有建立和维护连接的消耗,无状态的协议可以处理大规模的请求(与“有状态”协议相比)。

2. CGI

      CGI(通用网关接口)用来生成动态内容的标准技术。当一个Web服务器接受到一个要被CGI程序处理的请求时,Web服务器将请求中相应的信息提取出来,CGI应用程序利用这些信息运行来产生动态内容。CGI程序运行完后的处理结果将返回给Web服务器。Web服务器再将该响应转发给用户端的浏览器。

      CGI程序的一个主要缺点就是对于每一次请求,都需要在内存中运行一份新的CGI程序的拷贝。该操作会消耗相当多的资源,因此当每秒有上千次请求到来时,Web服务器可能会停止响应而瘫痪。CGI程序的另一个缺点就是其平台相关性。       

3. Java Servlet

      Sun公司的Servlet平台就正好解决了CGI程序的两个缺点。第一,Servlet相对于传统的CGI程序而言,提供更好的性能和可靠性。第二,Java的“编写一次,到处运行”的特性使得Servlet可以在具有Java虚拟机的任何平台上运行。

      一个Servlet看上去就如同一个小型的Web服务器。它接受请求并且返回响应。但是和传统的Web服务器不同的是,Java程序员使用Servlet的编程接口来创建可以返回动态内容应用程序。

      Servlet和其他的Java对象一样,是被编译为字节码的Java类。其本质上还是一个Java对象,因此它还可以在应用服务器中运行,并且可以使用Java的其他特性。

      为了使Web服务器可以利用Servlet,Servlet是在一个容器中运行。而Servlet容器就配置在Web服务器上。每一个Servlet都可以定义其处理的URL模式。当某个到来的HTTP请求符合某个已经注册的URL模式时,Web服务器将该HTTP请求传递给Servlet容器,而该容器会调用相应的Servlet来处理该请求。

       但是,和CGI不同的是,并不是每一个请求都会生成一个新的Servlet实例。一旦Servlet容器实例化了某个Servlet,对于要求该Servlet处理每一个请求,该容器都仅仅使用一个该Servlet的新线程来处理该请求。Java中的线程相对于CGI方式中的进程而言消耗很少的资源。Servlet开发者可以用init()方法来事先分配好这些资源,而全部的HTTP请求都可以共享这些资源。

        Servlet采用的这些措施带来的另外一个影响是,因为Servlet采用多线程方式,其开发者就必须要时时刻刻保证其Servlet的线程是安全的。

4. JSP

       使用Servlet时,开发者必须在程序中使用println语句来生成HTML内容。类似的代码如下:

out.println("<p> One line of HTML</p>");在Servlet中经常被用来生成HTTP响应。如果仅仅使用Servlet,就会导致大量的业务逻辑和HTML标签混杂在一起,不容易将开发小组进行划分。

        为了解决这个问题,Sun公司采用了在服务器端通过服务器端脚本来将页面脚本语言和模板技术捆绑在一起来作为一个单独的组建对待的技术。要创建JSP页面,首先是创建HTML页面。

        当客户请求JSP文件时,JSP容器将JSP文件翻译为Servlet源文件,然后将其编译成Java类文件——就如同开发者从头编写Servlet一样。在运行时,JSP容器会检查类文件和对应的JSP源文件的最后修改时间。如果JSP文件在编译后被改变过,JSP容器会再次翻译和编译该文件。

        项目经理现在就可以将表现层的工作分配给HTML开发者。HTML开发者将其开发完成的HTML页面交给Java开发者来填充那些与业务逻辑相关的部分。所有那些Servlet可以实现的功能,JSP都可以做到。 

5. JSP标签

        使用脚本语言是生成动态JSP内容的两种方法之一。尽管脚本语言快速、容易掌握并且功能强大,但是这项技术需要开发者混合使用Java代码和HTML语言。经验已经证明在JSP页面中嵌入后台逻辑会导致难以应用程序维护和复用。因此一种很流行的替代方法是使用JSP标签。

        JSP标签可以被当作普通的HTML标签对待,从而可以和HTML标签在页面上一起混合使用。尽管一个简单的JSP标签有可能代表了几十条Java语句,但是开发者仅仅需要知道如何在页面上插入该标签。那些对应的编程语句和逻辑都隐藏在Java的类文件中。

        要在另外一个页面上使用同样的代码,开发者仅仅需要再次插入这些标签。如果生成这些标签的后台代码被改变,所有这些标签都会使用更新后的代码。那些使用这些标签的JSP页面并不需要被修改。JSP标签能够提供比脚本语言更好的重用性,同时因为JSP标签看上去更类似于HTML标签,因此页面开发人员页可以更容易使用它们。

        市面上已经有很多预先构筑好的JSP标签,它们可以提供给开发人员很多有用的功能。其中之一就是JSP Standard Tag Library (JSTL). 这个新的标准定义了很多可重用的JSP标签。Struts和JSTL以及其他的公开通用的标签都可以进行很好地集成,也可以很好地和您开发的标签进行集成。JSP是Struts开发工具箱中的一部分。大多数的Struts开发者都是使用JSP页面以及定制的标签来创建自己应用程序的全部动态内容。

6. JavaBean

        JavaBean是一些符合某些特定设计模式要求的Java类。这些设计模式使得JavaBean可以很容易地在开发工具和其他组建中运行。

        JavaBean设计模式定义两个方法来存取Bean内部的状态数据。Mutator(修改器)用来修改JavaBean的状态数据。Accessors(存取器)用来读取JavaBean内部的状态数据。

        Mutator经常是用小写的set作为前缀,后面跟着属性名。属性名的第一个字母必须大写。返回一个为空(Mutator一般仅仅改变属性值,而不是获取它们)的值。对于简单的属性而言,其Mutator只是需要一个参数作为其签名,给参数可以为任何的数据类型。Mutator经常使用settor最为其别名。如:对于类型为Double的属性,假设其名为weight, 则对应的mutator为:public void setWeight(double weight).

        一个accessor方法名是用小写的get开头,后面跟着属性名。属性名的第一个字母必须大写。而该方法的返回值必须和该属性对应的mutator中的方法参数一致。对于简单属性而言,其accessor在方法签名中不会接受参数。所以,同样的,accessor也经常被称为getter。如:对于类型为Double的属性,假设其名为weight, 则对应的accessor为:public Double getWeight().

       如果accessor返回的是一个布尔值,则会采用“变量模式(wariant pattern)”。其accessor并不是使用get作为前缀,而是使用“is”。同样的是后面还是跟着第一个字母为大写字母的属性名。返回值总是一个布尔值类型——要么是boolean(简单数据类型)或者是Boolean(布尔对象)。逻辑accessor不会在其方法签名中使用任何参数。如:对于一个名字为on的属性而言,其对应的逻辑accessor方法签名会类似于:public boolean isOn()。

       在使用JavaBean时,规范的方法签名扮演了重要的角色。其他的组建就可以通过使用Java的反射机制来发现那些使用set、get或者is为开头的方法,从而获取该JavaBean的属性名。如果一个组件发现了一个JavaBean中这样的方法签名,它就知道是否可以使用该方法来获取或者是改变对应的属性值。

      以上只是做了些简单的介绍,要想详细的了解或者研究,可以产看相关的书籍或者在网上查找相关的资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值