2022-11-18 21:45:07

JSP Application Frameworks

What are application frameworks:

A framework is a reusable, semi-complete application that can be specialized to

produce custom applications [Johnson]. Like people, software applications are more alike than they are different. They run on the same computers, expect input from the same devices, output to the same displays, and save data to the same hard disks. Developers working on conventional desktop applications are accustomed to toolkits and development environments that leverage the sameness between applications. Application frameworks build on this common ground to provide developers with a reusable structure that can serve as the foundation for their own products.

A framework provides developers with a set of backbone components that have the following characteristics:

1.They are known to work well in other applications.

2. They are ready to use with the next project.

3. They can also be used by other teams in the organization.

Frameworks are the classic build-versus-buy proposition. If you build it, you will understand it when you are done—but how long will it be before you can roll your own? If you buy it, you will have to climb the learning curve—and how long is that going to take? There is no right answer here, but most observers would agree that frameworks such as Struts provide a significant return on investment compared to starting from scratch, especially for larger projects.

Enabling technologies:

Applications developed with Struts are based on a number of enabling technologies. These components are not specific to Struts and underlie every Java web application. A reason that developers use frameworks like Struts is to hide the nasty details behind acronyms like HTTP, CGI, and JSP. As a Struts developer, you donrsquo;t need to be an alphabet soup guru, but a working knowledge of these base technologies can help you devise creative solutions to tricky problems.

Java servlets:

Sunrsquo;s Java Servlet platform directly addresses the two main drawbacks of CGI programs.First, servlets offer better performance and utilization of resources than conventional CGI programs. Second, the write-once, run-anywhere nature of Java means that servlets are portable between operating systems that have a Java Virtual Machine (JVM).

A servlet looks and feels like a miniature web server. It receives a request and renders a response. But, unlike conventional web servers, the servlet application programming interface (API) is specifically designed to help Java developers create dynamic applications.

The servlet itself is simply a Java class that has been compiled into byte code, like any other Java object. The servlet has access to a rich API of HTTP-specific services, but it is still just another Java object running in an application and can leverage all your other Java assets.

To give conventional web servers access to servlets, the servlets are plugged into containers. The servlet container is attached to the web server. Each servlet can declare what URL patterns it would like to handle. When a request matching a registered pattern arrives, the web server passes the request to the container, and the container invokes the servlet.

But unlike CGI programs, a new servlet is not created for each request. Once the container instantiates the servlet, it will just create a new thread for each request. Java threads are much less expensive than the server processes used by CGI programs. Once the servlet has been created, using it for additional requests incurs very little overhead. Servlet developers can use the init() method to hold references to expensive resources, such as database connections or EJB Home Interfaces, so that they can be shared between requests. Acquiring resources like these can take several seconds—which is longer than many surfers are willing to wait.

The other edge of the sword is that, since servlets are multithreaded, servlet developers must take special care to be sure their servlets are thread-safe. To learn more about servlet programming, we recommend Java Servlets by Example, by Alan R. Williamson [Williamson]. The definitive source for Servlet information is the Java Servlet Specification [Sun, JST].

JavaServer Pages:

While Java servlets are a big step up from CGI programs, they are not a panacea. To generate the response, developers are still stuck with using println statements to render the HTML. Code that looks like:

out.println('lt;Pgt;One line of HTML.lt;/Pgt;');

out.println('lt;Pgt;Another line of HTML.lt;/Pgt;');

is all too common in servlets that generate the HTTP response. There are libraries that can help you generate HTML, but as applications grow more complex, Java developers end up being cast into the role of HTML page designers.

Meanwhile, given the choice, most project managers prefer to divide development teams into specialized groups. They like HTML designers to be working on the presentation while Java engineers sweat the business logic. Using servlets alone encourages mixing markup with business logic, making it difficult for team members to specialize.

To solve this problem, Sun turned to the idea of using server pages to combine scripting and templating technologies into a single component. To build Java Server Pages, developers start by creating HTML pages in the same old way, using the same old HTML syntax. To bring dynamic content into the page, the developer can also place JSP scripting elements on the page. Scripting elements are tags that encapsulate logic that is recognized by the JSP. You can easily pick out scripting elements on JSP pages by looking for code that begins with lt;% and ends with %gt;.

