一、Controller配置总结
控制器(Controller)
- 控制器复杂提供访问应用程序的行为,通常通过接口定义和注解定义两种方式实现
- 控制器负责解析用户的请求并将其转换为一个模型
- 在SpringMVC中一个控制器类可以包含多个方法
- 有多种方式实现Controller配置
二、实现Controller接口
controller是一个接口,需实现这个接口即可。
//实现该接口的类获得控制器功能
public interface Controller{
//处理请求且返回一个模型与视图对象
ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception;
}
测试:
编写一个Controller类
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mav = new ModelAndView();
//业务代码
mav.addObject( "msg","HelloSpringMVC" );
//视图跳转
mav.setViewName( "test" );
return mav;
}
}
到Spring配置文件中注入bean:name是请求路径,class对应请求的类
<bean id="/hello" class="com.rxj.controller.HelloController"/>
在WEB-INF/jsp下新建一个jsp页面test.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
小结:
- 实现接口Controller定义控制器是比较老的方法
- 并且一个控制器中只有一个方法,如果要多个方法需要定义多个控制器,且定义的方法较为麻烦
三、使用注解配置Controller
- @Controller注解类型用于声明Spring类的实例是一个控制器
- Spring可以用扫描的机制来找到应用程序中的所有注解的控制器类,为了保证Spring能够找到你的控制器,需要在配置中声明组件扫描。
<!-- 自动扫描包,让包下的注解生效,由IOC容器统一管理-->
<context:component-scan base-package="com.rxj.controller"/>
编写一个Controller类
@Controller
//被注解的类中的所有方法,如果返回值是String,并且有具体页面可以跳转,那么就会被视图解析器解析
public class HelloController {
@RequestMapping("/hello")
public String hello(Model model){
//封装数据
model.addAttribute( "msg","Hello,SpringMVC" );
return "hello";//会被视图解析器处理
}
}
在WEB-INF/jsp新建一个hello.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
运行测试即可!