ss2初步研究

自2000年Struts框架发布,到2001年底Hibernate的诞生,再到2004年Spring的流行,Java社区的开源软件哲学是:“只做好一件事情,只做最擅长的事情,其他事情留给别人去做。”但是到了2005年,Java开源出现了框架整合的大趋势,整个Java开源社区雨后春笋般出现了一批又一批的full-stack框架,比较著名的有RIFE,Grails,JBoss Seam,Trails和Able等等。SpringSide也是这样一个整合框架,常逛BlogJava的人肯定不会陌生,因为它的老大就是江南白衣。

使用SpringSide可以节省我们很多时间,避免我们花费大量的精力来进行各个开源组件的整合。SpringSide还有另外两个优点,一是丰富的文档,全中文的哦,二是丰富的工具,可以支持我们使用ant,eclipse或者idea等工具进行开发。我使用的是Eclipse 3.2,在使用的过程中发现SpringSide针对Eclipse的插件有一点点小问题,不过这些小问题通过适当的设置都可以顺利解决。

让我们开始SpringSide之旅吧。

首先,当然是下载SpringSide了,可以访问它的官方网站www.springside.org.cn,我下载的是2.0-M1-all in one版,也是目前的最新版本。参照官方网站上的Quick Start来进行安装和体验:http://wiki.springside.org.cn/display/springside/Quickstart

然后,将SpringSide目录下的tools/springside-tools/eclipse-plugins文件夹中的org.springside.eclipse_1.0.0.jar拷贝到Eclipse的plugins目录中,如下图:
01.JPG

启动Eclipse后,可以看到菜单栏出现了新的菜单项:
02.JPG

点击该菜单项,会出现新建项目的向导,我们新建一个项目xkland,并且只选中Struts和Hibernate,如下图:
03.JPG

点下一步:
04.JPG

点完成,项目创建成功。问题出现了,那就是我们在Eclipse的资源管理器中看不到我们创建的项目,如下:
05.JPG

分析问题的原因,可能是SpringSide插件在创建项目的时候,没有自动生成项目需要的.project文件,解决的方法也很简单,就是使用Eclispe再创建一个Java项目,并且将项目的工作空间设置为该项目的父文件夹,将项目名设置为和该项目相同。在这里,工作空间应该设置为E:/Java,项目名还是xkland,如下图:
06.JPG

下一步:
07.JPG

再下一步:
08.JPG

在这里,需要注意了,第二个问题浮出水面,由于SpringSide自动生成的项目的目录结构过于复杂,在该例中,源代码应该位于src/main中,测试用例位于src/test中,而src/main中有分为三个目录,分别为java、resources和webapp,代表Java源文件、资源文件和Web网站结构所需的文件,只有把文件的位置放对了,才能够享用自动构建脚本带来的方便。如果我们采取默认设置,Eclipse将不能对位于src/main/java中的代码应用只能感知和代码提示,而且编译的时候还会提示类不在构建路径中。

而在Eclipse中,如果我们想要享受JDT的智能感知和代码提示,我们必须把源代码所在的文件夹设置为项目的源文件夹,如下图:
09.JPG

而缺省的输出文件夹,代表的是Java代码编译后.class文件存放的路径,理论上讲应该设置为src/main/webapp/WEB-INF/classes,但是这个设置不是必须的,因为我们最终的构建手段是运行quickstart.bat脚本,这个脚本会自动编译所有的.java文件,并将.class文件放到正确的位置,然后打包成.war放到target目录中。经过以上步骤后,资源管理器看起来应该是这样:
10.JPG

最后,为了让每次运行项目更简单,可以设置运行项目目录下的build.bat或quickstart.bat作为外部工具,如下:
11.JPG

12.JPG

要运行项目的时候,直接点击运行外部工具就行了。所有的调试信息都会显示在控制台视图。如果要停止服务器的运行,可以直接点击关闭按钮。如下图:
13.JPG

