目录
本篇文章继续来讲springMVC框架,主要内容是后端表现层向前端返回数据的类型以及结果视图
返回string类型
走视图解析器,通过拼接前缀后缀,返回新的视图,进行页面跳转
@Controller
@RequestMapping("/user")
public class UserController {
/**
* 返回String
* @return
*/
@RequestMapping("/save1.do")
public String save1(){
System.out.println("执行了...");
return "suc";
}
}
返回值是void
如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找JSP页面没有找到。
- 可以利用HttpServletRequest request, HttpServletResponse response实现请求转发,转发到成功页面
- 也可以使用:
response.getWriter().print("hello");
return; //是程序终止的意思
往页面写东西,然后终止程序
@Controller
@RequestMapping("/user") //一级映射目录
public class UserController {
@RequestMapping("/save2.do")
public void save2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("执行了...");
request.getRequestDispatcher("/WEB-INF/pages/suc.jsp").forward(request,response);
// 做出相应的操作
//response.getWriter().print("hello");
//return;
}
}
返回ModelAndView对象的形式
ModelAndView对象是Spring框架提供的一个对象,可以用来调整具体的JSP视图
@Controller
@RequestMapping("/user") //一级映射目录
public class UserController {
@RequestMapping("/save3.do")
public ModelAndView save3(){
System.out.println("返回mv对象的形式执行了...");
ModelAndView mv=new ModelAndView();
mv.setViewName("suc");//设置mv对象名称
mv.addObject("msg", "访问成功!!");//为mv对象携带内容(内容的名字叫 msg)
return mv;
}
}
返回string代替ModelAndView对象的形式
@Controller
@RequestMapping("/user") //一级映射目录
public class UserController {
@RequestMapping("/save4.do")
public String save4(Model model){
System.out.println("返回String代替mv对象的形式执行了...");
model.addAttribute("msg", "返回String代替mv对象的形式执行了...");
return "suc";
}
}
SpringMVC实现请求转发和重定向:(实际最常用)
@RequestMapping("/save5.do")
public String save5(){
System.out.println("SpringMVC实现请求转发...");
//request.getRequestDispatcher("/WEB-INF/pages/suc.jsp").forward(request,response);
return "forward:/pages/suc.jsp";
}
@RequestMapping("/save6.do")
public String save6(){
System.out.println("SpringMVC实现重定向...");
//response.sendRedirect(""); //之前的写法:相应对象实现重定向
return "redirect:/pages/suc.jsp";
}
如何判断转发到suc.jsp页面是请求转发还是重定向?
请求转发是一次请求,url地址栏不发生改变
重定向是两次请求,url地址栏发生改变
@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 location="/css/" mapping="/css/**"/> <!-- 样式 -->
<mvc:resources location="/images/" mapping="/images/**"/> <!-- 图片 -->
<mvc:resources location="/js/" mapping="/js/**"/> <!-- javascript -->
导入js包:
接收前端传递过来的请求体带过来的json数据 用@RequestBody 注解进行接收(注意必须是post请求) 并封装到(自建)实体类里面
如果想也给前端返回一个json数据,那就在方法的返回值类型前面加@ResponseBody 注解
@RequestMapping("/save6.do")
public @ResponseBody User save7(@RequestBody User user){
System.out.println(user);
user.setUsername("hello");
user.setPassword("sdfsdfsdfs");
// 把user对象转换成json,字符串,再响应。使用@ResposeBody注解 response.getWriter().print()
return user;
}
也可以在方法的上面直接加@ResponseBody 注解,如:
@RequestMapping("/save7.do")
@ResponseBody
public User save7(@RequestBody User user){
System.out.println(user);
user.setUsername("hello");
user.setPassword("sdfsdfsdfs");
// 把user对象转换成json,字符串,再响应。使用@ResposeBody注解 response.getWriter().print()
return user;
}
index.jsp 引入js 编写ajax
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
<%--引入jq--%>
<script src="/js/jquery.min.js" type="text/javascript"></script>
<script>
// 页面加载
$(function(){
// 单击事件
$("#btn").click(function(){
// 发送ajax的请求
$.ajax({
type: "post",
url: "/user/save7.do",
contentType:"application/json;charset=UTF-8",
data:'{"username":"haha","password":"544654"}',
dataType: "json",
success:function(d){
// 编写很多代码
alert(d.username+" - "+d.password);
}
});
});
});
</script>
</head>
<body>
<%--超链接--%>
<hr/>
<h3>异步的数据交互</h3>
<input type="button" value="ajax交互" id="btn">
</body>
</html>