Java Web Framework综述<o:p></o:p>
0.简介<o:p></o:p>
本文介绍Java Web Framework的基本工作原理,和一些常用的开源Web MVC Framework(Struts, Web Work, Tapestry, Echo, JSF, Maverick, Spring MVC, Turbine, Cocoon, Barracuda)。<o:p></o:p>
Web开发的最重要的基本功是HTTP;Java Web开发的最重要的基本功是Servlet Specification。HTTP和Servlet Specification对于Web Server和Web Framework的开发实现来说,是至关重要的协议规范。<o:p></o:p>
应用和剖析开源Web Framework,既有助于深入掌握HTTP & Servlet Specification, 也有助于了解一些现代的B/S Web框架设计思想,如MVC,事件处理机制,页面组件,IoC,AOP等。在这个现代化的大潮中,即使Servlet规范本身也不能免俗,不断引入Filter、Listener等现代框架设计模式。同是Sun公司出品的JSF更是如此。<o:p></o:p>
关于MVC模型、项目简介、配置文件、入门示例等基础知识,网上已经有大量的重复资料信息,本文不再赘述。<o:p></o:p>
文中会提到一些相关的开源项目,和一些编程思想,如有需要,可以用相关的关键字在网上搜索,获取基本的背景知识。<o:p></o:p>
本文力图言简意赅,突出重点。着重描述其他资料没有提到、或很少提到的较重要内容,如运行原理、主流用法,相关知识,关键特性等。<o:p></o:p>
1. Java Web程序工作原理<o:p></o:p>
Tomcat的Server.xml文件中定义了网络请求路径到主机本地文件路径的映射。比如,<context path="/yourapp" docBase="yourapp_dir/webapp"/><o:p></o:p>
<o:p> </o:p>
我们来看一下,一个HTTP Request-Response Cycle的处理过程。<o:p></o:p>
HTTP Request URL一般分为三段:host, context, path。<o:p></o:p>
如http://yourhost/yourapp/en/index.html这个URL,分为host=yourhost, context=yourapp, path=en/index.html三段。其中,Context部分由request.getContext()获得,path部分由request.getServletPath()获得(返回结果是“/en/index.html”)。<o:p></o:p>
yourhost主机上运行的Tomcat Web Server接收到这个URL,根据Context定义,把yourapp这个网络路径映射为yourapp_dir/webapp,并在此目录下定位en/index.html这个文件,返回到客户端。<o:p></o:p>
<o:p> </o:p>
如果我们这个URL更换为http://yourhost/yourapp/en/index.jsp,这个时候Tomcat会试图把yourapp_dir/webapp/en/index.jsp文件编译成Servlet,并调用运行这个Servlet。<o:p></o:p>
我们再把这个URL更换为http://yourhost/yourapp/en/index.do。<o:p></o:p>
注意,戏剧化的事情就发生在这个时候,Servlet规范中最重要的类RequestDispatcher登场了。RequestDispatcher根据WEB-INF/web.xml配置文件的定义,调用对应的Servlet来处理en/index.do这个路径。<o:p></o:p>
假设web.xml里面有这样的定义。<o:p></o:p>
<servlet><o:p></o:p>
<servlet-name>DispatchServlet</servlet-name><o:p></o:p>
<servlet-class>yourapp.DispatchServlet</servlet-class><o:p></o:p>
</servlet><o:p></o:p>
<servlet-mapping><o:p></o:p>
<servlet-name>DispatchServlet</servlet-name><o:p></o:p>
<url-pattern>*.do</url-pattern><o:p></o:p>
</servlet-mapping><o:p></o:p>
那么,RequestDispatcher会调用yourapp.DispatchServlet类处理这个路径。<o:p></o:p>
如果web.xml没有定义对应en/index.do这个路径的Servlet,那么Tomcat返回“您请求的资源不存在”。<o:p></o:p>
RequestDispatcher用于Web Server中,也可以用于应用程序中进行处理转向,资源定位。比如,我们在处理en/index.do的代码中调用,<o:p></o:p>
request.getRequestDispatcher(“cn/index.jsp”).forward(request, response), 就可以转交另外的资源cn/index.jsp来处理。<o:p></o:p>
<o:p> </o:p>
几乎所有的Web Framework都需要定义自己的Dispatch作用的Servlet,并调用RequestDispatcher进行转向处理。<o:p></o:p>
阅读Web Framework源代码,有两条主要线索,(1)根据web.xml找到对应的Servlet类;(2)搜索包含“RequestDispatcher”词的代码文件。<o:p></o:p>
<o:p> </o:p>
我们看到,request, response 这两个参数,被RequestDispatcher在各种Servlet之间传来传去(JSP也是Servlet)。所以,request的setAttribute()和getAttribute()方法是Servlet之间传送数据的主要方式。<o:p></o:p>
在MVC结构中,一般的处理流程如下:<o:p></o:p>
处理HTTP Request的基本单位一般称为Action,是一个比Servlet轻量得多的接口定义,通常只有一两个方法,如execute(perform), validate等。<o:p></o:p>
我们知道,URL->Servlet映射,定义在Web.xml配置文件里,但MVC框架通常会有另外一个定义URL-> Action映射的配置文件。<o:p></o:p>
入口Dispatcher Servlet根据URL -> Action的映射关系,把请求转发给Action。<o:p></o:p>
Action获得输入参数,调用商业逻辑,并把结果数据和View标识给(Model & View)返回给Dispatcher Servlet。<o:p></o:p>
Dispatcher Servlet根据这个View 标识,定位相应的View Template Path,把处理转交给View(JSP +TagLib, Velocity, Free Marker, XSL等)。<o:p></o:p>
View一般通过request.getAttribute()获得结果数据,并显示到客户端。至于是谁把结果数据设置到request.attribute里面,有两种可能:Action或Dispatcher Servlet。<o:p></o:p>
2. Struts<o:p></o:p>
http://struts.apache.org/<o:p></o:p>
Struts是目前用户群最大、开发厂商支持最多的开源Web Framework。<o:p></o:p>
Struts劳苦功高,为普及MVC框架作出了不可磨灭的贡献。显赫的声望,趋于老化的厚重结构,令Struts成为很多现代Web Framework参照、挑战的目标。<o:p></o:p>
<o:p> </o:p>
Struts应用主要包括3件事情: 配置struts-config.xml文件,实现Action类,实现View;还有一些高级扩展用法。下面分别讲述。<o:p></o:p>
<o:p> </o:p>
1. 配置struts-config.xml文件:<o:p></o:p>
Struts支持多级配置文件,具体用法和限制,详见Struts文档。这里只讨论struts-config.xml主流配置的内容。:-)<o:p></o:p>
<o:p> </o:p>
(1) URL Path到Action的映射。<o:p></o:p>
如<action path="/LogonSubmit" type="app.LogonAction" ... /><o:p></o:p>
<o:p> </o:p>
Struts的入口Servlet是ActionServlet。<o:p></o:p>
ActionServlet需要此信息把URL Path调用对应的Action类处理。<o:p></o:p>
在Struts运行期间,一个URL Path,只存在一个对应的Struts Action实例。所有的该URL Path的请求,都经过这同一个Struts Action实例处理。所以Struts Action必须线程安全。<o:p></o:p>
想想看,其实这个要求并不过分,Action只是一个处理程序,不应该保存跨HTTP请求的状态数据,按理来说,也应该做成线程安全的。<o:p></o:p>
<o:p> </o:p>
(2) Template Name到View Template Path的映射。<o:p></o:p>
<forward name="success" path="/pages/Welcome.jsp"/><o:p></o:p>
<o:p> </o:p>
Action类返回一个Template Name,ActionServlet根据这个Template Name获得对应的View Template Path,然后调用<o:p></o:p>
request.getRequestDispatcher(“View Template Path”),把处理转向路径对应的Servlet。在这个例子中,是转向/pages/Welcome.jsp编译后的Servlet。<o:p></o:p>
<o:p> </o:p>
我们来看一个一个Velocity的例子。<o:p></o:p>
<include name="success" path="/pages/Welcome.vm"/><o:p></o:p>
web.xml的定义如下<o:p></o:p>
<servlet><o:p></o:p>
<servlet-name>velocity</servlet-name><o:p></o:p><
分享到:
相关推荐
java web OSGi (Open Services Gateway Initiative) provides a programming model for service components. Programming based on OSGi can bring many advantages, such as modular, standardized, service ...
Java web framework 比較
JMF简介java media framework JMF简介java media framework JMF简介java media framework
Java Web高级编程 涵盖WebSockets、Spring Framework、JPA Hibernate和Spring Security, 有目录,很清晰
个人整理的Java Media Framework API (JMF)的API,按Java6 API的风格整理
webframework代码包webframework代码包webframework代码包
Java Media Framework API Guide PDF
Swift Web Framework.zip,A server-side Swift web framework.
Collins W (2004). Data Structures and the Java Collections Framework..pdf
本人见过最好的国外java web编程书籍,手把手教会小白搭建基于spring框架和hibernate的web应用,并且还着重介绍了websocket,spring security等技术。
Java Media Framework (JMF) 2.1.1e包,找了好久才找到,希望对您有用。
Java Web高级编程pdf含下载地址和源码,《Java Web高级编程:涵盖WebSockets、Spring Framework、JPA 》面向的读者是已经了解Java SE、SQL和基本的HTML,准备将他们的Java编码技能提升到更高水平的程序员。...
Data Structures and the Java Collections Framework, 3rd Edition
For each framework, we develop the same web service outlined in Chapter 4, RESTful Web Services Design. This is a practical guide and a greater part of the book is about coding RESTful web services, ...
Data Structures and the Java Collections Framework(3rd) 英文无水印pdf 第3版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源...
Java媒体架构(JMF)是一个令人激动的通用的API,它允许Java开发者用许多不同的方法处理媒体。本指南主要通过使用工作的例子提供一个JMF的一些主要的特征的概述。阅读完本指南后,你将会明白JMF体系结构中的主要播放...
javaFramework
Swift 实现的 Web Framework,感觉 Swift 要逆天了。.zip,A server-side Swift web framework.