1.响应返回值为String类型:
@Controller
public class MyController {
@RequestMapping("/hello")
public String body(){
return "success";
}
}
成功跳转带success.jsp页面
2.响应返回值为void类型:
@Controller
public class MyController {
@RequestMapping("/hello")
public void body(){
System.out.println("hello");
}
}
这是配置的视图解析器
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
结果404,我们发现当没有设置跳转的页面时,默认到配置的视图解析器里配置的prefix指定的文件夹下寻找***.jsp,这里的**是hello,由于只有success.jsp,所以报404
解决方法:
@Controller
public class MyController {
@RequestMapping("/hello")
public void body(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
System.out.println("hello");
request.getRequestDispatcher("/WEB-INF/success.jsp").forward(request,response);
}
}
通过HttpServletRequest 进行跳转
注意:这里跳转的路径/WEB-INF/success.jsp只能自己设置,因为视图解析器在这里不起作用
最后成功跳转
也可以使用重定向解决
但是重定向不能直接访问WEB-INF里的jsp,所以演示重定向到index.jsp
@Controller
public class MyController {
@RequestMapping("/hello")
public void body(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
System.out.println("hello");
response.sendRedirect("index.jsp");
}
}
注意:sendRedirect里的路径是相对于webapp这个目录下的
3.响应返回值为ModelAndView:
@Controller
public class MyController {
@RequestMapping("/hello")
public ModelAndView body(ModelAndView mv){
mv.setViewName("success");
return mv;
}
}
setViewName里只需要指定需要跳转的jsp的名称即可,ModelAndView可以被视图解析器解析
也可以在ModelAndView里添加键值,这些键值最终存入request域对象中,方便前台获取
@Controller
public class MyController {
@RequestMapping("/hello")
public ModelAndView body(ModelAndView mv){
mv.addObject("username","zhangsan");
mv.addObject("age","20");
mv.setViewName("success");
return mv;
}
}
响应返回值为String最后也会调用setViewName,实现跳转
4.过滤静态资源
在web.xml配置了前端控制器,设置拦截的url为/,即拦截所有请求
这时项目下的静态资源,比如js目录下的js文件,css目录下的css文件等等都会被拦截,导致页面无法加载静态资源,这是需要在配置文件中过滤掉静态资源
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/images/**" location="/images/"/>
location:静态资源的位置
mapping:过滤的url请求
5.响应json数据,发送ajax请求
<body>
<button id="btn">发送ajax请求</button>
<script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function () {
$("#btn").click(function () {
$.ajax({
url:"hello",
type:"get",
dataType:"json",
success:function (data) {
alert(data.name)
}
})
})
})
</script>
</body>
ajax的接受数据类型为json
@ResponseBody可以将对象转为json数据
@Controller
public class MyController {
@ResponseBody
@RequestMapping("/hello")
public User body(){
User user = new User();
user.setName("zhangsan");
user.setPassword("123456");
return user;
}
}
运行结果