dwr-invokerorg.directwebremoting.servlet.DwrServletdwr-invoker/dwr/*

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

DWR中各種java方法的調用總結

系統 1916 0
一、dwr配置篇之web.xml
1、最小配置
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
2、 當我們想看DWR自動生成的測試頁(Using debug/test mode)時,可在servlet配置中加上
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
這個參數DWR默認是false。如果選擇true,我們可以通過http://localhost:port/app/dwr看到你部署的每個DWR class。并且可以測試java代碼的每個方法是否運行正常。為了安全考慮,在正式環境下你一定把這個參數設為false。
3、多個dwr.xml文件的配置
可能有幾種情況,我們一一列舉。一個servlet,多個dwr.xml配置文件;多個servlet,每個servlet對應一個或多個dwr.xml配置文件。
3.1、一個servlet,多個dwr.xml配置文件
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>config-1</param-name>
<param-value>WEB-INF/dwr1.xml</param-value>
</init-param>
<init-param>
<param-name>config-2</param-name>
<param-value>WEB-INF/dwr2.xml</param-value>
</init-param>
</servlet>
在這種配置下,param-name的值必須以config開頭。param-name可以有>=0個。如果沒有param-name,那么將會讀取 WEB-INF/dwr.xml。如果有大于零個param-name,那么WEB-INF/dwr.xml文件將不會被讀取。
3.2、多個servlet,每個servlet對應一個或多個dwr.xml
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet
</servlet-class>
</servlet>
<servlet>
<servlet-name>dwr-invoker1</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param>
<param-name>config-admin</param-name>
<param-value>WEB-INF/dwr1.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dwr-invoker1</servlet-name>
<url-pattern>/dwr1/*</url-pattern>
</servlet-mapping>
在這種情況下,我們可以根據J2EE security來控制權限,針對不同url,加不同的角色。


AB:調用沒有返回值和參數的JAVA方法

AC:調用有簡單返回值的java方法

AD:調用有簡單參數的java方法

AE:調用返回JavaBean的java方法

AF:調用有JavaBean參數的java方法

AG:調用返回List、Set或者Map的java方法

AH:調用有List、Set或者Map參數的java方法
二、dwr使用篇

AB
1、調用沒有返回值和參數的JAVA方法
1.1、dwr.xml的配置
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod1"/>
</create>
</allow>
</dwr>
<allow>標簽中包括可以暴露給javascript訪問的東西。
<create>標簽中指定javascript中可以訪問的java類,并定義DWR應當如何獲得要進行遠程的類的實例。creator="new"屬性指定java類實例的生成方式,new意味著DWR應當調用類的默認構造函數來獲得實例,其他的還有spring方式,通過與IOC容器Spring進行集成來獲得實例等等。javascript=" testClass "屬性指定javascript代碼訪問對象時使用的名稱。
<param>標簽指定要公開給javascript的java類名。
<include>標簽指定要公開給javascript的方法。不指定的話就公開所有方法。
<exclude>標簽指定要防止被訪問的方法。
1.2、javascript中調用
首先,引入javascript腳本
<script src='dwr/interface/ testClass.js'></script>
<script src='dwr/engine.js'></script>
<script src='dwr/util.js'></script>
其中TestClass.js是dwr根據配置文件自動生成的,engine.js和util.js是dwr自帶的腳本文件。
其次,編寫調用java方法的javascript函數
Function callTestMethod1(){
testClass.testMethod1();
}

?

AC
2、調用有簡單返回值的java方法
2.1、dwr.xml的配置
配置同1.1
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod2"/>
</create>
</allow>
</dwr>
2.2、javascript中調用
首先,引入javascript腳本
其次,編寫調用java方法的javascript函數和接收返回值的回調函數
Function callTestMethod2(){
testClass.testMethod2(callBackFortestMethod2);
}
Function callBackFortestMethod2(data){
//其中date接收方法的返回值
//可以在這里對返回值進行處理和顯示等等
alert("the return value is " + data);
}
其中callBackFortestMethod2是接收返回值的回調函數

?

AD
3、調用有簡單參數的java方法
3.1、dwr.xml的配置
配置同1.1
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod3"/>
</create>
</allow>
</dwr>
3.2、javascript中調用
首先,引入javascript腳本
其次,編寫調用java方法的javascript函數
Function callTestMethod3(){
//定義要傳到java方法中的參數
var data;
//構造參數
data = “test String”;
testClass.testMethod3(data);
}

?

AE
4、調用返回JavaBean的java方法
4.1、dwr.xml的配置
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod4"/>
</create>
<convert converter="bean" match=""com.dwr.TestBean">
<param name="include" value="username,password" />
</convert>
</allow>
</dwr>
<creator>標簽負責公開用于Web遠程的類和類的方法,<convert>標簽則負責這些方法的參數和返回類型。convert元素的作用是告訴DWR在服務器端Java 對象表示和序列化的JavaScript之間如何轉換數據類型。DWR自動地在Java和JavaScript表示之間調整簡單數據類型。這些類型包括Java原生類型和它們各自的封裝類表示,還有String、Date、數組和集合類型。DWR也能把JavaBean轉換成JavaScript 表示,但是出于安全性的原因,要求顯式的配置,<convert>標簽就是完成此功能的。converter="bean"屬性指定轉換的方式采用JavaBean命名規范,match=""com.dwr.TestBean"屬性指定要轉換的javabean名稱,<param>標簽指定要轉換的JavaBean屬性。
4.2、javascript中調用
首先,引入javascript腳本
其次,編寫調用java方法的javascript函數和接收返回值的回調函數
Function callTestMethod4(){
testClass.testMethod4(callBackFortestMethod4);
}
Function callBackFortestMethod4(data){
//其中date接收方法的返回值
//對于JavaBean返回值,有兩種方式處理
//不知道屬性名稱時,使用如下方法
for(var property in data){
alert("property(屬性名):"+property);
alert(property(對應的屬性值)+":"+data[property]);
}
//知道屬性名稱時,使用如下方法
alert(data.username);
alert(data.password);
}
其中callBackFortestMethod4是接收返回值的回調函數

?

AF
5、調用有JavaBean參數的java方法
5.1、dwr.xml的配置
配置同4.1
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod5"/>
</create>
<convert converter="bean" match="com.dwr.TestBean">
<param name="include" value="username,password" />
</convert>
</allow>
</dwr>

5.2、javascript中調用
首先,引入javascript腳本
其次,編寫調用java方法的javascript函數
Function callTestMethod5(){
//定義要傳到java方法中的參數
var data;
//構造參數,date實際上是一個object
data = { username:"user", password:"password" }
testClass.testMethod5(data);
}

?

AG
6、調用返回List、Set或者Map的java方法
6.1、dwr.xml的配置
配置同4.1
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod6"/>
</create>
<convert converter="bean" match="com.dwr.TestBean">
<param name="include" value="username,password" />
</convert>
</allow>
</dwr>
注意:如果List、Set或者Map中的元素均為簡單類型(包括其封裝類Double,Float等)或String、Date、數組和集合類型,則不需要<convert>標簽。
6.2、javascript中調用(以返回List為例,List的元素為TestBean)
首先,引入javascript腳本
其次,編寫調用java方法的javascript函數和接收返回值的回調函數
Function callTestMethod6(){
testClass.testMethod6(callBackFortestMethod6);
}
Function callBackFortestMethod6(data){
//其中date接收方法的返回值
//對于JavaBean返回值,有兩種方式處理
//不知道屬性名稱時,使用如下方法
for(var i=0;i<data.length;i++){
for(var property in data){
alert("property:"+property);
alert(property+":"+data[property]);
}
}
//知道屬性名稱時,使用如下方法
for(var i=0;i<data.length;i++){
alert(data.username);
alert(data.password);
}
}
----------------------------------------------------------------------
如果java方法的返回值為Map,則在接收該返回值的javascript回調函數中如下處理:
function callBackFortestMethod(data){
//其中date接收方法的返回值
for(var property in data){
var bean = data[property];
alert(bean.username);
alert(bean.password);
}

AH
7、調用有List、Set或者Map參數的java方法
7.1、dwr.xml的配置
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="com.dwr.TestClass" />
<include method="testMethod7"/>
</create>
<convert converter="bean" match="com.dwr.TestBean">
<param name="include" value="username,password" />
</convert>
</allow>
<signatures>
<![CDATA[
import java.util.List;
import com.dwr.TestClass;
import com.dwr.TestBean;
TestClass.testMethod7(List<TestBean>);
]]>
</signatures>
</dwr>
<signatures>標簽是用來聲明java方法中List、Set或者Map參數所包含的確切類,以便java代碼作出判斷。
7.2、javascript中調用(以返回List為例,List的元素為TestBean)
首先,引入javascript腳本
其次,編寫調用java方法的javascript函數
Function callTestMethod7(){
//定義要傳到java方法中的參數
var data;
//構造參數,date實際上是一個object數組,即數組的每個元素均為object
data = [
{
username:"user1",
password:"password2"
},
{
username:"user2",
password:" password2"
}
];
testClass.testMethod7(data);
}
------------------------------------------------------------------
如果java的方法的參數為Map(假設其key為String,value為TestBean),則在調用該方法的javascript函數中用如下方法構造要傳遞的參數:
function callTestMethod (){
//定義要傳到java方法中的參數
var data;
//構造參數,date實際上是一個object,其屬性名為Map的key,屬性值為Map的value
data = {
"key1":{
username:"user1",
password:"password2"
},
"key2":{
username:"user2",
password:" password2"
}
};
testClass.testMethod(data);
}
并且在dwr.xml中增加如下的配置段
<signatures>
<![CDATA[
import java.util.Map;
import com.dwr.TestClass;
import com.dwr.TestBean;
TestClass.testMethod7(Map<String,TestBean>);
]]>
</signatures>


說明:
對于java方法的返回值為List(Set)的情況,DWR將其轉化為Object數組,傳遞給javascript;對于java方法的返回值為Map的情況,DWR將其轉化為一個Object,其中Object的屬性為原Map的key值,屬性值為原Map相應的value值。

?

?

??? ? 這幾天做項目,需要一個消息提醒功能,決定用 dwr 實現,在 dwr 官網和網上找了很多資料,也沒實現精準推送,大多數的例子具體步驟寫的不清楚,不怎么了解 dwr 的人看了也未必能看懂,反正我是沒看懂,那時就決定,若自己實現了,一定將具體步驟寫下來,希望能給那些和我一樣的人一些幫助,若有不明白的,可以給小弟留言。我只寫步驟,不寫原理,下面開始。

???? ? 第一、在項目中引入 dwr.jar ,然后在 web.xml 中進行配置,配置如下:

???? <servlet>

??????? <servlet-name>dwr-invoker</servlet-name>

??????? <servlet-class>

??????????? org.directwebremoting.servlet.DwrServlet

??????? </servlet-class>

??????? <init-param>

??????????? <param-name>crossDomainSessionSecurity</param-name>

?????? ??????? <param-value>false</param-value>

???? ???????</init-param>

??????? <init-param>

?????? ?? <param-name>allowScriptTagRemoting</param-name>

?????? ?? <param-value>true</param-value>

??????? </init-param>

??????? <init-param>

?????? ?? <param-name>classes</param-name>

?????? ?? <param-value>java.lang.Object</param-value>

??????? </init-param>

??????? <init-param>

??????????? <param-name>activeReverseAjaxEnabled</param-name>

??????????? <param-value>true</param-value>

??????? </init-param>

??????? <init-param>

?????? ??? <param-name>initApplicationScopeCreatorsAtStartup</param-name>

?????? ??? <param-value>true</param-value>

??????? </init-param>

??????? <init-param>

??????????? <param-name>maxWaitAfterWrite</param-name>

??????????? <param-value>3000</param-value>

??????? </init-param>

??????? <init-param>

??????????? <param-name>debug</param-name>

??????????? <param-value>true</param-value>

??????? </init-param>

??????? <init-param>

??????????? <param-name>logLevel</param-name>

??????????? <param-value>WARN</param-value>

??????? </init-param>

??? </servlet>

??? ? 第二:在 web.xml 的同級目錄下新建 dwr.xml 文件,內容如下

???? <!DOCTYPE dwr PUBLIC

????????? "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"

????????? "http://getahead.org/dwr/dwr30.dtd">

???? <dwr>

????????? <alow>

?????????????? <create creator="new" javascript="MessagePush">

????????????? ?? <param name="class" value="com.huatech.messageremind.service.MessagePush"/>

????????????? </create>

????????? </alow>

???? </dwr>

??? ? 這個是 dwr 的基本配置, MessagePush 在頁面的 javascript 中使用, com.huatech.messageremind.service.MessagePush 實現了想要調用的方法, MessagePush 我覺得就相當于 java 類中的一個映射,在 javascript 中使用 MessagePush.java 類中實現的方法,即可在 dwr 中調用。

??? ? 第三,要想使用 dwr ,還要在你想要推送的頁面中引入 script

????????? <script type="text/javascript" src="<%=basepath%>dwr/engine.js"></script>

?????? ?<script type="text/javascript" src="<%=basepath%>dwr/util.js"></script>

?????? ?<script type="text/javascript" src="<%=basepath%>dwr/interface/MessagePush.js"></script>

????????? ? 可以看見,也引入了 dwr.xml 中配置的 javascript engine.js util.js 是必須引入的。

?以上三點都是基本配置,沒什么好說的,想使用 dwr ,就得這么做。

?? ? 第四,實現消息的精準推送

??????? ? 消息推送簡單,但是想實現精準推送就需要做一些別的操作了

??????? 1 ? 在任何一個用戶登錄的時候,都需要將其 userId 或者其他唯一性標識放入 session 中,我放的是 userId

????????? ? 這里就以 ? userId 為唯一性標識。

??????? 2 ? 在載入想推送的頁面時,需要 onload 一個我在 MessagePush 類中實現的方法,當然了,需要使用 dwr 調用

????????? js 的調用方法如下:

?????????? function onPageLoad(){

?????? ????? var userId = '${userinfo.humanid}';

?????? ????? MessagePush.onPageLoad(userId);

?????? ?? }

??????????? <body onload="dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);onPageLoad();> ? onload 中的三個函數都是必須的,其中 dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true); dwr 中的函數。

?????????? MessagePush 類中實現的方法如下:

?????????? public void onPageLoad(String userId) {

????????????? ScriptSession scriptSession = WebContextFactory.get().getScriptSession();

????????????? scriptSession.setAttribute(userId, userId);

????????????? DwrScriptSessionManagerUtil dwrScriptSessionManagerUtil = new DwrScriptSessionManagerUtil();

????????????? try {

???????????????????? dwrScriptSessionManagerUtil.init();

????????????? } catch (ServletException e) {

???????????????????? e.printStackTrace();

????????????? }

?????? }

???????? ? 大家注意到, onPageLoad 方法中還有一個名為 DwrScriptSessionManagerUtil 的類,該類如下實現:

???????? public class DwrScriptSessionManagerUtil extends DwrServlet{

?????? private static final long serialVersionUID = -7504612622407420071L;

?

?????? public void init()

?????? throws ServletException {

?

?

????????????? Container container = ServerContextFactory.get().getContainer();

?

????????????? ScriptSessionManager manager = container

??????????????????????????? .getBean(ScriptSessionManager.class);

?

????????????? ScriptSessionListener listener = new ScriptSessionListener() {

?

???????????????????? public void sessionCreated(ScriptSessionEvent ev) {

?

??????????????????????????? HttpSession session = WebContextFactory.get().getSession();

?

??????????????????????????? String userId =((User) session.getAttribute("userinfo")).getHumanid()+"";

??????????????????????????? System.out.println("a ScriptSession is created!");

??????????????????????????? ev.getSession().setAttribute("userId", userId);

?

???????????????????? }

?

???????????????????? public void sessionDestroyed(ScriptSessionEvent ev) {

??????????????????????????? System.out.println("a ScriptSession is distroyed");

???????????????????? }

?

????????????? };

?

????????????? manager.addScriptSessionListener(listener);

?

?????? }

?

}

第四步是最最重要的,為了第四步我研究了兩天多,下面開始消息推送。

????? ? 第五、消息推送

??????????? ? 在你想要推送消息的時候,調用如下方法:

?????????? ? public void sendMessageAuto(String userid,String message) {

????????????? final String userId = userid ;

????????????? final String autoMessage = message;

????????????? Browser.withAllSessionsFiltered(new ScriptSessionFilter() {

???????????????????? public boolean match(ScriptSession session) {

??????????????????????????? if (session.getAttribute("userId") == null)

?????????????????????????????????? return false;

??????????????????????????? else

?????????????????????????????????? return (session.getAttribute("userId")).equals(userId);

???????????????????? }

????????????? }, new Runnable(){

???????????????????? private ScriptBuffer script = new ScriptBuffer();

???????????????????? public void run() {

??????????????????????????? script.appendCall("showMessage", autoMessage);

??????????????????????????? Collection<ScriptSession> sessions = Browser

??????????????????????????? .getTargetSessions();

??????????????????????????? for (ScriptSession scriptSession : sessions) {

?????????????????????????????????? scriptSession.addScript(script);

??????????????????????????? }

???????????????????? }

????????????????????

????????????? });

?????? }

???????? userid 即為你想推給消息的人, message 為你想推送的消息,大家注意到這里 script.appendCall("showMessage", autoMessage);

???????? ? 其中 showMessage 為在想推送的頁面中的 javascript 方法, autoMessage 是這個方法的參數,這樣那個頁面就能得到推送的內容了,至于如何展現,就看你的需要了。

?

??????? ? 至此,一個 dwr 消息精準推送的步驟就寫完了,其實很多東西都不難,只是我們不知道該怎么用而已。

?

DWR 3.0 上傳文件

?

第一步:需要文件包,其實就是dwr 3.0中例子所需要的包, ? dwr.jar ? ? commons-fileupload-1.2.jar ? ? commons-io-1.3.1.jar ?

?

DWR中各種java方法的調用總結

?

第二步:編輯web.xml,添加dwr-invoke

Xml代碼 ? ? 收藏代碼
  1. < servlet > ??
  2. ???? < display-name > DWR?Sevlet </ display-name > ??
  3. ???? < servlet-name > dwr-invoker </ servlet-name > ??
  4. ???? < servlet-class > org.directwebremoting.servlet.DwrServlet </ servlet-class > ??
  5. ???? < init-param > ??
  6. ???????? < description > 是否打開調試功能 </ description > ??
  7. ???????? < param-name > debug </ param-name > ??
  8. ???????? < param-value > true </ param-value > ??
  9. ???? </ init-param > ??
  10. ???? < init-param > ??
  11. ???????? < description > 日志級別有效值為:?FATAL,?ERROR,?WARN?(the?default),?INFO?and?DEBUG. </ description > ??
  12. ???????? < param-name > logLevel </ param-name > ??
  13. ???????? < param-value > DEBUG </ param-value > ??
  14. ???? </ init-param > ??
  15. ???? < init-param > ??
  16. ???????? < description > 是否激活反向Ajax </ description > ??
  17. ???????? < param-name > activeReverseAjaxEnabled </ param-name > ??
  18. ???????? < param-value > true </ param-value > ??
  19. ???? </ init-param > ??
  20. ???? < init-param > ????
  21. ????????? < description > 在WEB啟動時是否創建范圍為application的creator </ description > ????
  22. ????????? < param-name > initApplicationScopeCreatorsAtStartup </ param-name > ????
  23. ????????? < param-value > true </ param-value > ????
  24. ???? </ init-param > ????
  25. ???? < init-param > ??
  26. ???????? < description > 在WEB啟動時是否創建范圍為application的creator </ description > ????
  27. ???????? < param-name > preferDataUrlSchema </ param-name > ??
  28. ???????? < param-value > false </ param-value > ??
  29. ???? </ init-param > ??
  30. ???????? < load-on-startup > 1 </ load-on-startup > ????
  31. ??????
  32. </ servlet > ??
  33. < servlet-mapping > ??
  34. ???? < servlet-name > dwr-invoker </ servlet-name > ??
  35. ???? < url-pattern > /dwr/* </ url-pattern > ??
  36. </ servlet-mapping > ??

?第三步:創建上傳類FileUpload.java,編輯代碼,內容如下:

Java代碼 ? ? 收藏代碼
  1. package ?learn.dwr.upload_download;??
  2. ??
  3. import ?java.awt.Color;??
  4. import ?java.awt.Font;??
  5. import ?java.awt.Graphics2D;??
  6. import ?java.awt.geom.AffineTransform;??
  7. import ?java.awt.image.AffineTransformOp;??
  8. import ?java.awt.image.BufferedImage;??
  9. import ?java.io.File;??
  10. import ?java.io.FileOutputStream;??
  11. import ?java.io.InputStream;??
  12. import ?org.directwebremoting.WebContext;??
  13. import ?org.directwebremoting.WebContextFactory;??
  14. ??
  15. /** ?
  16. ?*?title:? 文件上傳 ?
  17. ?*?@author?Administrator ?
  18. ?*?@時間?2009-11-22:上午11:40:22 ?
  19. ?*/ ??
  20. public ? class ?FileUpload?{??
  21. ??
  22. ???? /** ?
  23. ?????*?@param?uploadImage?圖片文件流 ?
  24. ?????*?@param?uploadFile?需要用簡單的文本文件,如:.txt文件,不然上傳會出亂碼 ?
  25. ?????*?@param?color ?
  26. ?????*?@return ?
  27. ?????*/ ??
  28. ???? public ?BufferedImage?uploadFiles(BufferedImage?uploadImage,??
  29. ????????????String?uploadFile,?String?color)?{??
  30. ???????? //?uploadImage?=?scaleToSize(uploadImage); ??
  31. ???????? //?uploadImage?=grafitiTextOnImage(uploadImage,?uploadFile,?color); ??
  32. ???????? return ?uploadImage;??
  33. ????}??
  34. ??
  35. ???? /** ?
  36. ?????*? 文件上傳 時使用InputStream類進行接收,在DWR官方例中是使用String類接收簡單內容 ?
  37. ?????*? ?
  38. ?????*?@param?uploadFile ?
  39. ?????*?@return ?
  40. ?????*/ ??
  41. ???? public ?String?uploadFile(InputStream?uploadFile,?String?filename)??
  42. ???????????? throws ?Exception?{??
  43. ????????WebContext?webContext?=?WebContextFactory.get();??
  44. ????????String?realtivepath?=?webContext.getContextPath()?+? "/upload/" ;??
  45. ????????String?saveurl?=?webContext.getHttpServletRequest().getSession()??
  46. ????????????????.getServletContext().getRealPath( "/upload" );??
  47. ????????File?file?=? new ?File(saveurl?+? "/" ?+?filename);??
  48. ???????? //?if?(!file.exists())?{ ??
  49. ???????? //?file.mkdirs(); ??
  50. ???????? //?} ??
  51. ???????? int ?available?=?uploadFile.available();??
  52. ???????? byte []?b?=? new ? byte [available];??
  53. ????????FileOutputStream?foutput?=? new ?FileOutputStream(file);??
  54. ????????uploadFile.read(b);??
  55. ????????foutput.write(b);??
  56. ????????foutput.flush();??
  57. ????????foutput.close();??
  58. ????????uploadFile.close();??
  59. ???????? return ?realtivepath?+?filename;??
  60. ????}??
  61. ??
  62. ???? private ?BufferedImage?scaleToSize(BufferedImage?uploadImage)?{??
  63. ????????AffineTransform?atx?=? new ?AffineTransform();??
  64. ????????atx??
  65. ????????????????.scale(200d?/?uploadImage.getWidth(),?200d?/?uploadImage??
  66. ????????????????????????.getHeight());??
  67. ????????AffineTransformOp?atfOp?=? new ?AffineTransformOp(atx,??
  68. ????????????????AffineTransformOp.TYPE_BILINEAR);??
  69. ????????uploadImage?=?atfOp.filter(uploadImage,? null );??
  70. ???????? return ?uploadImage;??
  71. ????}??
  72. ??
  73. ???? private ?BufferedImage?grafitiTextOnImage(BufferedImage?uploadImage,??
  74. ????????????String?uploadFile,?String?color)?{??
  75. ???????? if ?(uploadFile.length()?<? 200 )?{??
  76. ????????????uploadFile?+=?uploadFile?+? "?" ;??
  77. ????????}??
  78. ????????Graphics2D?g2d?=?uploadImage.createGraphics();??
  79. ???????? for ?( int ?row?=? 0 ;?row?<? 10 ;?row++)?{??
  80. ????????????String?output?=? "" ;??
  81. ???????????? if ?(uploadFile.length()?>?(row?+? 1 )?*? 20 )?{??
  82. ????????????????output?+=?uploadFile.substring(row?*? 20 ,?(row?+? 1 )?*? 20 );??
  83. ????????????}? else ?{??
  84. ????????????????output?=?uploadFile.substring(row?*? 20 );??
  85. ????????????}??
  86. ????????????g2d.setFont( new ?Font( "SansSerif" ,?Font.BOLD,? 16 ));??
  87. ????????????g2d.setColor(Color.blue);??
  88. ????????????g2d.drawString(output,? 5 ,?(row?+? 1 )?*? 20 );??
  89. ????????}??
  90. ???????? return ?uploadImage;??
  91. ????}??
  92. }??

?第四步:添加到dwr.xml

Java代碼 ? ? 收藏代碼
  1. <create?creator= "new" >??
  2. ????<param?name= "class" ?value= "learn.dwr.upload_download.FileUpload" ?/>??
  3. </create>??

?第五步:添加前臺html代碼

Html代碼 ? ? 收藏代碼
  1. <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > ??
  2. < html ? xmlns = "http://www.w3.org/1999/xhtml" > ??
  3. < head > ??
  4. < meta ? http-equiv = "Content-Type" ? content = "text/html;?charset=utf-8" ? /> ??
  5. < title > 二進制文件處理, 文件上傳 </ title > ??
  6. < script ? type = 'text/javascript' ? src = '/learnajax/dwr/interface/FileUpload.js' > </ script > ??
  7. < script ? type = 'text/javascript' ? src = '/learnajax/dwr/engine.js' > </ script > ??
  8. < script ? type = 'text/javascript' ? src = '/learnajax/dwr/util.js' > </ script > ??
  9. < script ? type = 'text/javascript' ? > ??
  10. function?uploadFiles(){??
  11. ????var? uploadImage ?=? dwr .util.getValue("uploadImage");??
  12. ?????FileUpload.uploadFiles(uploadImage,?"",?"",?function(imageURL)?{??
  13. ????????alert(imageURL);??
  14. ????????dwr.util.setValue('image',?imageURL);??
  15. ??});??
  16. ??
  17. }??
  18. function?uploadFile(){??
  19. ????var? uploadFile ?=? dwr .util.getValue("uploadFile");??
  20. ????//var? uploadFile ?= document .getElementById("uploadFile").value;??
  21. ????var? uploadFile uploadFile_temp ?=?uploadFile.value.replace("\\","/");??
  22. ????var? filenames ?=? uploadFile .value.split("/");??
  23. ????var? filename ?=? filenames [filenames.length-1];??
  24. ????//var? e extension ?=?e[e.length-1];??
  25. ????FileUpload.uploadFile(uploadFile,filename,function(data){??
  26. ????????var? file_a =? document .getElementById("file_a");??
  27. ???????? file_a.href = data ;??
  28. ???????? file_a.innerHTML = data ;??
  29. ????????document.getElementById("filediv") .style.display = "" ;??
  30. ????});??
  31. }??
  32. ??????
  33. </ script > ??
  34. </ head > ??
  35. ??
  36. < body > ??
  37. < table ? border = "1" ? cellpadding = "3" ? width = "50%" > ??
  38. ???? < tr > ??
  39. ???????? < td > Image </ td > ??
  40. ???????? < td > < input ? type = "file" ? id = "uploadImage" ? /> </ td > ??
  41. ???????? < td > < input ? type = "button" ? onclick = "uploadFiles()" ? value = "upload" /> < div ? id = "image.container" > &nbsp; </ div > </ td > ??
  42. ???? </ tr > ??
  43. ???? < tr > ??
  44. ???????? < td > File </ td > ??
  45. ???????? < td > < input ? type = "file" ? id = "uploadFile" ? /> </ td > ??
  46. ???????? < td > < input ? type = "button" ? onclick = "uploadFile()" ? value = "upload" /> < div ? id = "file.container" > &nbsp; </ div > </ td > ??
  47. ???? </ tr > ??
  48. ???? < tr > ??
  49. ???????? < td ? colspan = "3" > </ td > ??
  50. ???? </ tr > ??
  51. </ table > ??
  52. < img ? id = "image" ? src = "javascript:void(0);" /> ??
  53. < div ? id = "filediv" ? style = "display:none;" > ??
  54. < a ? href = "" ? id = "file_a" > 上傳的文件 </ a > ??
  55. </ div > ??
  56. </ body > ??
  57. </ html > ??

