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
 7 jdbc.driverClassName = com.mysql.jdbc.Driver
 8 jdbc.url = jdbc:mysql://localhost: 3306 /xkland?useUnicode = true&characterEncoding = utf8
 9
10 jdbc.username = xkland
11 jdbc.password = xkland

其次是修改src\main\resources\config文件夹下的hibernate.properties文件,注释掉第一行,解注释第二行,如下:
1 #hibernate.dialect = org.hibernate.dialect.HSQLDialect
2 hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
3 #hibernate.dialect = org.hibernate.dialect.Oracle9Dialect
4 hibernate.show_sql = false
5 hibernate.cache.use_query_cache = true
6 hibernate.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 ( 11 NOT   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应用程序更加快捷。

你可能感兴趣的:(SpringSide开发实战(二):修改数据库、字符编码和快速部署应用程序)