一、配置DispatchServlet-Servlet.xml文件
<!-- 1.配置注解扫描位置 :controller的项目位置-->
<context:component-scan base-package="项目名.web.controller"/>
<!-- 2. 配置处理器映射 :通过注解来查找 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!-- 3.配置注解处理适配器 :执行控制器的方法 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- 4.配置springmvc视图解析器 :前缀 + 后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views"/>
<property name="suffix" value=".jsp"/>
</bean>
总结:
- 1.配置扫描包 确定controller扫描位置
- 2.配置注解处理映射 采用注解方式查找
- 3.配置适配器 执行controller中方法
- 4.配置资源视图解析器 视图解析
二、Controller类
- 扮演角色:中介 + 包装
主要作用 :
- 1.映射路径
- 2.处理前端参数(转换格式化等),并将其传递给业务逻辑。
- 3.将业务逻辑返回的数据封装成model传递给前端。
主要注解
@Controller:
位置:放在类名上
作用:标记类是Controller
@RequestMapping()
位置:放在类名和方法名上
作用:表示请求映射路径
写法
-
@RequestMapping("user") @RequestMapping("/user.do") @RequestMapping(value="/user.do") @RequestMapping(value = "/user2",method=RequestMethod.POST) 只能使用POST方法 @RequestMapping(value = "/user3",method=RequestMethod.Get) 只能使用GET方法
@RequestParam():放在方法参数列表中,里面写前端参数(类型,必须等)
位置:在方法参数列表中
作用:里面写前端参数,声明类型,必须等
写法:
-
@GetMapping(value = "/getStuList") public ReturnMessage getStudentList( @RequestParam(value = "name", required = false) String name, @RequestParam(value = "age", required = false) Integer age){ ...........方法体......... }
@PathVariable:
位置:参数列表中,
作用:表示该参数对应路径的参数(查看URI模板)
写法:把路径{}里面参数 注入 方法参数 里面
-
@Controller @RequestMapping ( "/test/{variable1}" ) public class MyController { @RequestMapping ( "/get/{variable2}" ) public Student getStudList( @PathVariable String variable1, @PathVariable ("variable2") int variable2) { ...........方法体........... } }
Spring 识别管理controller控制器
方式一: 在SpringMVC 的配置文件中定义 MyController 的bean 对象。 有几个controller就写几个bean
<bean class="com.zjc..web.controller.MyController名字1"/>
..................................
<bean class="com.zjc..web.controller.MyController名字n"/>
方式二:告诉Spring该到哪里去找标记为@Controller的Controller控制器
< context:component-scan base-package = "com.zjc.controller(包名)" >
< context:exclude-filter type = "annotation" expression = "org.springframework.stereotype.Controller" />
</ context:component-scan >
controller转发和重定向
- 1.转发到同一个控制器 return "forward: 本controller的方法.do"
- 2.转发到不同一个控制器 return "forward: 其他controller的方法.do"
- 重定向,把 forward 改成 redirect
@ResponseBody 和 @RequestBody 注解
- @ResponseBody 把后台pojo数据转换json对象 ,返回到页面。
- @RequestBody 把从前台接收的json数据,自动封装成JavaBean
Spring MVC 多视图 (json/xml)
使用xml格式支持的jar包:spring-oxm...
<!-- 4.配置资源视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置支持媒体类型 -->
<property name="contentNegotiationManager">
<bean class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="mediaTypes">
<map>
<entry key="json" value="application/json"></entry>
<entry key="xml" value="application/xml"></entry>
</map>
</property>
</bean>
</property>
<!-- 指定默认视图 -->
<property name="defaultViews">
<!-- 支持多个视图 -->
<list>
<!-- 对josn格式视图支持 -->
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
<!-- xml格式视图支持 -->
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>com.zjc.项目名.类名</value>
</list>
</property>
</bean>
</constructor-arg>
</bean>
</list>
</property>
</bean>