京山游侠

专注技术,拒绝扯淡
posts - 50, comments - 868, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
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应用程序更加快捷。


评论

# re: SpringSide开发实战(二):修改数据库、字符编码和快速部署应用程序  回复  更多评论   

2006-12-24 09:27 by laojang
很好.有学到了不少,继续

# re: SpringSide开发实战(二):修改数据库、字符编码和快速部署应用程序  回复  更多评论   

2006-12-24 11:28 by errorfun
要注意的是保存文件时的编码也要调成一致的,要不也会乱码。不过ECLIPSE好像有根据JSP页面设置的ENCODING设置默认编码的智能,一定也就不会有问题了

# re: SpringSide开发实战(二):修改数据库、字符编码和快速部署应用程序  回复  更多评论   

2006-12-24 16:24 by BeanSoft
先说一下啊, 偶不熟悉 Eclipse 插件开发, 不过关于你们这个 Tomcat 启动的功能其实直接借鉴 Eclipse Tomcat 插件(Sysdeo): http://www.sysdeo.com/eclipse/tomcatplugin
这个插件可以让您无需离开 Eclipse 就可以进行 Tomcat 的启动, 停止, 发布, 重新载入 Web 应用, 十分方便. 而且插件个头也不大, 带源码. 我翻译的中文版:
截图: http://gro.clinux.org/frs/download.php/1318/tomcatPlugin.gif
下载: http://download.gro.clinux.org/beansoft/tomcatPluginV31.zip

# re: SpringSide开发实战(二):修改数据库、字符编码和快速部署应用程序  回复  更多评论   

2006-12-24 16:38 by 海边沫沫
呵呵,在我没有遇到SpringSide之前,我也是一直使用的这个插件。
SpringSide自带一个精简版的Tomcat,而我的系统上另外还安装有一个Tomcat,在使用SpringSide进行开发的时候,我觉得我以上的几个脚本更加能够简单的解决问题。

# re: SpringSide开发实战(二):修改数据库、字符编码和快速部署应用程序  回复  更多评论   

2006-12-24 16:41 by BeanSoft
不好意思,我还以为你是SpringSide的开发人员呢...

# re: SpringSide开发实战(二):修改数据库、字符编码和快速部署应用程序  回复  更多评论   

2006-12-25 09:02 by 江南白衣
谢谢游侠阿,游侠的文档写得比开发人员还详细。

# re: SpringSide开发实战(二):修改数据库、字符编码和快速部署应用程序  回复  更多评论   

2007-01-21 09:49 by hcom
将ss自带的tomcat注册为eclipse外用的tomcat就可以了吧?不需要将tomcat启动和关闭文件注册为eclipse的外部工具了吧?

我用的是eclipse+wtp

# re: SpringSide开发实战(二):修改数据库、字符编码和快速部署应用程序  回复  更多评论   

2007-04-05 10:54 by 爱好者
真没有想到会有这么好的文章,这里先谢过了!我会支持下去的,我还是一个小小鸟,不知道什么时候会到达这样程度,我得加油了。

# re: SpringSide开发实战(二):修改数据库、字符编码和快速部署应用程序  回复  更多评论   

2007-07-05 21:21 by 周黎明
我的项目里src\java\resources\config文件夹下好像没有hibernate.properties文件呀!

# re: SpringSide开发实战(二):修改数据库、字符编码和快速部署应用程序  回复  更多评论   

2007-07-16 21:03 by 海边沫沫
我使用的是2.0 M1版,如果你使用的是2.0rc1版,这些目录结构就不一样的。具体问题具体分析。

# re: SpringSide开发实战(二):修改数据库、字符编码和快速部署应用程序  回复  更多评论   

2008-02-29 19:12 by kongzong
messages_zh_CN.properties的编辑是不是可以用Properties Editor插件搞定?

只有注册用户登录后才能发表评论。


网站导航: