项目测试目录
1、响应返回值之String类型
controller的方法返回的字符串可以指定逻辑视图的名称,根据视图解析器为物理视图地址。
@Controller
@RequestMapping(path = "con")
public class controller {
@RequestMapping(path = "test")
public String test(){
System.out.println("test.....");
return "success";
}
}
2、响应返回值之void类型
默认会去找testVoid.jsp这个文件。
@RequestMapping(path = "testVoid")
public void testVoid(){
System.out.println("test.....");
}
可以利用请求转发,然后去跳转到success.jsp页面,重定向因为是两次请求,所以无法访问WEB-INF中的内容
@RequestMapping(path = "testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception, IOException {
System.out.println("test.....");
//请求转发
// 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;
}
}
3、响应返回值之ModelAndView类型
controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。
@RequestMapping(path = "testModel")
public ModelAndView testModel(){
System.out.println("test.....");
ModelAndView mv = new ModelAndView();
User user = new User();
//把user对象存储到mv对象中去,也会把user对象存储到request对象中
mv.addObject("user",user);
//跳转到哪个页面
mv.setViewName("success");
return mv;
}
4、响应之使用forward和redirect进行页面跳转
这两个方法用不了视图解析器,需要自己去写路径。
- forward转发:controller方法在提供了String类型的返回值之后,默认就是请求转发。关键字forward。
@RequestMapping(path = "testString")
public String testString(){
System.out.println("test.....");
//return "forward:/WEB-INF/pages/success.jsp";
return "redirect:index.jsp";
}
5、@ResponseBody响应json数据
我们知道当用户发送一个请求的时候,就会拦截所有的资源,导致的一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决问题就是需要配置静态资源不进行拦截,在springMVC.xml配置文件添加如下配置。
- mvc:resources标签配置不过滤
location元素表示webapp目录下的包下的所有的文件。
mapping元素表示以/static开头的所有请求路径,如:/static/a或者/static/b
<mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
<mvc:resources mapping="/images/**" location="/images/"></mvc:resources>
<mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
- 获取json数据:利用RequestBody这个注解。
ajax
$(".btn")[0].onclick = function(){
$.ajax({
type : "post",
url : "con/testAjax",
cache : false,
data : {
"username":"hhhh",
"password":"bbbb"
},
dataType : "text",
success : function(msg) {
var user = JSON.parse(msg);
alert(user.username);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
alert("获取数据失败!");
}
})
}
有三种获取的方式:
1、简单的,这样可以获取数据。
@RequestMapping(path = "testAjax")
public String testAjax(User user){
System.out.println(user);
return "success";
}
执行结果:
2、直接为这个字符串
@RequestMapping(path = "testAjax")
public String testAjax(@RequestBody String body){
System.out.println(body);
return "success";
}
3、导入json的相关jar包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
利用@ResponseBody注解,该注解可以将对象转换成字符串返回给前端的success回调函数。
@RequestMapping(path = "testAjax")
public @ResponseBody User testAjax(User user){
System.out.println(user);
System.out.println(user.getUsername());
user.setUsername("aaaa");
user.setPassword("aaaa");
return user;
}