?

添加進度條么,就需要用reverse ajax 進行配合使用了。

DWR中各種java方法的調用總結


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩在线免费播放 | 四虎1515hh永久久免费 | 欧美高清正版在线 | 好大好硬好长好爽a网站 | 欧美成人精品一区二区男人看 | 国产亚洲精品久久一区二区三区 | 欧美黄色免费网站 | 欧美第一页草草影院浮力 | 免费能直接在线观看黄的视频 | 四虎1515hh永久久免费 | 天天操夜夜嗨 | 日韩欧美在线视频不卡免费视频 | caoliushequ2017| 久久成人免费观看草草影院 | 日韩在线观看中文 | 这里精品| 一级毛片a级 | 久久国产精品-国产精品 | 国产三级在线播放 | 国产一区二区三区免费播放 | 色综合久久久久 | 亚洲欧美日韩激情在线观看 | 最新国产精品 | 久草久草在线 | 高潮岳喷我一脸 | 精品日韩欧美一区二区三区在线播放 | 国产成人系列 | 亚洲精品乱码久久久久久v 国产高清免费视频 | 最新中文字幕日本 | 欧美老妇交乱视频 | 成年网站在线观看 | 日本三级香港三级网站 | 偷拍自拍一区 | 成人精品视频 成人影院 | 91精品国产露脸在线观看 | 国产高清在线观看 | 亚洲视频在线视频 | 天天影院成人免费观看 | 免费黄色欧美视频 | 日韩精品一区二区三区第95 | 狠狠色丁香婷婷综合橹不卡 |