logo头像

一路过来,不过游牧自己。。

SSM之SpringMVC(六)


在Spring中如何去处理Ajax这种请求呢,可以借鉴以前的思路,一用httpservlet response去处理,还有关于拦截器,SpringMVC也做的很棒!

7、SpringMVC中的ajax处理

(1)使用HttpServletResponse来处理–不需要配置解析器

1
2
3
4
5
6
7
8
@RequestMapping("/ajax")
public void ajax(String name,HttpServletResponse resp) throws IOException{
if("siddy".equals(name)){
resp.getWriter().print("true");
}else{
resp.getWriter().print("false");
}
}

在前台,javascript代码:

1
2
3
4
5
6
7
8
9
10
<script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
<script type="text/javascript">
$(function(){
$('#btn').click(function(){
$.post("ajax.do",{'name':$("#btn").val()},function(data){
$("#content").html(data);
});
});
});
</script>

(2)Springmvc处理json数据

a)导入jar包
jackson-annotations-2.5.4.jar
jackson-core-2.5.4.jar
jackson-databind-2.5.4.jar
b)配置json转换器,没必要记下来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!--  json配置 -->
<!-- 用于将对象转换为 JSON -->
<bean id="stringConverter"
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
<bean id="jsonConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>

<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="stringConverter" />
<ref bean="jsonConverter" />
</list>
</property>
</bean>

c)Controlle代码

1
2
3
4
5
6
7
8
9
10
@RequestMapping("/json.do")
@ResponseBody/*把你的内容相响应成主题内容*/
public List<User> json(){
List<User> list = new ArrayList<User>();
list.add(new User(1,"zhansan",22));
list.add(new User(2,"wangwu",21));
list.add(new User(3,"zhaosi",33));
list.add(new User(4,"wangdana",14));
return list;
}

然后在前台将数据显示处理啊就好
这就非常爽了,想用json,就把他转化成json

8、拦截器

(1)拦截器概念和struts2一致。

拦截我们的请求,处理之后再拦截一遍,处理方式却有不同

(2)实现拦截器

a)实现HandlerInterceptor接口
b)需要配置拦截器

(3)这里我们提出一个问题:如果被拦截-能否到达指定的页面?

使用HttpServletRespons或者HttpServletRequest可以实现转发和重定向

(4)登陆实例

首先我们要写一个登陆实例Controller:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

@Controller
@SessionAttributes("user")
public class LoginController {
@RequestMapping("/login.do")
public String loginUser(String name,ModelMap map){
map.addAttribute("user", name);
return "forward:/WEB-INF/jsp/index.jsp";
}
@RequestMapping("/toLogin.do")
public String toLogin(){
return "forward:/WEB-INF/jsp/login.jsp";
}
@RequestMapping("/hello.do")
public String hello(){
return "forward:/WEB-INF/jsp/hello.jsp";
}
}

然后写过滤器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class LoginInterceptor implements HandlerInterceptor{

/**
* 在请求处理的方法之前执行,如果返回true,那么执行下一个拦截器,
* 如果是false,则不执行下一个拦截器
* */
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp,
Object object) throws Exception {
/**
* 要明确哪些需要被拦截,哪些不需要被拦截
*/
HttpSession session = req.getSession();
if(session.getAttribute("user")!=null)
return true;
String path=req.getRequestURI();
if(path.endsWith("toLogin.do")||path.endsWith("login.do"))
return true;
resp.sendRedirect("toLogin.do");
return false;
}
/**
* 在请求处理的方法执行之后执行
* */
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
// TODO Auto-generated method stub

}
/**
* 在DispacherServlet处理后执行---清理工作
* */
@Override
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {

}


}

这里很多注释都是很有意义的!
然后去写配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- 拦截器的配置 -->
<mvc:interceptors>
<!-- 在 mvc:interceptors中可以配置多个拦截器
多个拦截器按顺序一一执行
-->
<mvc:interceptor>

<mvc:mapping path="/**"/>
<!-- 指定拦截器的位置 -->
<bean class="cn.sxt.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>

</mvc:interceptors>

其中: 指明哪些请求需要被拦截
/login.do 表示login.do需要被拦截
/user/add.do 表示/user/add.do请求要被拦截
/* 表示项目路径下的所有请求被拦截
可以拦截: /login.do /add.do /user.do /sys.do等
/**表示项目路径及其子路径下的所有请求被拦截=所有请求被拦截
可以拦截: /login.do /add.do /user.do /sys.do
/user/add.do

微信打赏

赞赏是不耍流氓的鼓励