使用XSLT和Struts框架开发Web应用
2004-10-18 17:02
591 查看
使用XSLT和Struts框架开发Web应用 | |||
软件工程师 2004年2月 StrutsCS是一个开源项目,它是基于Struts的一个Web应用开发框架。StrutsCS项目使我们可以使用XML、XSLT、Xpath等技术和Struts框架开发Web应用,而不是采用Struts中使用的JSP技术。而且StrutsCS中可以经过简单的配置开发工作后将输出格式变为WML、PDF等,所以扩展性更好。本文中作者将给大家详细的介绍和演示如何使用StrutsCS项目来开发Web应用。 为了将Web应用中的业务逻辑和表现形式分离,尤其是降低在JSP文件中的java代码,人们想了很多方法,包括在JSP中大量使用标签库、应用Struts框架等,今天给大家介绍一个新方法—使用StrutsCS项目—它大量采用XML、Xpath、XSL等技术和Struts框架,而不再使用JSP,同时将Struts中的FormBean、Session等需要显示的内容映射成XML内容,在XSL(表现层)中通过XSLT、Xpath技术访问,从而保证了XSL(表现层)中不再需要任何Java代码。 1、StrutsCS简介 1.1 什么是StrutsCS 简单地说,StrutsCS就是使用XSLT而不是JSP作为表示层的Struts.他克服了Struts框架的局限性,使我们利用XSL、XML、Xpath、XSLT等技术开发web应用,输出Web内容,而且可以轻松的扩展到输出WML、PDF、Ascii文件等。 1.2 StrutsCS和Struts的处理流程对比 图1: Struts的处理流程图 图2:StrutsCS的处理流程图 上面两个图是StrutsCS网站给出的StrutsCS和Struts的处理流程图。从这里两个图中,我们可以很清晰的看到StrutsCS和Struts的关系、主要作用范围:很明显的,他们两者在MVC中的Model、Controller这两部分是完全一致的,StrutsCS只是在View的部分进行了改进,也就是说StrutsCS的主要作用范围就是在内容显示这部分对Struts进行了扩展,使我们可以使用XML、XSL、XSLT、Xpath等新技术实现系统的高生产率、可扩展性。 1.3 StrutsCS的主要特点 可以在任何Servlet容器中运行的轻量级Web开发框架 对国际化语言的支持。包括IS0-8859-1、中文等 使用100%的XML、XSLT、Xpath等替换Struts中的JSP和文本信息保存 内容输出100%支持XML、XHTML、XSL-FO、WML或者其他你想要的输出格式 简单的错误校验机制 默认使用JDOM。 内置对FOP的支持,支持PDF、SVG、ASCII等的生成 包含了Struts校验 支持多种转换 支持客户端的XSLT 关于StrutsCS项目的详细介绍、FAQ等信息请大家到StrutsCS的网站http://it.cappuccinonet.com/strutscx/index.php去查看。 2、工具准备 2.1 StrutsCS下载 StrutsCS项目的编译版本、源代码、Demo都可以从http://sourceforge.net/project/showfiles.php?group_id=67148&package_id=65546&release_id=201686下载。 2.2 服务器下载 作者使用了Apache的Tomcat 5服务器作为Servlet容器来执行StrutsCS,请大家到http://jakarta.apache.org/site/binindex.cgi下载Tomcat5。 按照StrutsCS项目的安装指南,Tomcat4也可以配置成功,不过作者配置后发现Tomcat4并不能完全支持StrutsCS,大家有兴趣可以自己测试一下。 3、配置运行StrutsCS Demo 3.1 将StrutsCS Demo配置到Tomcat上 首先安装Tomcat到c:/Tomcat5下(后面将使用%tomcat_home%引用这个目录) 将下载的StrutsCS Demo解压缩,然后将所有的文件拷贝到%tomcat_home%//webapps//ROOT下面。 [注] 这个操作将使StrutsCS项目成为Tomcat的默认web应用,如果你自己会使用Tomcat服务器,而且不想覆盖默认Web应用,那么请自己配置StrutsCS项目的上下文路径(context-path)。 3.2 使StrutsCS的例子运行起来 StrutsCS中的文本资源信息保存、读取支持国际化,StrutsCS应用执行的时候根据getLocale(request).getLanguage()的结果动态绑定资源文件,他是根据ISO 639的标准,中文对应的是zh,大家可以到http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt查找ISO 639的标准。它的Demo内置的支持包括对英国、韩国、德国等的支持,为了让他支持中国内地执行,需要进行相应的修改。主要涉及的修改内容包括配置文件Strutscs-config.xml和相关的信息保存文件,详细的操作步骤请参考后面的几个章节。 3.2.1 Strutscs-config.xml文件的修改 Strutscs-config.xml文件位于WEB-INF目录下,对它的修改主要是以下几步: 增加对中国内地的支持 找到Strutscs-config.xml文件中的lang元素,大家可以看到,它默认有三项en de ko,每项中间用空格隔开,分别表示支持英国、德国和韩国,现在我们要让它支持在中国内地执行,需要给他增加一项zh(这是getLocale(request).getLanguage()在中国内地执行得到的值,也是ISO 639中中文语言对应的两位代码),修改后lang元素看起来应该是这个样子:<lang>en de ko zh</lang> 增加对应的资源文件设置 为了执行时能够保证正确的访问到资源文件(类似于Struts中的AppicationProperties,也就是保存应用中出现的静态文字内容的文件),我们需要增加新的设置。请大家找到Strutscs-config.xml文件中的resources-properties元素,它看起来是这样的:
现在相应的配置做好了,我们应该增加对应的资源文件了,这里作者只是将/WEB-INF/xml/variables_en.xml拷贝了一份,改名为/WEB-INF/xml/variables_zh.xml。 3.2.3 其他文件 大家可以看到/WEB-INF/xml/还有几个xml文件,其中的info_<lang>.xml(如info_en.xml)是例子中对应的xml数据库的内容,intro_<lang>.xml(如intro_en.xml)是例子中StrutsCS介绍内容对应的资源文件,为了保证例子运行,也请将他们各拷贝一份(最好是info_en.xml、intro_en.xml),然后将<lang>修改为zh,也就是说/WEB-INF/xml/目录下应该增加info_zh.xml、intro_zh.xml这两个文件。 3.2.4 修改index.html文件 这可能是StrutsCS项目组的疏忽,它里面将下一个页面导向了/strutscx-demo/info.do,如果你配置的这个Web应用的上下文路径不是/strutscx-demo,请修改为自己对应的上下文路径,比如作者修改为/mystructscs/info.do,或者直接修改为info.do 3.3 测试一下 现在你可以启动Tomcat5,然后然后打开浏览器,输入地址http://localhost:8080/<context-path>。其中的<context-path>实例配置的该Web应用的上下文路径,我们这里使用默认的上下文环境,所以context-path是空字符串,如果你配置了上下文环境,请修改为自己对应的上下文路径。 他应该出现如下图所示的内容: 如果看到这个页面,那么说明你的StrutsCS Demo应用已经成功运行了,如果出现错误,请按照作者提供的步骤检查一下。 4、StrutsCS开发实例演示 4.1 开发环境说明 1. Servlet容器-----------------------------Tomcat 5 2. 数据库-----------------------------------MySQL 3. build工具-------------------------------Ant 4. StrutsCS项目的上下文路径--------/ 4.2 例子说明 为了完整的演示如何使用StrutsCS项目来开发一个完整的Web应用,我们将使用一个简单的例子,这个例子将完成一个图书信息录入、修改、删除、列表显示的全过程。图书信息包括如下属性:编号、书名、出版社、ISDN号、作者,其中的编号由Mysql自动生成。大家下载作者提供的mytrutscs.war后,在解压缩后的目录/WEB-INF/db/下可以找到创建数据表所需的DDL文件(mysql.ddl)。作者使用的数据库联接信息如下:
4.3 相关配置内容 4.3.1 Struts-config.xml 这里都是一些Action的定义,包括了forward,大家可以看到里面最后的forward都是指向StrutsCXServlet,这是因为StrutsCS里面内容显示都是由Action类指定要显示的xsl文件和相关的formbean内容,然后由StrutsCXServlet这个Servlet显示出来(这也就是为什么在StrutsCS中可以方便的修改输出格式的原因,因为我们只需要在这里将输出格式由XSL、XSL等修改为自己需要的格式)。
在Strutscs-config.xml中设置需要显示的xsl文件,这主要是为了管理方便,因为在Action设置要显示的xsl文件的名称时使用的books.create这样的定义,而不是直接使用文件名,这样当你的文件名发生变化时,你只需要修改配置文件,而不是修改程序源代码。当然你完全可以在Action中直接设置这些文件名。下面定义的这些元素都是Strutscs-config.xml文件中strutscx-definitions元素的子元素。你可以在作者提供的mystrutscs.war中的Strutscs-config.xml文件中找到对应的内容:
4.4 代码开发部分 4.4.1 FormBean代码 FormBean主要是对需要传递的Form数据进行操作,所以都是些get<PropertyName>、set<PropertyName>方法。详细的代码请大家参考下载的mystructscs.war中的//WEB-INF//src//org//vivianj//sample//form// BookForm.java。 [注] 该FormBean中,有setAction、getAction方法,他实际和我们的业务没有关系,只是作者使用一个Action(/bookPersistence)来完成图书数据的插入、修改、删除、查询等工作,所以需要带入一个当前Action的特征值。 4.4.2 Action代码 StrutsCS中所有的访问都是通过映射为*.do来实现的,根据他们是否和FormBean打交道,这些被映射的Action代码分为两种不同的情况: 第一种情况:不和FormBean打交道 这种情况下,在Action代码中只需要设置下一个要显示的XSL文件的名字就可以了。下面的BookAddAction.java属于这一种 第二种情况:需要和FormBean打交道 这种情况下,在Action代码中需要和FormBean进行信息交互。下面的BookEditAction.java、BookMultiInfo.java属于这一种。 下面的所有类都继承了BaseAction,他提供了executeAtStart方法,这个方法主要是将一些共有的数据尤其是通过浏览器获得的东西放到request中去,如:本web应用的名称,本Servlet容器的"/"目录在硬盘上对应的真实目录、服务器名等。详细的信息请大家参考下载的mystructscs.war中的//WEB-INF//src//com//cappuccinonet//strutscx//sample01//presentation//action//BaseAction.java文件。 下面的代码解释和注释都只针对各Action中的主要实现的主体部分,详细的代码实现请大家参考下载的mystructscs.war中对应的。Java文件。 4.4.2.1 BookAddAction.java 这个类实现了Action的execute方法,因为这里只是要显示一个界面,不需要和formbean打交道,所以我们只需要设置一个xsl文件的名字就可以了,主要代码和注释如下:
需要显示图书信息修改界面时,我们一般是根据提供的图书编号,取出该图书对应的信息,然后显示在form中,由用户进行修改。所以BookEditAction类实现了Action的execute方法,这个方法里面首先是将输入的图书编号转化为一个对应的FormBean(他只有图书编号信息),然后根据这个FormBean得到一个完整的FormBean(他带有完整的图书信息,包括编号、书名等),将这个完整的FormBean放到request的属性中,供要显示的xsl文件调用,最后设置需要显示的xsl文件名。主要代码和注释如下:
他用于设置显示图书删除界面,和显示图书修改界面的处理流程是一样的,只是设置的要显示的xsl文件由'books.update'改为'books.delete'请大家参考下载文件中对应的文件内容,这里不再解释。 4.4.2.4 BookListAction.java 这个Action类用于将要显示的所有图书的信息用ArrayList对象放入request中,Strutscs将这个ArrayList映射成XML数据,我们将使用xslt、xpath访问他,而不是像jsp中使用java代码访问它,同时将下一个要使用的xsl文件放入request中,主体部分的代码和解释如下:
4.4.3 增加资源信息 在StrutsCS中,所有的文字资源都保存在xml文件中,也就是WEB-INF//xml//variables_xx.xml中,其中的xx就是各国对应的代号,在中国,这个代号是zh,所以我们应该将我们自己的文字资源保存到WEB-INF//xml//variables_zh.xml中。 作者在WEB-INF//xml//variables_zh。Xml中增加了如下内容,它是我们的图书管理应用中可能用到的文字资源(主要是为了方便维护和实现国际化):
4.4.4 如何访问资源、FormBeam、ArrayList、Session中的内容 4.4.4.1 在xsl中如何访问资源 我们在xsl中将通过xslt和xpath访问这些资源信息,访问方法有两个: 1.绝对地址访问 所谓绝对地址访问就是通过输入该元素在资源Element中的绝对地址来访问该元素的内容,他都是以"/"开头的。 比如我们要访问我们加入的title的内容,他的绝对地址就是"/root/resourcesproperties/page/info/books/title"。 [注] 这个地址中的/root是xsl中访问静态资源、动态内容的一个基准点,其它可访问的所有内容多是他的子元素,如资源、formbean等,后面的章节中也会用到。 2. 相对地址访问 相对地址访问需要通过xsl:for-each先设置一个地址基准,然后xsl:for-each中的访问都将是相对这个地址基来访问的。他都不是以"/"开头的。 比如作者提供的bookadd.xsl中:
4.4.4.2 在xsl中如何访问FormBean 我们在xsl中将通过xslt和xpath访问FormBean的信息,大家可以在books_update.xsl文件中看到这样的内容:
4.4.4.3 在xsl中如何访问Session 我们在xsl中将通过xslt和xpath访问Session的信息,大家可以在books_update.xsl文件中看到这样的内容:
为了循环访问ArrayList中的每一项,我们需要使用for-each,在books_all。Xsl文件中,大家可以看到这样的代码:
4.4.5.1 Books_create.xsl 在这个xsl中,主要是显示一个用户输入图书信息的表单,表单的内容用html实现,所以很简单。主要演示了如何访问资源文件中提供的信息,详细的文件内容请大家参考下载的mystructscs.war中对应的//WEB-INF//xsl// books_create.xsl文件的内容。关于如何访问文字资源请大家参考在xsl中如何访问资源。 4.4.5.2 books_update.xsl 这个xsl要显示用户修改图书信息的界面,里面主要演示了如何访问FormBean的内容,当然也演示了如何访问资源文件中提供的内容。详细的文件内容请大家参考下载的mystructscs.war中对应的//WEB-INF//xsl// books_update.xsl文件的内容。关于如何访问FormBean的内容请大家参考在xsl中如何访问FormBean。关于如何访问文字资源请大家参考在xsl中如何访问资源。 4.4.5.3 books_all.xsl 这个xsl主要显示所有图书信息的列表,里面显示了如何从传入的ArrayList中循环的显示ArrayList中的每一项。当然也演示了如何访问资源文件中提供的内容。详细的文件内容请大家参考下载的mystructscs.war中对应的//WEB-INF//xsl// books_all.xsl文件的内容。关于如何访问ArrayList的内容请大家参考在xsl中如何访问ArrayList。关于如何访问文字资源请大家参考在xsl中如何访问资源。 5、中文问题 StrutsCS中读取中文资源时,存在中文问题,作者经过研究发现是因为StrutsCS读取资源内容时,直接将资源文件内容转化为Jdom的Document对象,而没有使用他的sax构建器,作者修改了他的StrutsCXStandardDocumentBuilder。Java的相关代码后解决了这个问题。 下面的三种情况请使用不同的方法解决中文问题: 1. 如果你基于作者提供的mystructscs.war开发StrutsCS应用,那么应该不会再有中文问题 2. 如果你从StrutsCS网站下载他的Demo后,基于该Demo开发中文应用,请用作者提供的strutscs.jar覆盖//WEB-INF//lib// strutscx-0.9.5.jar来解决中文问题 3. 如果你从StrutsCS网站下载他的源文件,经过配置后开发,那么请使用作者提供的mystructscs.war中//WEB-INF//src//com//cappuccinonet//strutscx//xslt//StrutsCXStandardDocumentBuilder。Java覆盖StrutsCS源文件中对应的StrutsCXStandardDocumentBuilder。Java来解决中文问题。 6、编译执行 6.1.1 编译 作者的所有类文件都放在下载的mystrutscs.war中WEB-INF//src目录下,如果你自己开发了代码,也可以放在该目录下。 作者提供的mystrutscs.war中WEB-INF目录下提供了同时setenv。Bat和build.xml,你只需要修改setenv.bat中的java_home和ant_home参数,build.xml中需要修改的内容是元素,这里主要是提供一个支持servlet的jar文件(如:weblogic.jar等)。然后在dos界面下执行ant就可以编译了。 6.1.2 运行 现在,请重新启动Tomcat,然后在浏览器输入http://localhost:8080/books_new.do,你应该可以看到输入新图书信息的界面。你可以通过http://localhost:8080/booklist.do看到所有保存图书信息的列表。 [注] 如果你自己设置了该Web应用的上下文路径,请加上对应的上下文路径。 7、总结 StrutsCS项目是一个开源项目,他基于Struts框架,但是对Struts的表示层部分进行了扩展,使我们可以使用XSL、XML、Xpath、XSLT等技术作为表示层、而且基于Struts框架开发Web应用。重要的是StrutsCS的扩展功能将Session、FormBean、ArrayList等对象映射为XML数据,然后通过Xpath、XSLT来访问,这样表示层中不再需要java代码的参与,第一次实现了表示层中HTML和java代码的分离。 作者在本文中详细的介绍了如何配置StrutsCS的运行环境、配置StrutsCS提供的Demo样例使他运行,讲解和演示了如何创建StrutsCS应用、配置StrutsCS、通过XSL访问FormBean/Session/资源/ArrayList等内容,希望能够帮助大家迅速的掌握StrutsCS中的先进特性,帮助更好的利用Mystruts协助我们的应用开发。 StrutsCS中对多种输出格式的支持,作者正在研究中,如果偶有心得,一定会和大家共享,也希望大家通过电子邮件和作者交流各位的应用、研究心得和体会。 参考资料 Struts项目在线文档 http://jakarta.apache.org/struts/index.html StrutsCS项目在线文档 http://it.cappuccinonet.com/strutscx/overview.php?target=overview Tomcat5在线帮助文档 http://jakarta.apache.org/tomcat/tomcat-5.0-doc/index.html Ant 在线帮助文档 http://ant.apache.org/manual/index.html 实例代码下载: mystructscs.war
|
相关文章推荐
- 几个java常用的方法
- 迁移到 Eclipse: Eclipse 对 JBuilder 评估开发指南
- Java笔试时可能出现问题及其答案
- 用java实现简单的email正则表达式判断
- 使用struts+spring+hibernate 组装web应用
- 解决Struts分页显示(转)
- 郑志远的java学习笔记
- 写自己的rss
- Struts ABC
- stucts入门级图书推荐>(精品)
- Java异常处理之陋习
- 产生彩色验证码_(javabean实现)
- Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP
- pfw组件结构
- java到structs(转)
- Java到Struts
- JAVA中用动态代理类实现记忆功能(一)
- Java线程入门——定义线程中的 run 方法
- Eclipse Web Tooling Platform Contribution - IBM
- 利用JSF、SpringFramework和Hibernate构建Web应用的实例讲述