第四讲:Spring MVC 拦截器和Ajax使用
1、拦截器说明:
Spring MVC 中包含了拦截器,这是为了针对特殊的请求。例如,用户的权限验证。
Interceptors类必须实现HandlerInterceptor(org.springframework.web.servlet.HandlerInterceptor)。这个接口定义了三个方法
preHandle(..) 表示在请求之前执行方法;postHandle(..) 表示在请求之后执行方法;afterCompletion(..) 表示请求完成之后执行方法。
方法preHandle(..) 方法的返回值是boolean,你可以通过这个方法继续喝停止程序的执行。当这个方法的返回值是true,表示这个方法将会
执行下去,当返回值是false时,核心控制器DispatccherServlet就会假定拦截器自身带有危险的请求并且不会再执行下去。
案例代码:(java 代码)
public class Interceptor_exam implements HandlerInterceptor {
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("3-------------我是最终拦截器");
}
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
System.out.println("2-------------我只后置拦截器");
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object arg2) throws Exception {
System.out.println("1-------------我是前置拦截器------begin");
String session = (String) request.getSession().getAttribute("userName");//获得保存在session的userName的值
if(session == null){
System.out.println("---用户没有登录---");
response.sendRedirect("http://localhost:8080/SpringMVC_02/failure.jsp");//重定向到指定的错误界面
return false;
}
System.out.println("1-------------我是前置拦截器------end");
return true;
}
}
(配置文件)
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" /><!--拦截所有的请求-->
<bean class="com.liu.interceptor.Interceptor_exam"></bean>
</mvc:interceptor>
</mvc:interceptors>
2、SpringMVC和Ajax的使用
代码示例(java 代码):
@Controller
@RequestMapping("/part5")
public class Controller_Ajax {
//使用ajax只是获得数据,并不需要跳转,刷新界面,所以返回界面是void
@RequestMapping("/showUserList.do")
public void showUserList(String name,PrintWriter out) throws Exception{
System.out.println("接收到的值="+name);
String result = name + ",ajax";
out.write(result);
}
//负责跳转界面
@RequestMapping("/toAjaxList.do")
public String toAjaxList(){
return "showUserList";
}
//将客户端传过来的数据,变化形式,在控制台输出
@RequestMapping("/showNumberList.do")
public void showNumberList(String number,HttpServletResponse response) throws Exception{
response.setCharacterEncoding("UTF-8");//防止乱码问题
String[] s_number = "零,壹,贰,叁,肆,伍,陆,柒,捌,玖".split(",");//字符串数组
for (int i = 0; i < number.length(); i++) {
int n = Integer.parseInt(""+number.charAt(i));
System.out.print(s_number[n]+",");
response.getWriter().write(s_number[n]);
}
System.out.println();
}
@RequestMapping("/showNumberAjax.do")
public String showNumberAjax(){
return "showNumberList";
}
}
(jsp代码):
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>我是首页</title>
<script type="text/javascript" src="js/jquery-1.6.2.js"></script>
<script type="text/javascript">
$(function(){
$("#number").keyup(function(){
$.ajax({
url:"part5/showNumberList.do",
type:"post",
dataType:"text",
data:{
number:$("#number").val()
},
success:function(responseText){
$("#showNumber").html(responseText);
}
});
});
})
</script>
</head>
<body>
<input type="text" id="number" name="number"/>
<div id="showNumber"></div>
</body>
</html>
(结果显示)