基于springMVC 3.0项目开发实例(八)

2014-11-23 19:17:51 · 作者: · 浏览: 276

"pragma"content= "no-cache">

"cache-control"content= "no-cache">

"expires"content= "0">

"keywords"content= "keyword1,keyword2,keyword3">

"description"content= "This is my page">

<script>

function createAjaxObj(){

var req;

if(window.XMLHttpRequest){

req = new XMLHttpRequest();

}else{

req = new ActiveXObject("Msxml2.XMLHTTP"); //ie

}

return req;

}

function sendAjaxReq(){

var req = createAjaxObj();

req.open("get","myajax.do method=test2&uname=张三");

req.setRequestHeader("accept","application/json");

req.onreadystatechange =function(){

eva l("var result="+req.responseText);

document.getElementById("div1").innerHTML=result[0].uname;

}

req.send(null);

}

"java script:void(0);"onclick="sendAjaxReq();">测试

"div1">

4. 服务器端代码如下:

package com.sxt.web;

import java.io.UnsupportedEncodingException;

import java.util.ArrayList;

import java.util.List;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

import com.sxt.po.User;

@Controller

@RequestMapping("myajax.do")

public class MyAjaxController {

@RequestMapping(params="method=test1",method=RequestMethod.GET)

public @ResponseBody List test1(String uname) throws Exception{

String uname2 = new String(uname.getBytes("iso8859-1"),"gbk");

System.out.println(uname2);

System.out.println("MyAjaxController.test1()");

List list = new ArrayList ();

list.add(new User("高淇","123"));

list.add(new User("马士兵","456"));

return list;

}

}

5. 测试。

a) 启动服务器。输入:http://localhost:8080/springmvc03/a.jsp

Spring中的拦截器

定义spring拦截器两种基本方式

1. 实现接口:org.springframework.web.servlet.HandlerInterceptor。

接口中有如下方法需要重写:

注意:参数中的Object handler是下一个拦截器。

a) publicboolean preHandle
(HttpServletRequest request,HttpServletResponse response,
Object handler) throws Exception

该方法在action执行前执行,可以实现对数据的预处理,比如:编码、安全控制等。

如果方法返回true,则继续执行action。

b) publicvoid postHandle
(HttpServletRequest request,HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception

该方法在action执行后,生成视图前执行。在这里,我们有机会修改视图层数据。

c) publicvoid afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) throws Exception

最后执行,通常用于释放资源,处理异常。我们可以根据ex是否为空,来进行相关的异常处理。因为我们在平时处理异常时,都是从底层向上抛出异常,最后到了spring框架从而到了这个方法中。

2. 继承适配器:
org.springframework.web.servlet.handler.HandlerInterceptorAdapter

这个适配器实现了HandlerInterceptor接口。提供了这个接口中所有方法的空实现。

如下我们写出两个拦截器的示例代码,仅供大家参考:

package com.sxt.interceptor;

importjavax.interceptor.Interceptors;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

publicclass MyInterceptorimplements HandlerInterceptor {

@Override

publicvoid afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

System.out.println("最后执行!!!一般用于释放资源!!");

}

@Override

publicvoid postHandle(HttpServletRequest reque