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

ssh 架构下 json 数据的产生概述

阅读更多

N没写博客了,也是来****公司后的第一博。呵呵

  今天绝大多数的Web  开发会涉及到ajax json。先从前台开始说起(基于Jquery)

(1) web 前台产生异步请求;jquery 比较常用的两个函数:

 1) 

 

  $.ajax({

    type:"post",

    url: addURL,

    dataType: "json",

    data:param,

       success: function (data){

        alert("dd"); 

    alert(data);

     

    }

    });

   其中addURL 处理该请求的后台Action,param表示请求的参数,是以键值对的显示出现,如:

 

   var  selcetedIdString =  "${param.selcetedIdString}";

    var  addURL = '${addURL}';

    var  param = {selcetedIdString:selcetedIdString};

2)第二种方法,利用jqurey 提供的函数

       $.getJSON(url,param,function(data){

        alert(data);

         });

参数意义与第一种一样,两者的唯一区别在于 返回的data 的类型,第一种是是返回对象不是json对象,要进过

eval 函数转化才能成json对象,第二种,返回的data直接是json数据。

前台大致情况是这样的,后台是 json数据的来源,下面来描述后台怎么样常识json 数据,基于ssh 开发,struts2 很好的集成了 对json 数据产生支持,利用struts2 产生json 数据,需要用到包为:

  json-lib-2.4-jdk15.jar;ezmorph-1.0.2.jar等。主要是利用import net.sf.json.*下的静态类,写入到请求里。其中主要的注意点,Action 里,请求处理成功后,是否有配置Result;

  1) Action 返回的是Void 

    Action中 

     public void sationMapQuery(){

Helper.logEntrance("sationMapQuery");

try {

Helper.checkNotNull("sationMapQuery_selcetedIdString", selcetedIdString, "sationMapQuery_selcetedIdString");

String idtemp = selcetedIdString;

selcetedId = null;

selcetedId =  new ArrayList<Long>();

if(idtemp.contains(",")){

String arrayID [] = idtemp.split(",");

for(String id:arrayID){

selcetedId.add(new Long(id));

}

}else {

selcetedId.add(new Long(idtemp));

}

List selectedList  = stationMapServer.queryByIDs(selcetedId);

String listjson = JsonUtil.getListToJsonData(selectedList);

System.out.println(listjson);

JsonUtil.sendJsonString(listjson);

} catch (IOException e) {

e.printStackTrace();

}

/*JSONObject jsonObject=new JSONObject();

try {

JsonUtil.sendCallbackMessage("true");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

jsonObject.element("isSuccess", true);*/

Helper.logExit("sationMapQuery");

}

其中package com.zjpost.rural.util;

 

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import javax.servlet.http.HttpServletResponse;

 

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

import net.sf.json.JsonConfig;

 

import org.apache.struts2.ServletActionContext;

 

 

import com.zjpost.rural.model.intermedia.JsonColumn;

import com.zjpost.rural.model.intermedia.JsonTreeItem;

 

