使用Struts2,但仅仅想返回json数据的方法

来源:互联网 发布:淘宝推广教程视频 编辑:程序博客网 时间:2024/05/17 09:11

按照常用的方法是将数据封装在结果中,然后使用setter和getter方法,再在struts.xml配置中设置相应的名字,设置返回结果为json。

感觉这样有些麻烦,还要引入json-default jar包,而且不美观,下面有一种可行的方法供大家参考

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.i18n.encoding" value="UTF-8"/>   <constant name="struts.devMode" value="true" />   <constant name="struts.action.extension" value="htm" />   <package name="userEssay" namespace="/UserEssay" extends="struts-default">        <action name="saveEssay" class="com.buryanddig.action.UserEssayAction" method="saveUserEssay">        </action>    </package></struts>

这里没有了result配置,因为在action做了处理

import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import java.util.HashMap;import org.jboss.logging.Logger;import com.buryanddig.provider.ServiceProvider;import com.buryanddig.service.UserEssayService;import com.buryanddig.service.impl.UserEssayServiceImpl;import com.buryanddig.user.entity.UserEssay;import com.buryanddig.util.RequestUtil;import com.google.gson.Gson;public class UserEssayAction extends BaseAction{/** *  */private static final long serialVersionUID = 1L;private Logger log = Logger.getLogger(UserEssayAction.class);//自定义的从IOC容器中获取beanprivate UserEssayService userEssayService=(UserEssayService) ServiceProvider.getService(UserEssayService.SERVICE_NAME);private UserEssay userEssay;public void saveUserEssay() throws IOException {HashMap<String,Object> maps=new HashMap<String,Object>();//从链接中获取参数String ueEssay=RequestUtil.getString(request, "ueEssay");String ueRemark=RequestUtil.getString(request, "ueRemark");userEssay=new UserEssay();userEssay.setUeEssay(ueEssay);if(ueRemark!=null) {userEssay.setUeRemark(ueRemark);}Integer id=(int) (Math.random()*1000);userEssay.setUeId("testAction"+id.toString());userEssay.setUeUserId("testActionuserid");userEssay.setUeCreateTime(new Date());userEssayService.saveUserEssay(userEssay);maps.put("userEssay", userEssay);String json = new Gson().toJson(maps);PrintWriter writer = response.getWriter();writer.write(json);writer.flush();writer.close();}}

下面是ajax访问例子:

$.ajax({    url:'buryanddig/UserEssay/saveEssay.htm',    type:'POST', //GET    async:true,    //或false,是否异步    data:params,//封装的参数    timeout:3000,    //超时时间    dataType:'json',    //返回的数据格式:json/xml/html/script/jsonp/text    success:function(data){console.log(data);    },    error:function(){       },});



打印的数据为返回的map的json字符串,如下:


这里就可以使用(.),比如data.userEssay进行数据的访问了


竟然漏了BaseAction的代码。。

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class BaseAction extends ActionSupport implements ServletRequestAware,ServletResponseAware {@SuppressWarnings("unused")protected HttpServletRequest request = null;@SuppressWarnings("unused")protected HttpServletResponse response = null;public void setServletRequest(HttpServletRequest request) {this.request = request;}public void setServletResponse(HttpServletResponse response) {this.response = response;}}


可能有的同学就会疑惑了,action还有Printwriter这种操作?

我们回想一下,那时天空还是湛蓝的,夜里的时候还可以看到漫天的星星。那时还没有struts的时候,我们是怎样完成java服务端和客户端的信息交互的?没错,就是servlet,我们使用servlet返回信息,而那个输出用的正是这个Printwriter,而action本质就是servlet啊。这样一想,是不是就想通了。。

原创粉丝点击