SSH返回Json格式的数据

http://download.csdn.net/download/zyw_java/7101821


http://www.poluoluo.com/jzxy/201402/261573.html


  在开发中我们经常遇到客户端和后台数据的交互,使用比较多的就是json格式了。在这里以简单的Demo总结两种ssh返回Json格式的数据

项目目录如下

 

主要是看 上图选择的部分 WebRoot里面就是平常的配置

第一种方法是使用com.google.gson.Gson 将对象转化为Json字符串  (gson-1.6.jar) 主要的代码如下

复制代码
 1 package com.javen.tool;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.http.HttpServletResponse;
 7 
 8 import com.google.gson.Gson;
 9 
10 public class ResultUtils {
11     public static void toJson(HttpServletResponse response, Object data) 
12         throws IOException {
13         Gson gson = new Gson();
14         String result = gson.toJson(data);
15         response.setContentType("text/json; charset=utf-8");
16         response.setHeader("Cache-Control", "no-cache"); //取消浏览器缓存
17         PrintWriter out = response.getWriter();
18         out.print(result);
19         out.flush();
20         out.close();
21     }
22 
23   
24 }
复制代码

在Action中我们直接将返回的数据封装成Map对象即可 再使用上面的工具类即可 

 

复制代码
 1 public String execute() {
 2         Map<String, Object> map = new HashMap<String, Object>();
 3         String status = null;
 4         try {
 5             System.out.println(name + "" + pass);
 6             if (!Tools.isEmpty(name) && !Tools.isEmpty(pass)) {
 7                 User user = new User();
 8                 user.setName(name);
 9                 user.setPassword(pass);
10                 List<User> list = userHander.getUserDAO().findByExample(user);
11                 System.out.println(list.size());
12                 if (list.size() > 0) {
13                     status = "1";
14                     map.put("users", list);
15                 } else {
16                     status = "null";
17                 }
18             } else {
19                 status = "0";
20             }
21             map.put("status", status);
22             ResultUtils.toJson(ServletActionContext.getResponse(), map);
23         } catch (IOException e) {
24             // TODO Auto-generated catch block
25             e.printStackTrace();
26         }
27         return null;
28     }
复制代码

  struts 配置如下 

复制代码
1 <package name="default" extends="struts-default"  namespace="/">
2         <global-results>
3             <result name="error">/Error.jsp</result>
4         </global-results>
5         
6         <action name="userAction" class="userAction">
7         </action>    
8 </package>
复制代码