public class JsonUtil {

public static void sendJsonString(String content)throws IOException{      

if(content == null){

content = "";

}

        HttpServletResponse response = ServletActionContext.getResponse();      

        response.setCharacterEncoding("UTF-8");      

        response.setContentType("text/plain");

        response.getWriter().write(content);  

}

//message values:

// success : "true"

// error: "detail error message like : db connection exception"

// forword: "forword"

public static void sendCallbackMessage(String message) throws IOException{

JSONObject jsonMessage = new JSONObject();

jsonMessage.element("message", message);

HttpServletResponse response = ServletActionContext.getResponse();      

        response.setCharacterEncoding("UTF-8");      

        response.setContentType("text/plain");

        response.getWriter().write(jsonMessage.toString()); 

}

public static void sendHtmlCallbackMessage(String message) throws IOException{

JSONObject jsonMessage = new JSONObject();

jsonMessage.element("message", message);

HttpServletResponse response = ServletActionContext.getResponse();      

        response.setCharacterEncoding("UTF-8");      

        response.setContentType("text/html");

        response.getWriter().write(jsonMessage.toString()); 

}

public static String toJsonTable(JsonColumn[] columns, List<Object[]> rows, Long total){

return toJsonTable(columns, rows, total, null, false);

}

public static String toJsonTable(JsonColumn[] columns, List<Object[]> rows, Long total, String idColumnName,boolean needCheckbox){

JSONObject table = new JSONObject();

table.element("total", total);

table.element("columns", columns);

JSONArray rowArray = new JSONArray();

if(rows != null && rows.size() > 0){

for(Object[] objs: rows)

{

JSONObject  rowObj = new JSONObject();

int i=0;

if (needCheckbox) {

i = 1;

for (; i < columns.length ; i++) {

rowObj.element(columns[i].getField(), objs[i - 1]);

}

} else{

for(; i< columns.length;i++){

rowObj.element(columns[i].getField(), objs[i]);

}

}

if(idColumnName != null && !idColumnName.isEmpty()){

rowObj.element(idColumnName, objs[objs.length -1]);

}

rowArray.add(rowObj);

}

}

table.element("rows", rowArray);

return table.toString();

}

public static String toJsonTableWithColor(JsonColumn[] columns, List<Object[]> rows, Long total, String idColumnName,boolean needCheckbox,String colorColumnName){

JSONObject table = new JSONObject();

table.element("total", total);

table.element("columns", columns);

JSONArray rowArray = new JSONArray();

if(rows != null && rows.size() > 0){

for(Object[] objs: rows)

{

JSONObject  rowObj = new JSONObject();

int i=0;

if (needCheckbox) {

i = 1;

for (; i < columns.length ; i++) {

rowObj.element(columns[i].getField(), objs[i - 1]);

}

} else{

for(; i< columns.length;i++){

rowObj.element(columns[i].getField(), objs[i]);

}

}

if(idColumnName != null && !idColumnName.isEmpty()){

if(colorColumnName != null){

rowObj.element(idColumnName, objs[objs.length -2]);

rowObj.element(colorColumnName, objs[objs.length -1]);

}

else{

rowObj.element(idColumnName, objs[objs.length -1]);

}

}

rowArray.add(rowObj);

}

}

table.element("rows", rowArray);

return table.toString();

}

public static String toJsonTable(JsonColumn[] columns, List<Object[]> rows, Long total, String idColumnName){

return toJsonTable(columns, rows, total, idColumnName, true);

}

 

public static List<JsonTreeItem> makeTree(List<JsonTreeItem> items)

{

Map<Long, List<JsonTreeItem>> parentMap = new HashMap<Long, List<JsonTreeItem>>();

List<JsonTreeItem> rootItems = null;

if(items != null && items.size() >0){

for(JsonTreeItem item : items){

if(parentMap.containsKey(item.getParentId())){

parentMap.get(item.getParentId()).add(item);

}

else{

List<JsonTreeItem> children = new  ArrayList<JsonTreeItem>();

children.add(item);

parentMap.put(item.getParentId(), children);

}

}

rootItems = parentMap.get(0L);

if(rootItems != null && rootItems.size() > 0){

for(JsonTreeItem rootItem : rootItems){

setChildrenItem(rootItem, parentMap);

}

}

}

changeParentCheckStatus(rootItems);

return rootItems;

}

public static void changeParentCheckStatus(List<JsonTreeItem> items){

for(JsonTreeItem item : items){

if(item.getChildren().size() > 0)

{

item.setChecked(false);

changeParentCheckStatus(item.getChildren());

}

}

}

//递归set children

public static void setChildrenItem(JsonTreeItem parentItem, Map<Long, List<JsonTreeItem>> itemMap){

List<JsonTreeItem> children = null;

if(itemMap.containsKey(parentItem.getId())){

children  = itemMap.get(parentItem.getId());

for(JsonTreeItem item : children){

setChildrenItem(item, itemMap);

}

parentItem.setChildren(children);

}

}

public static String getListToJsonData(List<?> dataList) {

JSONArray jsonArray = null;

try{

jsonArray = JSONArray.fromObject(dataList);

}catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

return jsonArray.toString();

}

}


 

 sturts 配置

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">