To be seen as a JSP page, the file just needs to be saved with an extension of .jsp.

When a client requests the JSP page, the container translates the page into a











使用Struts的应用开发使用了大量的其他基础技术。这些技术并不是专门针对Struts,而是所有Java web 应用都可以使用的。开发者使用Struts之类的框架是为了隐藏在诸如HTTP,CGI,以及JSP之类技术后面的繁琐的细节。作为一个Struts开发者,你并不需要知晓所有的相关知识,但是这些基本技术的工作原理可能有助于你针对棘手问题设计出创造性的方案。

Java servlet:

Sun公司的Java Servlet平台直接解决了CGI程序的两个主要缺点:

首先,servlet 比常规CGI 程序提供更好的性能和资源利用。其次,一次编写,随处运行的JAVA特性意味着servlet在有JVM 的操作系统间是轻便的可移动的。Servlet看起来好像是一个微小的web server。它接受请求并产生响应。但,和常规web server不同,servlet API 是专门设计来帮助Java 开发人员创建动态应用的。

Servlet 本身是要编译成字节码的Java类,就像其他Java对象一样。Servlet访问HTTP 特定服务的API,但它仍然是一个运行于程序之中的Java 对象,并可以利用所有的Java 资产。为了使常规web servers能访问servlet,servlet被安插在一个容器之中。Servlet容器连接到Web服务器。每servlet 都可以声明它可以处理何种样式的URL。当符合所注册样式的请求到达,web server将请求传递给容器,容器则调用响应的servlet。但和CGI 程序不同,并不是针对每个请求都要创建一个新的servlet。一旦容器实例化了一个servlet,它就仅为每个新的请求创建一个新的线程。Java线程可比使用CGI程序的服务器处理开销小多了。

一旦servlet被创建,使用它处理额外的请求仅带来很小的额外开销。Servlet开发人员可以使用init() 方法保持对昂贵资源的引用,比如到数据库或者EJB Home接口的连接,以便它们可以在不同的请求之间进行共享。获得这些资源要耗费数秒时间,这比大多数冲浪者愿意等的时间要长些。

Servlet的另一个好处是,它是多线程的,servlet开发人员必须特别注意确保它们的servlet是线程安全的。学习servlet 编程,我们推荐Java Servlets by Example, 作者Alan R. Williamson[Williamson]。

JavaServer Pages:


out.println('lt;Pgt;One line of HTML.lt;/Pgt;');

out.println('lt;Pgt;Another line of HTML.lt;/Pgt;');

在产生HTTP响应的Servlet 中是很普遍的。也有一些库有助于你产生HTML。随着应用越来越复杂,Java开发人员将不再扮演HTML页面设计的角色。同时,大多数项目经理更喜欢将团队分成不同的小组。 它们喜欢HTML设计人员处理表现层的工作,而Java工程师则专注于业务逻辑。单独使用servlet的做法鼓励混合标记和业务逻辑,很难区分团队人员的专业工作。

为解决这个问题,Sun提出了一个将脚本和模板技术结合到一个组件中的服务器页面技术(JavaServer Pages)。为创建JSP页面, 开发者按创建HTML页面类似的方式创建页面,使用相同的HTML 语法。为将动态内容引入页面,开发人员可以将脚本元素置入页面之中。脚本元素是一些标记,封装了可以被JSP识别的逻辑。你可以在JSP页面中很容易的识别出脚本元素,他们被封装在一对lt;% 和 %gt;标记中。

为了识别JSP页面,文件需要保存为扩展名.jsp。当一个客户请求JSP页面时,容器将页面翻译成Java servlet 源代码文件,并将它编译成Java 类文件——就象你写的servlet文件一样。在运行时,容器也能检测JSP文件和相应的类的最后更新时间。如果,JSP 文件自上次编译以来被修改了,容器将重新翻译和编译JSP文件。项目经理现在可以将表现层分派给HTML 开发人员,将业务逻辑工作分派给JAVA开发人员。重要的是记住,JSP页面事实上是一个servlet。你可以在servlet做的,也可以在JSP中做。


