数据处理及跳转
1. 结果跳转方式
①.ModelAndView
设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 .
<bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/html/" />
<property name="suffix" value=".html" />
<property name="templateMode" value="HTML5"/>
</bean>
对应的controller类
/**
* 返回ModelAndView对象的方式
* @return
*/
@RequestMapping("/save3")
public ModelAndView save3(){
System.out.println("执行了...");
// 创建mv对象
ModelAndView mv = new ModelAndView();
// 把一些数据,存储到mv对象中
mv.addObject("msg","用户名或者密码已经存在");
// 设置逻辑视图的名称
mv.setViewName("suc");
return mv;
}
②.ServletAPI
通过设置ServletAPI , 不需要视图解析器 .
1、通过HttpServletResponse进行输出
2、通过HttpServletResponse实现重定向
3、通过HttpServletResponse实现转发
@Controller
@RequestMapping(path = "/role") // 一级请求路径
public class RoleController {
@RequestMapping("/t1")
public void test1(HttpServletRequest req, HttpServletResponse rsp) throws IOException {
rsp.getWriter().println("Hello,Spring BY servlet API");
}
@RequestMapping("/t2")
public void test2(HttpServletRequest req, HttpServletResponse rsp) throws IOException {
rsp.sendRedirect("/SpringMVCDemo/html/suc.html");
}
@RequestMapping("/t3")
public void test3(HttpServletRequest req, HttpServletResponse rsp) throws Exception {
//转发
req.setAttribute("msg","hello");
req.getRequestDispatcher("/html/suc.html").forward(req,rsp);
}
}
③.SpringMVC
通过SpringMVC来实现转发和重定向 - 无需视图解析器;
测试前,需要将视图解析器注释掉
@Controller
@RequestMapping(path = "/role") // 一级请求路径
public class RoleController {
@RequestMapping("/t1")
public String test1(){
//转发
return "/html/suc.html";
}
@RequestMapping("/t2")
public String test2(){
//转发二
return "forward:/html/suc.html";
}
@RequestMapping("/t3")
public String test3(){
//重定向
return "redirect:/html/suc.html";
}
}
2.ResponseBody响应json数据
json和JavaBean对象互相转换的过程中,需要使用jackson的jar包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置
标签配置不过滤
- location元素表示webapp目录下的包下的所有文件
- mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b
<!--设置静态资源不过滤-->
<mvc:resources mapping="/css/**" location="/css/"/> <!--样式-->
<mvc:resources mapping="/images/**" location="/images/"/> <!--图片-->
<mvc:resources mapping="/js/**" location="/js/"/> <!--javascript-->
html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script>
// 页面加载
$(function(){
// 单击事件
$("#btn").click(function(){
// 发送ajax的请求
$.ajax({
type: "post",
url: "/SpringMVCDemo/user/save6",
data:{username:"haha",age:"20"},
success:function(d){
// 编写很多代码
alert(d.username+" ‐ "+d.age);
}
});
});
});
</script>
</head>
<body>
<h3>异步的数据交互</h3>
<input type="button" value="ajax交互" id="btn">
</body>
</html>
controller
/**
* 异步的数据交互
* 重定向
* @return
*/
@RequestMapping("/save6")
public @ResponseBody User save6(User user){
System.out.println(user);
// 模拟,调用业务层代码
user.setUsername("hello");
user.setAge(100);
// 把user对象转换成json,字符串,再响应。使用@ResposeBody注解 response.getWriter().print()
return user;
}
在springMVC当中如果要实现页面跳转就不要使用ajax,如果要json数据的返回就用ajax