<struts>

<package name="getgps" namespace="" extends="default">

<!-- 网点地图获取经纬度 --> 

<action name="queryMapAction" class="stationMapQueryBean" method="sationMapQuery">

</action>

<action name="initMapQueryAction" class="stationMapQueryBean" method="initMapQuery">

<param name="selcetedIdString">${selcetedIdString}</param>

<result >

/npmap/statiomMap.jsp

</result>

</action>

<action name="initAction" class="stationMapQueryBean" method="init">

<result >

/npmap/stationMapQueryList.jsp

</result>

</action>

</package>  

</struts>

 

 

2)自己定义个结构类型,实现Result 

 

  <package name="kingee_ast_default"  namespace="/mobile" extends="struts-default" >

<result-types>

        <result-type name="json" class="JSONResult"/>

         </result-types>

        <action name="queryCtyTwn" class="mobileQueryCtyTwn"  method="getCityTown">

<result type="json"></result>

</action>

</package>

 

/**

 * zjpost

 

 */

package com.zjpost.npmis.struts2;

 

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.Result;

 

/***

 * @author <a href="dengdechuan@gmail.com">XXX</a>

 * @version $Id: $

 */

public class MobileBaseResult implements Result {

 

@Override

public void execute(ActionInvocation arg0) throws Exception {

 

}

 

}

 

 

 

 /**

 * zjpost

 

 */

package com.zjpost.npmis.action.mobile;

 

import java.io.IOException;

 

import com.opensymphony.xwork2.ActionSupport;

import com.zjpost.npmis.service.mobile.IBusinesSiteServer;

import com.zjpost.rural.model.management.User;

import com.zjpost.rural.util.JsonUtil;

 

/***

 * @author <a href="dengdechuan@gmail.com">XXX</a>

 * @version $Id: $

 */

public class BusinesSiteAction  extends ActionSupport{

private   IBusinesSiteServer  businesSiteServer;

// private   User  usr;

public String getCityTown(){

// businesSiteServer.queryCtiyOrTown(usr, null);

     String temp = "{" +

      " \"posts\" : [{ \"usr_id\": \"1000010012342\"}]} ";

try {

JsonUtil.sendJsonString(temp);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return SUCCESS;

}

public IBusinesSiteServer getBusinesSiteServer() {

return businesSiteServer;

}

 

public void setBusinesSiteServer(IBusinesSiteServer businesSiteServer) {

this.businesSiteServer = businesSiteServer;

}

 

}

 

 

 

分享到:
评论

相关推荐

    SSH+EXT如何返回JSON

    本文将以SSH(Struts2 + Spring + Hibernate)框架结合EXT框架为例,详细介绍如何通过SSH框架将数据转化为JSON格式并传递给EXT前端。 #### 二、环境配置 在开始之前,我们需要确保项目中已经正确配置了SSH框架的...

    基于ExtJS和SSH的Web应用架构的研究与实现

    - **通过RESTful API与后端通信**:后端采用SSH架构,实现数据处理和服务端逻辑,通过JSON格式的数据交换与前端进行交互。 - **实现高级特性**:例如通过AJAX实现异步数据加载,提高系统响应速度;通过ExtJS的表单...

    ssh+extjs4.0grid删除数据

    这里我们关注的是如何在SSH框架下,结合ExtJS 4.0版本的Grid组件实现数据的删除操作。 首先,让我们理解SSH框架。Spring提供了依赖注入和事务管理,Struts处理MVC(模型-视图-控制器)架构,而Hibernate则作为ORM...

    基于SSHI架构的开发平台技术方案