JavaBean是一种 Java类,它遵从一定的设计模式,使它们易于和其他开发工具和组件一起使用。

定义 JavaBean 是一种JAVA 语言写成的可重用组件。要编写JavaBean,类必须是具体类和公共类,并且具有无参数的构造器(NON-ARGS CONSTRUCTOR)。JavaBean通过提供符合一致性设计模式的公共访问方法将内部字段暴露称为属性。众所周知,属性名称也符合这种模式,其他JAVA 类可以通过自省机制发现和操作这些JavaBean 属性。



TagSupport 或者javax.servlet.jsp.tagext.BodyTagSupport接口。这些方法获得一个JspWriter对象,你可以用它来输出你需要的HTML内容。


3.在你的Web 应用描述符(web.xml)中定义你的lt;taglibgt; 元素。通过在JSP 页面的顶部放置下面的语句:lt;%@tagliburi='/tags/app.tld prefix='app' %gt;来告诉JSP 页面你将使用你自己的标签库。


JavaBean 设计模式提供两种类型的方式来访问bean 的内部状态:访问器(accessor) 用来读JavaBean的状态,修改器(mutator )用来改变 JavaBean 的状态。

Mutator 通常以小写的set 前缀开始,后跟属性名。属性名的第一个字母必须大写。返回值通常是void,因为mutator 仅仅改变属性的值,而不返回它们。简单属性的mutator在其方法体中可能只有一个参数,该参数可以是各种类型。Mutator也可根据其前缀称为设置器setters 。例如,对Double 类型的属性weight 的mutator方法体可能是:

public void setWeight(Double weight)

相似的设计模式也用于访问器方法的创建。Accessor 通常以小写的get 为前缀,后跟属性名。属性名的第一个字母必须大写。返回值必须匹配相应的修改器方法的参数。简单属性的Accessor在其方法体中不能接受参数。同样,访问器accessor 也经常称为获取器getter。

属性weight 的访问器方法体可能是:public Double getWeight()

如果访问器返回一个逻辑值,这种情况下有个变体模式。不使用小写的 get,逻辑属性的访问器可以使用小写的is 前缀,后跟属性名。属性名的首字母必须大写。返回值肯定是逻辑值,不管是 boolean 还是Boolean。逻辑访问器在其方法体中不能接受参数。On属性的逻辑访问器的方法体可能是:public boolean isOn()

在使用JavaBean 时,规范的方法体签名扮演了极为重要的角色。其他组件可以使用Java 的反射API 通过查找前缀为set、is或者get的方法来发现JavaBean的属性。如果一个组件在一个JavaBean 中发现一个这样的方法,它就知道这个方法可以用来访问或者改变JavaBean 的属性。Sun引入JavaBean是为了用于GUI组件,但它们已经用在Java开发的各个方面,包括Web应用。Sun的工程师在开发JSP标签的扩展类时,也被设计来可以和JavaBean一起工作。一个页面的动态数据可以使用一个JavaBean来传递,并且JSP标记可以随后使用bean的属性来定制页面的输出。

Model 2:

Servlet/JSP规范的0.92 版描述了在一个应用中使用servlet和JSP的架构。在其后的规范中,Model 2 这个叫法消失了,但它已经在Java web开发人员中非常通用了。根据Model 2,servlet处理数据存取和导航流,JSP处理表现。Model 2使Java工程师和HTML设计者分别工作于它们所擅长和负责的部分。Model 2应用的一部分发生改变并不强求其他部分也跟着发生改变。HTML开发人员可以改变程序的外观和感觉,并不需要改变后端servlet的工作方式。Struts框架是基于Model 2的架构。它提供一个控制器servlet来处理导航流和一些特殊类来帮助数据访问。随框架也提供一个丰富的标签库,以使Struts易于和JSP一起使用。



您需要先支付 30元 才能查看全部内容!立即支付