通过浏览器访问返回的数据如下(http://127.0.0.1:8080/DataJson/userAction?name=javen&pass=123)

 

 

 

第一种方法是使用Struts配置实现 将对象转化为Json字符串   主要的代码如下

1、private Map<String, Object> jsonResult; 将声明的对象封装生成get和set方法

2、封装查询的数据到Map集合中 代码如下

复制代码
 1 public String userToJson(){
 2         Map<String, Object> map = new HashMap<String, Object>();
 3         String status = null;
 4         try {
 5             System.out.println(name + "" + pass);
 6             if (!Tools.isEmpty(name) && !Tools.isEmpty(pass)){
 7                 User user = new User();
 8                 user.setName(name);
 9                 user.setPassword(pass);
10                 List<User> list = userHander.getUserDAO().findByExample(user);
11                 System.out.println(list.size());
12                 if (list.size() > 0) {
13                     status = "1";
14                     map.put("users", list);
15                 } else {
16                     status = "null";
17                 }
18             } else {
19                 status = "0";
20             }
21             map.put("status", status);
22             jsonResult=map;
23             return "success";
24         } catch (Exception e) {
25             // TODO Auto-generated catch block
26             e.printStackTrace();
27         }
28         return null;
29     }
复制代码

3、配置struts  (注意要extends >>>json-default

复制代码
<!-- 使用struts2  配置来实现 返回Json数据 -->
    <package name="json" extends="struts-default,json-default"  namespace="/">
        <global-results>
            <result name="error">/Error.jsp</result>
        </global-results>
        <action name="userjson" class="userAction" method="userToJson"> 
            <result type="json" >  
                   <param name="root">jsonResult</param>  
            </result>  
        </action>
        
    </package>
复制代码

 通过浏览器访问返回的数据如下 

源码下载地址 http://download.csdn.net/detail/zyw_java/7101821

-----------------------------



<SCRIPT type=text/javascript>
        $(function () {
            //隐藏母板页的tab搜索标签
            $("#searchBar").html("");
            $("#searchBar").css("background-color","white");
            
            $(".search_btn_vv").click(function(){
                var keywords = $("#ctl00_CPH1_txtKeyWords").val();
                if(keywords == '请输入关键字' || keywords == ""){
                    alert('请输入关键字');
                }
                else{
                    turnToSubSearchPage($(".text1").attr("name"));
                    //searchClick('search.aspx');
                }
            });
            
            // 文档框输入后按Enter自动搜索
            $("#ctl00_CPH1_txtKeyWords").keydown(function(){
                if (event.keyCode == 13) {           
                    event.returnValue = false;
                    $(".search_btn_vv").click();
                    return false;
                } 
            });
            
            //将footer置底
            $("#footer").attr("style",'position: fixed; bottom: 0px');






//By COoL 


//定义全局变量用于储存提示层 
var liketips; 


//监听改动或得到焦点事件 


//禁用chrome和firefox浏览器自带的自动提示 
$('.getsearchjson').attr("autocomplete","off"); 
$('.getsearchjson').bind("propertychange input focus",function(event){ 
    $this=$(this); 
    if(event.type!='focus'){ 
        //如果有改变,则状态定为必须重新选择,因为纯人手输入会导致value无法插入 
        $this.data('ok',false); 
    } 


    //获取input框位置并计算提示层应出现的位置 
    var top=1*$this.offset().top+25; 
    var left=1*$this.offset().left; 
    var width=1*$this.width()+12; 


    //重建储存提示层并让其在适当位置显示 
    $(liketips).remove(); 
    liketips=document.createElement('div'); 
    $liketips=$(liketips); 
    //class样式这里不提供,最主要是position:absolute 
    $liketips.addClass("liketips"); 
    $liketips.css({top:top+'px',left:left+'px',width:width+'px'}); 


    //加载前先显示loading动态图 
    $liketips.append('<img src="/images/loading.gif" border="0" />'); 
    $liketips.appendTo($this.parent()); 
    $liketips.show(); 


    //定义ajax去获取json,type参数通过data-type设置,keyword则是目前已输入的值 
    //返回值以table形式展示 
    
    $.post('/data/search.do',{type:$this.data('type'),keyword:$this.val()},function(json){ 
     
        $liketips.empty(); 
        var htmlcode="<table cellspacing='0' cellpadding='2'><tbody>"; 
        for(var i=0;i<json.datas.length;i++){ 
            //这里我需要用到value和title两项,所以用data-value传递多一个参数,在回车或鼠标点击后赋值到相应的地方,以此完美地替代select 
            htmlcode+='<tr data-value="'+json.datas[i][0]+'"><td>'+json.datas[i][1]+'</td></tr>'; 
        } 
        htmlcode+="</tbody></table><span>请务必在此下拉框中选择</span>"; 
        //把loading动态图替换成内容 
        $liketips.html(htmlcode); 
    },"json"); 
}); 


//焦点消失时确保数据来自选项,隐藏提示框体 
$('.getsearchjson').blur(function(){ 
    //因为鼠标点击时blur动作结算在click之前,setTimeout是为了解决这个问题 
    $oldthis=$(this); 
    setTimeout(function(){ 
        // if($oldthis.data('ok')) 
            $(liketips).fadeOut('fast'); 
        // else{ 
        //     alert('为保证数据准确性,请务必在下拉提示中选择一项,谢谢合作'); 
        //     $oldthis.focus(); 
        // } 
    },200); 
}); 


//监听键盘动作 
$('.getsearchjson').keydown(function(event){ 
    //console.log(event.keyCode); 
    $this=$(this); 
    if(event.keyCode==40){ 
        //按键是向下 
        $nowtr=$('tr.selectedtr'); 
        //如果已存在选中,则向下,否则,选中选单中第一个 
        if($nowtr.length>0){ 
            $nexttr=$nowtr.next('tr') 
            //如果不是最后选项,向下个tr移动,否则跳到第一个tr 
            if($nexttr.length>0){ 
                $('tr.selectedtr').removeClass(); 
                $nexttr.addClass('selectedtr'); 
            } 
            else{ 
                $('tr.selectedtr').removeClass(); 
                $nowtr.parent().find('tr:first').addClass('selectedtr'); 
            } 
        } 
        else{ 
            $('.liketips').find('tr:first').addClass('selectedtr'); 
        } 
    } 
    else if(event.keyCode==38){ 
        //按键是向上 
        $nowtr=$('tr.selectedtr'); 
        //如果已存在选中,则向下,否则,选中选单中第一个 
        if($nowtr.length>0){ 
            $prevtr=$nowtr.prev('tr') 
            //如果不是最后选项,向下个tr移动,否则跳到第一个tr 
            if($prevtr.length>0){ 
                $('tr.selectedtr').removeClass(); 
                $prevtr.addClass('selectedtr'); 
            } 
            else{ 
                $('tr.selectedtr').removeClass(); 
                $nowtr.parent().find('tr:last').addClass('selectedtr'); 
            } 
        } 
        else{ 
            $('.liketips').find('tr:last').addClass('selectedtr'); 
        } 
    } 
    else if(event.keyCode==13){ 
        //按键是回车,则确定返回并隐藏选框 
        $nowtr=$('tr.selectedtr'); 
        if($nowtr.length==1){ 
            //设置value值到input框通过参数data-valueto配置的value值存储项中去,一般是hidden项 
            $valuefield=$('input[name='+$this.data('valueto')+']'); 
            $valuefield.val($nowtr.data('value')); 
            $this.val($nowtr.text()); 
            //设置状态是从选项中选择,允许blur 
            $this.data('ok',true); 
        } 
        $(liketips).fadeOut('fast'); 
        return false; 
    } 
    //console.log(event.keyCode); 
    return true; 
}); 


//监听鼠标动作,mouseover改变选中项 
$(document).delegate('.liketips td','mouseover',function(){ 
    $nowtr=$(this).parent(); 
    $nowtr.siblings('tr').removeClass(); 
    $nowtr.addClass('selectedtr'); 
}); 


//监听鼠标动作,click选定 
$(document).delegate('.liketips td','click',function(){ 
    $nowtr=$(this).parent(); 
    if($nowtr.length==1){ 
        //取得该提示层对应的input框 
        $inputfield=$nowtr.parent().parent().parent().siblings('input.getsearchjson'); 


        //设置value值到input框通过参数data-valueto配置的value值存储项中去,一般是hidden项 
        $valuefield=$('input[name='+$inputfield.data('valueto')+']'); 
        $valuefield.val($nowtr.data('value')); 
        $inputfield.val($nowtr.text()); 
        //设置状态是从选项中选择,允许blur 
        $inputfield.data('ok',true); 
    } 
    $(liketips).fadeOut('fast'); 
});






        });
    </SCRIPT>


<DIV class=content>
<DIV class=contentLogo></DIV>
<DIV class=searchList>


<DIV class=ser_bar>
<DIV class=ser_txt_vv>
<INPUT οnblur="if(this.value==''){this.value='请输入关键字';this.style.color='#999'}" 
style="COLOR: #999" id=ctl00_CPH1_txtKeyWords88  class="ser_input_vv88  getsearchjson"
οnfοcus="if(this.value=='请输入关键字'){this.value='';this.style.color='#000'}" 
value=请输入关键字 name=ctl00$CPH1$txtKeyWords> </DIV>


<DIV class=ser_img_vv><INPUT id=ctl00_CPH1_searchBtn class=search_btn_vv value=易搜 type=button> 
</DIV></DIV></DIV></DIV></DIV></DIV>


</DIV>


</FORM>


</BODY></HTML>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值