SpringMVC异常处理及Ajax异步处理

1. SpringMVC异常处理

当我们在执行程序的时候,会出现异常抛出情况,需要我们将异常跳转到制定的网页下,而不是令网页宕机。

首先我们可以配置一个RequestMapping(“/handlerEx”)

public String handlerException(IntegerdataIndex)throws Exception{

String[] stus =new String[]{"小强1","小强2","小强3","小强4","小强5"};

if(dataIndex>=0&&dataIndex<=4){

System.out.println("---->"+stus[dataIndex]);

}else{

System.out.println("出现了异常");

throw new NotEnoughMoney("您输入的信息有误");

}

return "/exTest/success";

}

异常是自己手写的一个异常

package mvc.data.exTest.service;

 

public class NotEnoughMoneyextends RuntimeException{

 

/**

 *

 */

private static final long serialVersionUID = 6761680430463600991L;

 

public NotEnoughMoney() {

super();

// TODO Auto-generated constructor stub

}

 

public NotEnoughMoney(Stringmessage, Throwablecause,boolean enableSuppression,boolean writableStackTrace) {

super(message,cause,enableSuppression,writableStackTrace);

// TODO Auto-generated constructor stub

}

 

public NotEnoughMoney(Stringmessage, Throwablecause) {

super(message,cause);

// TODO Auto-generated constructor stub

}

 

public NotEnoughMoney(Stringmessage) {

super(message);

// TODO Auto-generated constructor stub

}

 

public NotEnoughMoney(Throwablecause) {

super(cause);

// TODO Auto-generated constructor stub

}

 

}

当我们向该网址传入的dataIndex属性值不在区间内时就会报错宕机,为了不使宕机出现。我们需要配置一个ExTestHandlerExceptionResolver类,这个类实现的是HandlerExceptionResolver接口

package mvc.data.exTest.exception;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.springframework.web.servlet.HandlerExceptionResolver;

import org.springframework.web.servlet.ModelAndView;

 

public class ExtestHandlerExceptionResolver implements HandlerExceptionResolver{

 

public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,

Exception ex) {

ModelAndView mav = new ModelAndView("/exTest/error");

mav.addObject("errorData", ex);

return mav;

}

 

}

这个类需要配置到上下文文件内,这个上下文文件应该为在web.xml文件内配置的DispatcherServlet的param-value属性内对应的classpath值.从执行过程中可以看出,如果出现异常,系统则会调用HandlerExceptionResolver的实现类对这些异常进行处理,返回一个ModelAndView对象,将所需要的jsp文件返回给服务器进行解析。

2. AJax的异步处理

之前在研究ajax实现异步操作时,通过访问servlet的形式,可以采用SpringMVC对ajax的封装实现代码的简化。

首先实现的是原始的ajax

Jsp页面上的代码如下

function sendJsonData(){

//var param='{"stuName":"小强","stuNo":"123456","age":19}';

var param ='456';

$.post("${ctx}/jsonData.action",{"stuName":"小强","stuNo":"123456","age":19},function(data){

alert(param);

alert(data.age+"<----->"+data.stuName);

},"json")

}

对应的Controller层的代码如下

@RequestMapping("/jsonData")

public void jsonRequest(HttpServletResponseresponse,HttpServletRequestrequest)throws Exception{

String stuName =request.getParameter("stuName");

System.out.println(stuName);

response.setCharacterEncoding("UTF-8");

Student stu =new Student("小明","123456",19);

System.out.println(stu);

String json =new Gson().toJson(stu);

response.getWriter().write(json);

}

原始的ajax异步请求需要HttpServletResponse提供的getWriter方法.

现将java格式的对象转化为json格式的对象,通过流的形式将转化成的json格式的对象反馈给对应的function中

如果使用SpringMVC对ajax的封装,可以省去很多的代码

Jsp页面上的代码如下

 

function sendJsonData01(){

var param='{"stuName":"小强","stuNo":"123456","age":19}';

$.ajax({

/**

1.url:访问路径

2.data:传递的数据

3.contentType:传递的数据格式

4.dataType:接受的数据类型的格式

5.type:传值的方式

6.success:传值成功之后执行的函

 

*/

url : "${ctx}/mvcJsonData.action",

data : param,

contentType : "application/json;charset=UTF-8",

type:"post",

dataType : "json",

success  : function(data){

alert(data.stuName);

}});

}

对应的Controller层的代码如下

@RequestMapping("/mvcJsonData")

@ResponseBody

public Student mvcJsonData(@RequestBody Studentstus){

System.out.println(stus);

Student stu =new Student("小明","123456",19);

return stu;

}

这样就实现了自动封装,省去了很多代码,由SpringMVC将功能进行实现,其中RequestBody是将传入的json格式的数据转化为java格式的数据(Student stus),而ResponseBody是将java格式的数据自动转化为了json格式的数据,相当于这样的两行代码

String json = new Gson().toJson(stu);

response.getWriter().write(json);

你可能感兴趣的:(spring)