SpringMVC响应数据和结果视图
返回值类型
返回值类型是String
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>响应</title>
</head>
<body>
<a href="/user/testString">testString</a>
</body>
</html>
package com.example.Controller;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testString")
public String testString(Model model){
System.out.println("方法执行了");
//模拟从数据库查询user对象。
User user = new User();
user.setUsername("meimei");
user.setPassword("123456");
user.setAge(13);
//model对象
model.addAttribute("user_test",user);
return "success";
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>成功</h3>
${user_test.username}
${user_test.password}
${user_test.age}
</body>
</html>
返回值是void
package com.example.Controller;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//返回值为空时,默认请求的是请求路径名称的jsp文件。此方法请求的是/pages/testVoid.jsp
System.out.println("testvoid方法执行");
//如果不使用默认,手动添加请求转发,手动转发不触发视图解析器。
//请求转发是一次请求,不用编写项目名称。
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
//重定向的写法,两次请求
response.sendRedirect(request.getContextPath()+"/index.jsp");
//设置中文乱码
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
//直接进行响应
response.getWriter().print("Hello");
return;
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>响应</title>
</head>
<body>
<a href="/user/testVoid">testVoid</a>
</body>
</html>
返回值为ModelAndView
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>响应</title>
</head>
<body>
<a href="/user/testModelAndView">testModelAndView</a>
</body>
</html>
package com.example.Controller;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
ModelAndView modelAndView= new ModelAndView();
//模拟从数据库查询user对象。
User user = new User();
user.setUsername("meimei");
user.setPassword("123456");
user.setAge(13);
//把user对象存储到modelAndView对象中,也会把user存储到request对象中。
modelAndView.addObject("user",user);
//跳转到页面,采用视图解析器的方式。
modelAndView.setViewName("success");
return modelAndView;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>成功</h3>
${user.password}
${user.username}
</body>
</html>
spring中重定向redirect不能访问/WEB-INF下的资源,这样写会报404。
forward和redirect关键字页面跳转
package com.example.Controller;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testForwardOrRedirect")
public String testForwardOrRedirect(){
System.out.println("testForwardOrRedirect执行了");
//请求的转发
return "foward:/WEB-INF/pages/success.jsp";
//重定向 底层加入了项目名
//return "redorect:/index.jsp";
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>响应</title>
</head>
<body>
<a href="/user/testForwardOrRedirect">testForwardOrRedirect</a>
</body>
</html>
@ResponseBody响应json数据
资源拦截问题的处理
DispatcherServlet会拦截所有的资源,导致一个问题就是静态资源(img,css,js)也会被拦截,从而导致不能使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件中添加配置。
<url-pattern>/*</url-pattern>会拦截JSP,静态文件,不拦截Servlet,拦截陌生URL
<url-pattern>/</url-pattern>拦截静态文件,不拦截JSP和Servlet,拦截陌生URL,springMVC默认采用该模式。
<!--告诉前端控制器哪些静态资源不拦截 location指本地文件夹-->
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/images/**" location="/images/"/>
在java中使用json数据时,需要导入jar包:
jackson-databind,jackson-annotations,jackson-core
使用ajax发送数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>响应</title>
<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.4.2/jquery.min.js"></script>
<script>
$(function (){
$("#btn").click(function (){
//发送ajax请求
$.ajax({
//json格式数据设置属性和值
url:"/user/testAjax",
contentType:"application/json;charset=UTF-8",
data:'{"username":"hehe","password":"123","age":12}',
dataType:"json",
type:"post",
success:function (data){//data是服务器响应的数据,进行解析
}
});
});
});
</script>
</head>
<body>
<button id="btn">发送ajax请求</button>
</body>
</html>
package com.example.Controller;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testAjax")
public void testAjax(@RequestBody String body){
System.out.println(body);
}
}
@ResponseBody响应数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>响应</title>
<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.4.2/jquery.min.js"></script>
<script>
$(function (){
$("#btn").click(function (){
//发送ajax请求
$.ajax({
//json格式数据设置属性和值
url:"/user/testAjax",
contentType:"application/json;charset=UTF-8",
data:'{"username":"hehe","password":"123","age":12}',
dataType:"json",
type:"post",
success:function (data){//data是服务器响应的数据,进行解析
alert(data);
alert(data.username);
alert(data.password);
}
});
});
});
</script>
</head>
<body>
<button id="btn">发送ajax请求</button>
</body>
</html>
package com.example.Controller;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testAjax")
@ResponseBody
public User testAjax(@RequestBody User user){
//客户端发送ajax请求,传的是json字符串,后端把json字符串封装到user对象中
System.out.println(user);
//做响应,模拟查询数据库
user.setUsername("hh");
user.setAge(40);
//做响应
return user;
}
}
@ResponseBody的作用是将java对象转为json格式的数据。
纸上得来终觉浅,绝知此事要躬行.

浙公网安备 33010602011771号