一、Controller是什么?
控制器Controller
-
控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。
-
控制器负责解析用户的请求并将其转换为一个模型。
-
在Spring MVC中一个控制器类可以包含多个方法
-
在Spring MVC中,对于Controller的配置方式有很多种
二、使用方式
1.实现Controller接口
Controller接口在org.springframework.web.servlet.mvc包下
//实现该接口的类获得控制器功能
public interface Controller {
//处理请求且返回一个模型与视图对象(ModelAndView)
ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception;
}
springmvc-servlet.xml
<!--<context:component-scan base-package="com.example.controller"/>-->
<!--<mvc:default-servlet-handler />-->
<!--<mvc:annotation-driven />-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<bean name="/t1" class="com.example.controller.ControllerTest1"/>
测试类
public class ControllerTest1 implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("msg", "ControllerTest1");
mv.setViewName("test");
return mv;
}
}
缺点:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller。定义的·方式比较麻烦
2.使用注解@Controller
springmvc-servlet.xml
<context:component-scan base-package="com.kaung.controller"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
controller层
@Controller //代表这个类会被Spring接管,被这个注解的类中的所有方法,
// 如果返回值是String,并且有具体页面可以跳转,那么被视图解析器解析
public class ControllerTest2 {
@RequestMapping("/t2")
public String test1(Model model) {
model.addAttribute("msg", "ControllerTest2");
return "test";
}
}
注:视图是可以被复用的,而控制器与视图之间是弱偶合关系
三、RequestMapping
@RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
- 只注解在方法上面
@Controller
public class TestController {
@RequestMapping("/h1")
public String test(){
return "test";
}
}
访问路径:http://localhost:8080 / 项目名 / h1
- 同时注解类与方法
@Controller
@RequestMapping("/admin")
public class TestController {
@RequestMapping("/h1")
public String test(){
return "test";
}
}
访问路径:http://localhost:8080 / 项目名/ admin /h1 , 需要先指定类的路径再指定方法的路径