Struts2.0默認(rèn)的平臺(tái)需求是:
但是因?yàn)橐恍┰?我們必須使用JDK1.4來編譯,所以只能應(yīng)用Struts提供的J4,來進(jìn)行一下移植了,說實(shí)話,還是挺好的,只需要簡單的操作,便可以把JDK更改為1.4的了.原本我以為弄不好還得重新寫代碼呢,結(jié)果才發(fā)現(xiàn),嗯,如此的簡單.
好了,不廢話了.
要想應(yīng)用JDK1.4,使用的主要的是Struts2.0的發(fā)行包里提供的J4目錄中的Retrotranslator.利用它可以將原JDK5的包轉(zhuǎn)化成JDK1.4的.關(guān)于Retrotranstator的介紹,可以查看http://retrotranslator.sourceforge.net/,里面寫的很詳細(xì).
在J4目錄中,已經(jīng)將Struts2.0基本的兩個(gè)Jar文件轉(zhuǎn)好了,分別是struts2-core-j4-2.0.9.jar和xwork-j4-2.0.4.jar.如果你的程序中還用到的其他的Jar包,可以通過腳本把Jar包轉(zhuǎn)成J4版本的.我們的程序中用到了spring和sitemesh兩個(gè)Plugin的Jar包,所以需要將這兩個(gè)包轉(zhuǎn)成J4的.
java -jar retrotranslator-transformer-1.2.2.jar -advanced -srcjar ../lib/struts2-sitemesh-plugin-2.0.9.jar -destjar struts2-sitemesh-plugin-j4-2.0.9.jar
java -jar retrotranslator-transformer-1.2.2.jar -advanced -srcjar ../lib/struts2-spring-plugin-2.0.9.jar -destjar struts2-spring-plugin-j4-2.0.9.jar
可以將它們寫到一個(gè)Bat文件中,如果你用的是Windows的系統(tǒng)的話,使用Linux的用戶可以存成sh文件.
執(zhí)行Bat文件,將生成兩個(gè)新的J4版本的包,struts2-sitemesh-plugin-j4-2.0.9.jar和struts2-spring-plugin-j4-2.0.9.jar.
將這四個(gè)Jar包放到WEB-INF/lib中,再將J4目錄中的retrotranslator-transformer-1.2.2.jar, backport-util-concurrent-3.0.jar和retrotranslator-runtime-1.2.2.jar一起放到WEB-INF/lib下.
之后再把自己寫的程序中所使用的JDK5的特性去掉,嗯,我們只用了Annotations等幾個(gè)特性,所以改起來還是相當(dāng)容易了.
至此,你的程序應(yīng)該就可以在JDK1.4上運(yùn)行了.
我使用的環(huán)境Tomcat5.0+jdk1.4.運(yùn)行我修改后的程序,測試通過......
Over
PS:程序開發(fā)到后期,才告知運(yùn)行環(huán)境有變,真的很讓人郁悶啊
問題是這樣的:
上傳文件,需要限制上傳文件的大小,這個(gè)可以在配置Action的interceptor來解決,只需設(shè)置一下maximumSize的值就可以了,我這里設(shè)置的是1048576(1M).
如果我現(xiàn)在上傳一個(gè)大小為1.5M的文件,會(huì)報(bào)文件尺寸過大的錯(cuò)誤,這個(gè)錯(cuò)誤的顯示信息可以通過在全局的國際資源文件中配置:struts.messages.error.file.too.large.這時(shí)沒有什么問題.
但只時(shí)我上傳一個(gè)大小為5M的文件,就會(huì)報(bào)一個(gè)
這里是因?yàn)镾truts2.0默認(rèn)的上傳文件的大小是2M.如果上傳超過這個(gè)大小的就會(huì)報(bào)錯(cuò).可以通過在struts.xml中修改默認(rèn)的上傳文件大小:<constant name="struts.multipart.maxSize" value="5242880" />,我在這里設(shè)置成了5M,允許上傳5M的文件.
如果用戶上傳的文件,超過了在Action中Iterceptor中的大小,而小于Struts.xml文件中設(shè)置的大小,一切正常;一旦上傳的文件超過了Struts.xml文件中設(shè)置的大小,問題就出現(xiàn)了,雖然也能正常的返回上傳頁,但數(shù)據(jù)丟失......這個(gè)受不了啊
哪位高人也遇到過這種問題,并且解決了,不妨告訴小弟一下,^_^,小弟這里先謝謝了....
PS:暫時(shí)將Struts.xml中設(shè)置了1G,如果用戶要上傳再大的文件,那也沒辦法了,抓緊時(shí)間搞定它....唉.
這個(gè)插件是:s2ss(Struts 2 Scripting Support), 地址:http://code.google.com/p/s2ss/
下載地址:http://s2ss.googlecode.com/files/struts2-groovy-plugin-0.2.jar
將這個(gè)Jar包放到WEB-INF/lib下,之后修改struts.properties,添加一行:
struts.objectFactory=groovyObjectFactory
也可以修改struts.xml,添加下面一行:
<constant name="struts.objectFactory" value="groovyObjectFactory" />
個(gè)人習(xí)慣使用后面一種.
再將Groovy的包放到WEB-INF/lib下,我用的是groovy-all-1.0.jar.
這個(gè)插件所依賴的包有:
在struts.xml中配置Action,與正常的配置差不多,只不過class里用的是Groovy的類,而且需要加上Groovy的擴(kuò)展名,如下:
<action name="groovy" class="com.puras.groovy.TestAction.groovy">
<result>/WEB-INF/pages/groovy/test_action.jsp</result>
</action>
攔截器與Action相似,
..
<interceptor name="groovyInterceptor" class="com.puras.groovy.Interceptor.groovy" />
..
<interceptor-ref name="groovyInterceptor" />
這里就只演示Action的了.呵
下面來編寫TestAction.groovy:
package com.puras.groovy;
class TestAction {
def message;
def execute() {
message = "Hello world"
return "success"
}
def getMessage() {
return message
}
}
不用進(jìn)行編譯,直接將.groovy文件復(fù)制到WEB-INF/classes/com/puras/groovy/下就可以了.
類之間的調(diào)用等,與使用Java相同.
最后再編寫一下用于顯示的test_action.jsp就OK啦.代碼如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> 現(xiàn)在,啟動(dòng)你的WEB服務(wù)器,之后打開瀏覽器,輸入地址:http://localhost:8080/your_webapp/groovy.action,就可以看到效果了. 下一步目標(biāo):
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<s:property value="message"/>
<br />
<hr />
</body>
</html>