Ok,通过简单的设置,可以让我们使用Eclipse开发SpringSide应用更加简单而快捷。

 
SpringSide默认的数据库是hsql,但是大部分开发人员熟悉的数据库是MySql,因此在实际开发过程中,遇到的第一件事往往是修改数据库。在SpringSide中修改数据库很简单,还是以前一篇中创建的xkland项目为例,首先修改src/main/resources/config文件夹下的jdbc.properties文件,注释掉1、2行,解注释7、8行,并修改10、11行的用户名和密码,如下:
 1#jdbc.driverClassName=org.hsqldb.jdbcDriver
 2#jdbc.url=jdbc:hsqldb:res:/hsqldb/helloworld
 3
 4#jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
 5#jdbc.url=jdbc:oracle:thin:@localhost:helloworld 
 6
 7jdbc.driverClassName=com.mysql.jdbc.Driver
 8jdbc.url=jdbc:mysql://localhost:3306/xkland?useUnicode=true&characterEncoding=utf8
 9
10jdbc.username=xkland
11jdbc.password=xkland

其次是修改src/main/resources/config文件夹下的hibernate.properties文件,注释掉第一行,解注释第二行,如下:
1#hibernate.dialect=org.hibernate.dialect.HSQLDialect
2hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
3#hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
4hibernate.show_sql=false
5hibernate.cache.use_query_cache=true
6hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider

这个过程是简单的,但是还有一件很重要的事情需要注意,那就是一定要记得把MySQL提供的JDBC驱动mysql.jar拷贝到src/main/webapp/WEB-INF/lib文件夹下,否则,会遇到如下错误:
14.JPG

SpringSide非常注重对i18n的支持,因此创建国际化的应用程序非常方便,只需要在src/mian/resources/i18n文件夹下加入相应的资源文件即可。SpringSide默认使用UTF-8编码,这从web.xml中注册的encodingFilter就可以看出来,当然也可以选择自己喜欢的字符编码,比如GB2312。如果要修改字符编码,一定要记住有四个地方要保持一致:
1、web.xml中的encodingFilter配置,如下:
<filter> 
      
<filter-name>encodingFilter</filter-name>  
        
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
        
<init-param> 
            
<param-name>encoding</param-name>  
            
<param-value>UTF-8</param-value> 
        
</init-param> 
</filter>  

2、数据库中的默认字符集,需要在创建数据表的时候指定,如下:
CREATE TABLE `user` (
  `id` 
int(11NOT NULL auto_increment,
  `username` 
varchar(20),
  `password` 
char(32), 
  
PRIMARY KEY  (`id`)
) ENGINE
=InnoDB DEFAULT CHARSET=utf8

3、JDBC的连接设置,在src/main/resources/config/jdbc.properties中,如下:
jdbc.url=jdbc:mysql://localhost:3306/xkland?useUnicode=true&characterEncoding=utf8

4、JSP页面中的页面编码,如下:
<%@ page contentType="text/html; charset=utf-8" %>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

只要将这四个地方设置为一致,JSP页面显示出来就应该不会是乱码。归根结底,是SpringSide在web.xml中注册的encodingFilter帮了大忙。但是,当需要从Struts的resource bundle中读取message的时候,就不是那么方便了,因为需要创建如下的messages_zh_CN.properties文件:
# -- direct output message --
message
={0}

# -- crud message
entity.saved
=/u6210/u529f/u4fdd/u5b58/u3002
entity.missing
=/u627e/u4e0d/u5230/u6b64ID/u7684/u5bf9/u8c61/u3002
entity.deleted
=/u6210/u529f/u5220/u9664/u3002

# -- validator errors --
errors.required
={0} /u4e3a/u5fc5/u586b/u9879/u3002
errors.maxlength
={0} /u4e0d/u80fd/u5927/u4e8e {1} /u4e2a/u5b57/u7b26/u3002
errors.minlength
={0} /u4e0d/u80fd/u5c11/u4e8e {1} /u4e2a/u5b57/u7b26/u3002
errors.invalid
={0} /u65e0/u6548/u3002

errors.byte
={0} /u5fc5/u987b/u4e3abyte/u7c7b/u578b/u3002
errors.double
={0} /u5fc5/u987b/u4e3adouble/u7c7b/u578b/u3002
errors.float
={0} /u5fc5/u987b/u4e3afloat/u7c7b/u578b/u3002
errors.integer
={0} /u5fc5/u987b/u4e3a/u4e00/u6570/u503c/u3002
errors.long
={0} /u5fc5/u987b/u4e3along/u7c7b/u578b/u3002
errors.short
={0} /u5fc5/u987b/u4e3ashort/u7c7b/u578b/u3002

errors.date
={0} /u4e0d/u662f/u6709/u6548/u65e5/u671f/u683c/u5f0f/u3002
errors.range
={0} /u672a/u5728 {1} /u4e0e {2} /u8303/u56f4/u5185/u3002
errors.creditcard
={0} /u4e3a/u65e0/u6548/u4fe1/u7528/u5361/u53f7/u3002
errors.email
={0} /u4e3a/u65e0/u6548/u90ae/u4ef6/u5730/u5740/u3002
errors.phone
={0} /u4e3a/u65e0/u6548/u7535/u8bdd/u53f7/u7801/u3002
errors.zip
={0} /u4e3a/u65e0/u6548/u90ae/u653f/u7f16/u7801/u3002

hello
=/u4f60/u597d/uff0cSpringSide!

这种文件没有可读性,当然就更加不好编辑了,要生成这样的文件,需要使用J2SDK提供的命令行工具native2ascii.exe,为了加速开发和调试,可以编写一个批处理文件make_resource.bat,如下:
native2ascii -encoding utf-8 src/main/resources/i18n/temp.txt src/main/resources/i18n/messages_zh_CN.properties


然后,将该批处理文件注册为Eclipse的外部工具,如下图:
15.JPG

以后,需要修改messages的时候,先在temp.txt中修改,然后运行该外部工具即可。快捷而方便。

没有人能够一气呵成写完一个项目然后再运行,所有的程序员都需要一边修改代码,一边运行程序以观察修改的效果,如此反复进行。但是SpringSide提供的quickstart.bat存在很多问题,造成了程序员不能够快速部署程序,原因有二,一是quickstart.bat每次运行的时候都需要重新构建项目,更新组件库,然后启动Tomcat服务器,太慢了;二是运行quickstart.bat后,就算关闭控制台窗口,Tomcat服务器依然会在后台运行,以至于下次运行quickstart.bat会出错,提示不能清理文件。

要解决这两个问题也不难,可以将springside根目录下的misc/servers/tomcat-5.5.17/bin目录下的startup.bat和shutdown.bat注册为Eclispe的外部工具,以达到快速启动和快速关闭Tomcat服务器的目的,如下图:
16.JPG

17.JPG

此外,很多时候不需要重新启动服务器,只需要把更改过的文件重新部署到服务器就可以了,在springside的根目录目录下面,misc/servers/tomcat-5.5.17/webapps文件夹中包含了所有的SpringSide项目。使用Windows自带的命令行工具xcopy,可以将修改过的.class文件、配置文件、资源文件和.jsp文件部署到服务器中。创建一个批处理文件deploy.bat,如下:

xcopy src/main/webapp/*.jsp E:/springside-2.0/misc/servers/tomcat-5.5.17/webapps/xkland /d /y
xcopy bin/*.* E:/springside-
2.0/misc/servers/tomcat-5.5.17/webapps/xkland/WEB-INF/classes /s /d /y
xcopy src/main/resources/*.* E:/springside-
2.0/misc/servers/tomcat-5.5.17/webapps/xkland/WEB-INF/classes /s /d /y
xcopy src/main/webapp/WEB-INF/*.xml E:/springside-
2.0/misc/servers/tomcat-5.5.17/webapps/xkland/WEB-INF /d /y


其中/s选项为复制子目录,/d选项为只复制更新过的文件,/y选项为不用询问是否覆盖。

然后再将该deploy.bat注册为Eclipse的外部工具。这里不截图了,累赘。

当修改了Struts的配置文件和Action类之后,由于Struts只在Tomcat启动时读取一次配置文件并缓存起来,而Action对象也只在第一次使用的时候创建一个实例,因此必须重新启动服务器才能看到效果,配合上面的deploy、stop_tomcat和start_tomcat外部工具使用,使得部署和调试SpringSide应用程序更加快捷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章