`

Struts 与 dojo 整合研究 (一)

阅读更多

 

Struts dojo 整合研究

1,        Struts dojo 标签

Struts 框架有一些 Ajax 的插件,例如:

·         Ajax Parts - The AjaxParts Taglib (APT) is a component of the Java Web Parts (JWP) project ( http://javawebparts.sourceforge.net ) that allows for 100% declarative 

                           (read: no Javascript coding required!) AJAX functionality within a Java-based webapp.

·         Dojo - The Ajax Tags Dojo Plugin was represented as a theme for Struts 2.0. For Struts 2.1, the Dojo tags are bundled as a plugin.

·         YUI – The Yahoo User Interface (YUI) Plugin has only a few tags are available so far, but the YUI tags tend to be easier to use than the Dojo versions.

·         jQuery - The jQuery Plugin provide ajax functionality and UI Widgets an JavaScript Grid based on the jQuery javascript framework..

               其中 Ajax Tags Dojo Plugin struts2.1 中已经被废除了,主要是由于 dojo 之前的版本不稳定,最新的 dojo 插件 struts2-dojo-plugin-2.2.3.jar 也只支持 dojo0.4

               版本的核心,一共 11 个标签 ,如果不用 struts dojo 标签就设计到数据转换的问题,下面第 2 点说明。

 

2,        struts dojo 的数据转换方法

         1)   json 格式的数据比 xml web2.0 的应用中性能要好,主要是因为 javascript json 的解析和序列化比 xml 要方便,因此考虑用 json 做前后端的数据传输格

                      式。另外由于后端处理 request 的时候和是否是 Ajax 请求并无关系,主要是在后台返回 response 的时候,前台的 script 对数据格式有一定的要求,所以本文主要

                      分析后台在应用 Struts 之后返回 json 数据给前台的处理方法。  

         2)   那么在前台与后台传输 json 格式的数据时候,关于后台的数据转换问题,有几种常做的方法 :

                       a, Struts 直接返回 stream 给前台,做法是:应用 Struts ”stream” 这种 result type ,让 action 返回一个 inputStream 给前台,这个

                       stream 里写一个 json 格式的字符串,其中 json 格式的字符串,可以在后台拼字符串,或者应用 json 格式转换插件将 object 转换成 json 格式的字符串,这样的

                       开源插件有很多种( http://json.org/ 网站上有各种序列化 json 的插件的链接)。       

               b, Struts 直接返回一个 JSON response ,这需要使用 JSON 插件! JSON 插件提供了一种名为 json Action  Result Type  。一旦为Action 指定了该 

                        结果处理类型,JSON 插件就会自动将Action 里的数据序列化成JSON 格式的数据,并返回给客户端物理视图的JavaScript 。简单的说,JSON 插件允许我们在JavaScript

                        异步的调用Action ,而且Action 不需要指定视图来显示Action 的信息显示。而是由JSON 插件来负责具体将Action  里面具体的信息返回给调用页面。

3,        Jsonplugin 的用法 (https://cwiki.apache.org/confluence/display/WW/JSON%20Plugin

                  在反序列化时,我一直没有试出来,最后在研究struts2-json-plugin-2.2.3.jar插件的源码之后,发现这个插件的反序列化做的还是比较粗放的,不能精确的反序列化对象,最后

            还是用struts2的域模型驱动来实现的这个功能。

             下面来看代码:

              1,所需jar包: (主要是struts的jar包和jsonplugin的jar包,有一些别的包是做其他实验用的)

            

               2, Action的代码:

 

package com.action;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.struts2.json.annotations.JSON;

import com.bean.Address;
import com.bean.Movie;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;


public class JSONExample extends ActionSupport{
	private String field1 = null;
	private int[] ints = { 10, 20 };
	private Map<String , Movie> map = null;
	private String customName = "custom";
	private Movie movie = null;
	private List<Movie> movieList = null;
	private Date todayDate = new Date();
	// 'transient' fields are not serialized
	private transient String field2;

	// fields without getter method are not serialized
	private String field3;

	public String execute() {
		System.out.println("execute method begin!");
		
		System.out.println("map   是  "+getMap().getClass().getName()+"类型");
		System.out.println("map   =   "+getMap());
		
		System.out.println("movieList   是  "+getMovieList().getClass().getName()+"类型");
		System.out.println("movieList   =   "+getMovieList());
	
		System.out.println("execute method end!");
		return Action.SUCCESS;
	}

	// @JSON(serialize=false)
	
	public String getField1() {
		return field1;
	}

	public void setField1(String field1) {
		
		this.field1 = field1;
	}

	public int[] getInts() {
		return ints;
	}

	public void setInts(int[] ints) {
		this.ints = ints;
	}

	public Map getMap() {
		return map;
	}

	public void setMap(Map<String, Movie> map) {
		this.map = map;
	}

	//@JSON(name = "newName")
	public String getCustomName() {
		return this.customName;
	}

	public Movie getMovie() {
		return movie;
	}

	public void setMovie(Movie movie) {
		this.movie = movie;
	}

	public List getMovieList() {
		
		return movieList;
	}

	public void setMovieList(List<Movie> movieList) {
		this.movieList = movieList;
	}
	@JSON(format="yyyy/MM/dd")
	public Date getTodayDate() {
		return todayDate;
	}

	public void setTodayDate(Date todayDate) {
		this.todayDate = todayDate;
	}
}

  3,struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.devMode" value="true"/>
    <package name="stream" extends="json-default">
   
        <action name="JSONExample" class="com.action.JSONExample">
        	
            <result type="json">
                <!--
	        <param name="root">
                          moive
                 </param>
                <param name="excludeProperties">
                         moive,field1
                </param>
                <param name="ignoreHierarchy">
                         false
                </param>
                -->
            </result>
        </action>
        
    </package>
</struts>

    这里配置好之后,在前台请求JSONExample之后struts2就会返回json格式的数据给前台了!至于dojo怎么处理这个json格式的数据那就是你的事了!其实这个例子就是wiki文档的例子,我自己做了一些实验而已,jsonRPC的应用也是一个不错的研究点,下次有心得还是会和大家一起分享讨论!

下面的源码是核心源码,jar包和dojo大家可以自己下载。我用的是struts2 2.2.3版得dojo是1.6.1的,其中需要说明的是,struts2的不同版本需要不同的jsonplugin插件,一般自带的包里就可以。

主要源码在附件中下载:

 

 

附录:

1 ,在后台可以用 json_java 做parse Java to json的工作!

2 json-lib-2.1-jdk15.jar 也是一个后台做 json java 对象之间转换的包, struts 文档有介绍!

3 jsonplugin-0.34.jar 包是做转换和提供 json result type!

       struts2-json-plugin-2.2.3.jar 的包结构与上面的包结构一么一样,是同样的功能,不同的开源项目?

        这两个包都 Provides a result type 'json' that serializes an action into JSON, and a 'json' interceptor   that populates an action form a request containing a json string.

4 struts2jsonresult.jar 提供 json result type!是另外一种做json序列化的选择,有兴趣的可以去wiki上看看文档            http://code.google.com/p/struts2jsonresult/w/list

      It provides a "json" result type that serializes beans into JSON!

   jsonplugin( jsonplugin-0.34.jar, struts2-json-plugin-2.2.3.jar )与 struts2jsonresult.jar Difference

  • No interceptor is provided by this plugin, only the json result type is provided.
  • more powerful include/exclude patterns are supported(thanks to the features of flexjson)

存在的问题:

1,  反序列化未实现,即前台 dojo 直接发 json 的数据格式的请求,让 jsonplugin 自动序列化成 java 对象的工作。但可用struts2的域模型驱动来做,比较好做,jsonplugin插件并不是最佳的反序列化的选择!

2,  调研 jsonRPC 的应用(之后会上传,期待你的关注哦^_^)

3, 本文源码文件也许没有组织好,文章也写的比较粗放,欢迎大家指正!

  • 大小: 33.8 KB
  • src.rar (6.8 KB)
  • 下载次数: 24
分享到:
评论

相关推荐

    struts2+dojo实现例子

    这个"struts2+dojo ajax实现小例子"可能包含了这些基本的整合过程,你可以通过查看解压后的源码,了解具体的实现细节。它是一个很好的学习资源,可以帮助你理解Struts2和Dojo如何协同工作,如何在实际项目中实现高效...

    Struts2+Dojo +iBatis树的整合

    在Struts2与Dojo整合时,通常会使用Struts2的dojo-plugin来处理JSON数据,以实现Dojo组件与后台的通信。 然后,iBatis是一个SQL映射框架,它将SQL语句与Java代码分离,使得开发者能够更加灵活地处理数据库查询。...

    Struts 2.2.1的Ajax整合jQuery 1.4和Dojo 2.0框架的编程示例

    本示例整合了jQuery 1.4版本框架,同时也使用dojo框架来完成struts2的属性页标签。 使用jQuery与Struts2可以非常轻松的编程。如果你熟悉jQuery框架,那么你可以“让程序飞一会儿”吧。。。^_^ 阅读对象:熟悉Struts ...

    struts2.3.4必备包+dojo_ajax包

    Struts2与Dojo的整合,可以让后端的业务逻辑与前端的用户交互无缝对接。通过Struts2的Action,可以方便地将服务端数据传递到Dojo的视图组件,同时,Dojo的AJAX功能可以轻松调用Struts2的Action方法,实现动态更新和...

    struts2.0整合Struts 1

    7. **插件架构**:Struts 2的插件体系使得扩展和定制变得简单,如 strut2-dojo-plugin 提供了与Dojo JavaScript库的集成。 整合Struts 1和Struts 2涉及到的主要工作包括: 1. **Action映射**:将Struts 1的Action...

    struts2插件整合

    - **Struts2-dojo-plugin**:提供了与Dojo JavaScript库的集成,便于创建富客户端应用。 - **Struts2-convention-plugin**:自动配置Action,简化XML配置文件,遵循约定优于配置的原则。 - **Struts2-json-plugin...

    Struts2+Spring整合所需jar包

    - **struts2-spring-plugin.jar**:用于Struts2与Spring的整合,提供Action类的依赖注入功能。 - **struts2-tiles-plugin.jar**:集成Tiles布局框架,方便页面的组织和复用。 - **struts2-json-plugin.jar**:...

    struts2整合源码1

    这个"struts2整合源码1"压缩包很可能包含了一个完整的Struts2项目,以及与之相关的数据库SQL2005脚本,帮助开发者理解和学习Struts2框架的集成和实际应用。 首先,让我们深入了解Struts2框架的关键特性: 1. **MVC...

    Struts2.x整合工具开发包,需要的朋友下载过来学习

    同时,Struts2.x具有丰富的插件生态系统,如Struts2-dojo-plugin、Struts2-jquery-plugin等,可以方便地集成JavaScript库,增强前端交互体验。 总的来说,Struts2.x是一个强大且成熟的Web开发框架,它通过清晰的...

    Struts2 Spring Jpa Ajax Dojo crud小例子

    Struts2、Spring、JPA、Ajax 和 Dojo 是五个在Web开发中常见的技术框架,它们结合使用可以构建高效、灵活且功能丰富的应用程序。在这个"Struts2 Spring Jpa Ajax Dojo crud小例子"中,我们将深入探讨这些技术如何...

    struts2.0整合freemarker

    将Struts2.0与Freemarker整合,可以创建动态Web应用,提供灵活的视图呈现。 **一、Struts2.0框架概述** Struts2.0是Struts1.x的升级版,基于拦截器模型,提供了更强大的控制层。它包含了Action、Interceptor、...

    struts-2.5.22-all.zip

    Struts2是一个非常著名的Java Web开发框架,由Apache软件基金会维护。它的主要目的是提供一个用于构建企业级Web应用程序的MVC(Model-View-Controller)架构。Struts2的版本2.5.22是其稳定且功能丰富的版本之一,...

    struts2.0jar包及struts2.0与spring的整合jar包.rar

    接下来,我们关注Struts2.0与Spring的整合。Spring是一个全面的Java企业级应用框架,提供了依赖注入(DI)、面向切面编程(AOP)等功能。整合Struts2和Spring的主要目的是实现更灵活的控制层和更好的服务管理。 1. ...

    整合struts2.1和hibernate3.2的JAR包

    下面将详细阐述如何整合Struts2.1与Hibernate3.2,以及涉及的相关知识点。 首先,了解Struts2.1:这是一个基于ApacheJakarta Struts的下一代MVC框架。它提供了一种模型驱动的方法来开发Web应用程序,允许开发者使用...

    lib_struts-2.0.12

    3. **Struts2 Dojo**:这是一个与Ajax相关的包,提供了与Dojo JavaScript库的集成,便于在Struts2应用中实现异步交互和动态更新。 4. **Struts2 Servlets**:这部分包括了与Servlet容器(如Tomcat)的集成,处理...

    Struts2项目代码

    Struts2是一个强大的Java web开发框架,用于构建和维护可扩展、...同时,它还能帮助你熟悉Struts2与其他技术(如数据库访问、Spring整合等)的集成。通过深入研究和实践,你可以熟练掌握这个流行的Java web开发框架。

    Struts2+Spring3+Hibernate4整合的jar包

    1. Struts2的核心库,包括struts2-core、struts2-convention-plugin、struts2-dojo-plugin等,用于实现MVC架构和扩展功能。 2. Spring的各模块库,如spring-context、spring-beans、spring-webmvc等,提供DI、AOP等...

Global site tag (gtag.js) - Google Analytics