`
daihoufa
  • 浏览: 2772 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

ajax带进度条的上传功能

阅读更多
最近在做一个用ajax上传图片的功能,有一些心得,和大家一起分享一下 。
其实使用ajax最主要的是要会使用它的工具包dwr.jar.
下面主要说一说dwr.jar的使用方法。
DWR中各种java方法的调用总结:

一、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,加不同的角色。


二、dwr使用篇
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();
}
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是接收返回值的回调函数
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);
}
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是接收返回值的回调函数
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);
}
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中的元素均为简单类型(包括其封装类)或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);
              }
             
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.List;
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值。
分享到:
评论

相关推荐

    AJAX带进度条上传图片

    在"AJAX带进度条上传图片"中,核心组件包括前端的JavaScript和后端的处理程序。在这个例子中,后端使用了`.ashx`文件,这是一种.NET Framework中的HTTP Handler,它可以处理特定的HTTP请求。 前端部分,我们通常...

    spring+velocity+ajax带进度条上传文件

    "spring+velocity+ajax带进度条上传文件"是一个综合性的技术应用场景,涉及到Spring框架、Velocity模板引擎以及Ajax技术,旨在提供一个用户友好的文件上传体验,其中包括实时的进度条显示。下面将详细解释这些技术...

    ajax 带进度条文件上传

    "Ajax 带进度条文件上传"技术就是为了解决这一问题而诞生的,它允许用户在后台上传文件的同时,通过进度条展示上传进度,提高了用户体验。在本案例中,我们将重点讨论如何使用Struts框架和Ajax技术来实现这一功能。 ...

    ajax及时上传附带进度条 ajax定时

    本资源重点介绍了两种Ajax应用:实时上传并带有进度条显示的功能,以及利用Ajax定时访问数据的案例。 首先,让我们详细探讨“ajax及时上传”这一功能。在传统的文件上传过程中,用户提交表单后,整个页面会刷新,...

    AJAX+asp带进度条上传

    在这个"AJAX+ASP带进度条上传"的主题中,我们将深入探讨如何利用AJAX技术和ASP(Active Server Pages)实现文件的异步上传,并同时展示上传进度,以JQuery作为辅助工具,提供更友好的用户界面。 首先,我们要理解...

    Ajax带进度条上传组件,打包jar

    标题提到的"Ajax带进度条上传组件,打包jar"是一个基于Ajax实现的JSP文件上传解决方案,它允许用户在后台上传文件的同时,通过进度条实时显示上传进度。这个组件可能包含了JavaScript、HTML、CSS以及Java后端处理...

    ASP.NET Ajax 带进度条文件上传示例

    通过以上知识点的解释,我们可以理解这个"ASP.NET Ajax 带进度条文件上传示例"是如何工作的,并且可以从中学习到如何在自己的项目中实现类似的功能。这个示例不仅展示了技术的应用,还强调了代码的简洁性和开源精神...

    jquery ajax上传 带进度条

    总结来说,"jquery ajax上传 带进度条"涉及到使用jQuery和Uploadify插件实现文件上传功能,并通过AJAX实时更新上传进度条,从而提供一个友好的用户界面。服务器端的处理同样重要,需要接收文件并给予适当的响应。...

    ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签

    在这个项目中,SSH2框架与Ajax技术结合,实现了一个带进度条的文件上传功能,并且这个功能已经被封装成了自定义标签,方便在页面上直接使用。 首先,让我们深入理解SSH框架的每个组件: 1. **Struts2**:Struts2是...

    java 和ajax编写带进度条的附件上传

    开发者可以通过查看这些文件,学习如何将Java后端与Ajax前端结合起来,实现带进度条的文件上传功能。 总的来说,这个话题涵盖了Java后端处理、Ajax异步通信、HTML5的FormData和进度条元素、以及前端JavaScript的...

    java+ajax带进度条的上传

    在本项目"java+ajax带进度条的上传"中,我们探讨的是如何结合这两种技术实现一个文件上传功能,并且在上传过程中展示进度条,提升用户体验。 首先,Java作为服务器端编程语言,主要负责处理业务逻辑和数据存储。在...

    struts2 用AJAX实现的上传功能(带进度条)

    struts2 用AJAX实现的上传功能,带进度条的jar包。

    richfaces实现ajax带进度条的上传

    本教程将详细讲解如何利用RichFaces实现带有进度条的AJAX文件上传。 首先,让我们了解RichFaces的核心特性。RichFaces是一个开源项目,它扩展了JSF标准,提供了许多高级组件,如数据网格、日期选择器、树形视图等。...

    struts2+ajax文件进度条的实现

    这些文件展示了如何将Struts2的文件上传功能与Ajax和进度条组件相结合。 总的来说,"struts2+ajax文件进度条的实现"是一个典型的前后端协同工作的示例,它展示了如何在Java web应用中优化用户体验,特别是在处理大...

    ajax上传进度条,form上传文件进度条

    在现代Web应用中,用户界面的交互性和用户体验是至关重要的,而“ajax上传进度条”和“form上传文件进度条”就是提升这方面体验的重要技术。本文将深入探讨这两种技术的原理、实现方式以及如何在实际项目中应用。 ...

    ajax上传组件带进度条

    **Ajax上传组件带进度条**是一种在Web应用中实现文件上传功能的方式,它结合了Ajax技术,能够在不刷新整个页面的情况下实现文件的异步上传,并且提供了可视化的进度条显示,提高了用户体验。这个组件是基于Struts2...

    ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)

    "ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)" 涉及到的是一个基于Java Web的项目,利用了Struts2、Spring2.5、Hibernate3.3和Ajax技术,实现了文件上传并带有进度条显示的功能。...

    PHP+AJAX+进度条上传

    在现代Web开发中,用户界面的交互性和用户体验是至关重要的,而“PHP+AJAX+进度条上传”技术就是一种实现高效、流畅文件上传的方法。这个技术组合利用PHP作为服务器端处理语言,AJAX(Asynchronous JavaScript and ...

Global site tag (gtag.js) - Google Analytics