5.Controller配置总结
5.1 控制器Controller
- 控制器提供访问应用程序的行为,可以通过接口或注解定义两种方法实现
- 控制器负责解析用户的请求并转化为一个Model
- 在SpringMVC中一个控制器可以包含多个方法
5.2 实现Controller得到两种方式
- 接口实现
spring配置 - 手动配置映射器与适配器
<?xml version="1.0" encoding="UTF8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--添加 处理器映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--添加 处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--处理映射器和处理器适配器的作用是 : 当客户端发生请求的时候,例如/hello , 使得spring自动寻找符合hello的bean,之后进入该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进行转发或重定向的时候,自动装配前缀与后缀。
-->
</beans>
package com.liu.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloController implements Controller { //实际上还是一个Servlet
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//模型和视图
ModelAndView mv = new ModelAndView(); //一个中间层ModelAndView
//封装对象,放在ModelAndView中
mv.addObject("msg","HelloSpringMVC");
//封装要跳转的视图,放在ModelAndView中
mv.setViewName("hello");
return mv; //返回这个ModelAndView , 通过解析其中的数据,得到要返回的数据和对应页面
}
}
2.注解实现
spring配置 - 配置注解设置
<?xml version="1.0" encoding="UTF8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--自动扫描包,让指定包下的注解生效,由IOC统一管理-->
<context:component-scan base-package="com.liu.controller"/>
<!--让SrpingMVC不处理静态资源-->
<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>
</beans>
package com.liu.controller;
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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller //Controller注解直接在spring中配置了bean
@RequestMapping("/HelloController") //父级路径
public class TestController{
@RequestMapping("hello") //子路径
public String hello(Model model) {
//封装数据
model.addAttribute("msg","Hello,SpringMVC");
return "hello"; //返回视图名字
}
}
3.RequestMapping
映射url请求,可以实现父子路径请求
@Controller //Controller注解直接在spring中配置了bean
@RequestMapping("/HelloController") //父级路径
public class TestController{
@RequestMapping("hello") //子路径
public String hello(Model model) {
//封装数据
model.addAttribute("msg","Hello,SpringMVC");
return "hello"; //返回视图名字
}
}
//需要访问 localhost:8080/HelloController/hello