Spring MVC 前后台数据交互

服务端数据到客户端
返回页面,Controller中方法返回String,String对应的是view的位置,如果需要携带数据通过model(相当于一个Map)传递到view, view中使用jstl的EL表达式来绑定model带来的数据。
Java代码  
@RequestMapping(value="/getPojoView", method=RequestMethod.GET)  
public String getPojoView(Model model){  
  Pojo pojo = new Pojo();  
  pojo.setPojoName("testName");  
  pojo.setPojoValue("testValue");  
  model.addAttribute(pojo);  
  return"sample/pojoView";  
}  
 
返回Json对象,利用@ResponseBody来实现。
Java代码  
@RequestMapping(value="/getPojoJson", method=RequestMethod.GET)  
public @ResponseBody Pojo getPojoJson(){  
  Pojo pojo = new Pojo();  
  pojo.setPojoName("testName");  
  pojo.setPojoValue("testValue");  
  return pojo;  
}  
  注:spring mvc自动将java对象转化成了json对象传回了客户端,返回对象可以是Pojo也可以是List


直接操作Response自己实现想要的效果。
Java代码  
@RequestMapping(value="/getCustomResponse", method=RequestMethod.GET)  
public void getCustomResponse(HttpServletResponse response){  
  //操作response...  
}  
  注:response为spring根据方法的type类型注入的
客户端数据到服务端
通过URL传回参数:
view
Html代码  
<script type="text/javascript"src="jquery-1.4.min.js"></script>  
<h1>button与链接效果一致</h1>  
<a href="simple?name=text&age=28">simple</a><button οnclick="simple()">simple</button><br/>  
<script type="text/javascript">  
function simple(){  
  $.getJSON("simple",{"name":"nameJsonTest","age":"100"},function(){});  
}  
</script>  
<a href="list?names[]=aaaa&names[]=bbbb">list</a><button οnclick="list()">list</button><br/>  
<script type="text/javascript">  
function list(){  
  $.getJSON("list",{"names":["name1","name2","name3"]},function(){});  
}  
</script>  
<a href="pojo?pojo[pojoName]=hahaha&pojo[pojoValue]=kkkkkk">pojo</a><button οnclick="pojo()">pojo</button><br/>  
<script type="text/javascript">  
function pojo(){  
  $.getJSON("pojo",{"pojo":{"pojoName":"testName","pojoValue":"testValue"}},function(){});  
}  
</script>  
<a href="rest/10/2">rest</a><button οnclick="rest()">rest</button><br/>  
<script type="text/javascript">  
function rest(){  
  var pageSize = 20;  
  var pageNo = 3;  
  $.getJSON("rest/"+pageSize+"/"+pageNo,{},function(){});  
}  
</script>   
controller
Java代码  
package sample;  
  
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.PathVariable;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RequestMethod;  
import org.springframework.web.bind.annotation.RequestParam;  
  
@Controller  
@RequestMapping(value="/urlparam")  
public class UrlParamController {  
  @RequestMapping(value="/", method=RequestMethod.GET)  
  public String index(){  
    return"urlparam/index";  
  }  
   
  @RequestMapping(value="/simple", method=RequestMethod.GET)  
  public void simple(@RequestParam String name, @RequestParam Integer age){  
    System.out.println("name:"+name);  
    System.out.println("age:"+age);  
  }  
  
  //list内不能放POJO对象  
  @RequestMapping(value="/list", method=RequestMethod.GET)  
  public void list(@RequestParam("names[]") String[] names){   
  //也可以用List<String> names来接收  
  for(String name : names){  
    System.out.println("name:"+name);  
  }  
}  
  
  //单URL目前还不支持POJO对象,只能支持键值对,希望spring以后有所改善  
  @RequestMapping(value="/pojo", method=RequestMethod.GET)  
  public void pojo(@RequestParam("pojo[pojoName]") String name, @RequestParam("pojo[pojoValue]") String value){  
    System.out.println("name:"+name);  
    System.out.println("value:"+value);  
  }  
  