    #### 概述 在现代软件开发领域,基于SSHI架构的开发平台技术方案提供了一种综合性的解决方案,旨在提升开发效率,确保系统的安全性、稳定性与高效性。SSHI通常指代Spring、Struts、Hibernate、Ibatis这四大技术栈,...

    SSH框架jar包整合

    SSH框架即Struts + Spring + Hibernate的组合,是Java Web开发中的经典MVC架构实现。为了确保项目的顺利进行,需要对涉及到的各种jar包进行整合,以避免版本冲突带来的问题。 #### 二、创建项目与添加相关jar包 ##...

    ssh+extjs CRUD

    - 使用JSON格式进行前后端的数据交换,确保数据传输的效率和安全性。 - 构建RESTful API,使前端能够通过HTTP方法(GET、POST、PUT、DELETE)与后端进行交互。 #### 四、总结 SSH+ExtJS的组合为构建企业级应用提供...

    ssh+extjs开发crud--经典

    在《ssh+extjs开发crud--经典》这一主题下,我们深入探讨如何结合SSH框架(即Struts2、Spring、Hibernate)与ExtJS前端框架来实现CRUD操作(即创建、读取、更新、删除)。本文旨在为初学者提供一个全面的学习路径,...

    ssm与ssh的区别

    - **Spring MVC**:内置了对Ajax的支持,通过`@ResponseBody`等注解可以直接返回JSON或XML格式的数据,简化了Ajax开发流程。 - **Struts2**:虽然也支持Ajax,但需要额外配置或使用第三方库来实现,相对复杂。 6....

    ssh2+extjs

    - **实现工具**:本文档中使用了 json-lib 工具库来处理 JSON 数据。 - **下载地址**:[json-lib](http://json-lib.sourceforge.net/)。 #### 三、配置详解 1. **Web.xml 配置** Web.xml 文件是整个 Web 应用...

    qnx 概述文档

    ### QNX Neutrino 实时操作系统概述 #### 一、实时性和微内核特性 **QNX Neutrino**是一款高性能的实时操作系统(RTOS),它以其强大的实时性能力和先进的微内核架构著称。该操作系统的核心优势在于其能够提供高度...

    JAVA+JSP+Servlet+android+SSH视频教程全集+项目视频 亲自总结

    1. **Android概述**:介绍Android操作系统的发展历程、架构组成。 2. **开发环境搭建**:安装Android Studio、配置模拟器。 3. **UI设计**:布局管理器的使用、常用控件的属性设置。 4. **Activity与Intent**:...

    JavaEE源码土地档案管理系统源码数据库sql文档

    - **JSON Binding API**:简化了JSON数据与Java对象之间的转换。 - **JMS 2.0**:提供了更简洁的消息传递API。 - **统一的EL语言**:扩展了表达式语言的功能,使其更加灵活。 - **安全性**:增强了安全性框架,包括...

    这是DBeaver的官方手册

    - **XML和JSON管理**:提供对这两种格式数据的支持与处理能力。 #### 六、数据格式管理 - **虚拟列表达式**:为数据表添加计算字段。 - **属性编辑器**:查看和修改数据库对象的属性。 #### 七、实体关系图 - **ER...

    struts+spring+hibernate

    4. **Controller 控制器**:通过 Struts2 的 Action 类来接收前端请求,并调用 Service 层方法处理请求,最后返回相应的视图或 JSON 数据。 5. **前端交互**:利用 ExtJS 来实现前端页面与后端服务的交互,包括数据...

    案例8:Spring整合Spring MVC与Hibernate + EasyUI实现电子商城后台订单管理.docx

    - `tree_data2.json`:为`ordermanager.jsp`提供的JSON格式的数据源,用于生成系统功能菜单。 - `Easyui`目录:包含使用Easy UI控件所需的js、css等文件。 #### 四、具体实现细节 1. **创建实体类**: - 在`...

Global site tag (gtag.js) - Google Analytics