  @RequestMapping(value="/rest/{pageSize}/{pageNo}", method=RequestMethod.GET)  
  public void rest(@PathVariable Integer pageSize, @PathVariable Integer pageNo){  
    System.out.println("pageSize:"+pageSize);  
    System.out.println("pageNo:"+pageNo);  
  }  
}   

通过POST表单传回参数:
方式同与url的是一致的,需要将method=RequestMethod.POST,不过有中文的话一般都用post来避免转码。一般ajax的时候用$.post而不能使用jQuery插件json的$.postJSON。下面会讲到。

 通过使用jQuery插件json的$.postJSON传回参数:
$.postJSON返回的是:application/json,
$.post返回的是: application/x-www-form-urlencoded
spring会将postJSON传回的json字符串转换成对象再将对象丢给带有@RequestBody的形参。 由于json字符串直接转换为对象,所以@RequestBody只能接收一个对象还需要属性一一对应,不能多传参数。此方式可以传POJO,也可以传List<POJO>。
Js代码  
$.postJSON('url', {"name":"testName","age":"28"},function(){});  
Java代码  
<span style="font-family: Arial,Arial,Helvetica,sans-serif; font-size: 18px; white-space: normal;"><span style="font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 12px; white-space: pre;">class Pojo{  
</span></span>  private Long id;  
  private String name;  
  private Integer age;  
  //get,set...  
}  
Java代码  
@RequestMapping(value="pojo", method=RequestMethod.POST)  
publicvoid sentPojo(@RequestBody Pojo pojo){  
  System.out.println(pojo.getPojoName());  
  System.out.println(pojo.getPojoValue());  
}  
  注:目前对于一对象,附带几个简单参数的解决办法是将简单参数通过为REST的url路径参数来传送。

 直接拿到Request来操作:
Java代码  
@RequestMapping(value="/", method=RequestMethod.GET)  
  public String withRequest(HttpServletRequest request){  
     //操作request...  
   return"someview";  
}  
 
以上controller内的方法的形参, 除了@RequestBody和@RequestParam不能同时声明外,都可以进行组合来满足各种需求。
小结:spring mvc3充分利用了annotation的好处将参数传递过程中的转换全部变为了透明,这样省去了程序员对参数进行一些无聊的转换,这肯定能提高不少效 率。另一方面想说的是spring的@RequestBody还可以做的更好,如果能允许多个对象同时传送,那这个东西就十分好了。
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在使用MyEclipse进行Spring Struts2 Hibernate开发过程中,可以按照以下步骤进行前后台的添加。 首先,对于后台开发,需要配置Hibernate的相关环境。可以在MyEclipse中创建一个新的Java项目,然后在项目中添加相关的Hibernate库文件,包括Hibernate的核心库、连接池库和数据库驱动库。接着,在项目中创建一个Hibernate配置文件,配置数据库连接等相关信息。然后,创建实体类对应数据库表中的字段,并使用注解或XML文件进行映射。接下来,在DAO层中创建与数据库交互的方法,并使用Hibernate相关API进行数据库操作。 对于前台开发,可以使用Spring MVC和Struts2来进行。首先,需要在项目中添加相关的Spring和Struts2的库文件。然后,在Spring配置文件(如applicationContext.xml)中配置Spring MVC的相关信息,如视图解析器、控制器等。接着,在项目中创建Controller类,使用注解或XML文件进行映射URL与方法的关系,并在方法中实现相应的业务逻辑。同时,可以创建对应的JSP页面,用于展示数据或与用户交互。 在整个开发过程中,可以使用MyEclipse提供的快速开发工具来简化代码编写和调试,如自动生成实体类、自动生成Controller类等。此外,MyEclipse还提供了集成的调试工具,可以方便地进行代码调试和错误排查。 总结起来,使用MyEclipse进行Spring Struts2 Hibernate开发的前后台教学,需要进行环境配置、实体类的定义与映射、配置文件的编写、业务逻辑的实现以及页面的设计与交互等步骤。通过合理利用MyEclipse的功能,可以提高开发效率和代码质量,实现前后台数据的交互和展示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值