Spring Mvc工作流程与模块功能
Spring Web MVC DispatcherServlet 的请求处理的工作流程如下图所示:
工作流程
(1)收到一个 HTTP 请求后, DispatcherServlet 根据HandlerMapping来选择并且调用适当的控制器 。
(2)控制器接受请求,并基于使用的 GET 或 POST 方法来调用适当的 service 方法。Service 方法将设置基于定义的业务逻辑的模型数据,并返回视图名称到 DispatcherServlet 中。
(3)DispatcherServlet 会从 ViewResolver 获取帮助,为请求检取定义视图。
(4)一旦确定视图, DispatcherServlet 将把模型数据传递给视图,最后呈现在浏览器中。
模块功能
- DisapatcherServlet:中央控制器,作为统一的访问点,进行全局的流程控制。
- HandlerMapping:映射处理器,负责告诉中央控制器调用哪个controller
- Controller:处理具体的业务并返回视图名称给DispatcherServlet
- ViewResolver&View:帮助DispatcherServlet检取定义视图
- Interceptor:拦截器,负责拦截我们定义的请求然后做处理工作 ps: spring mvc struts2等mvc框架运用了前端控制器模式 适配器模式等
初步学习:运用功能
- 核心组件: DispatcherServlet Controller handlerMapping(映射处理器,负责映射中央控制器转发给controller时的映射策略) ModelAndView ViewResolver Interceptors
- 流程
2.1 配置web.xml文件
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- struts习惯使用/*,在springmvc不管用 -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
2.2 配置spring.xml文件
<!-- 一旦有扫描器的定义,mvc:annotation-driven不需要,扫描器中包含驱动-->
<context:component-scan base-package="cn.itcast.controller"/>
<!-- 前缀+ viewName +后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- webroot到某一指定的文件夹的路径 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 视图名称的后缀 -->
<property name="suffix" value=".jsp"/>
</bean>
2.3 添加注解
- 添加注解@controller以此标明是控制器类添加方法
- 添加@RequestMapping(“/xxx.do”)以此标明访问控制层的方法 @RequestMapping(“/xxxxx”)也可以来在类上声明命名空间
2.4 模型数据处理
- 方法的返回值可采用ModelAndView,newModelAndView(“XXX”,map);相当于把结果数据放到request
- 直接在方法的参数列表中来定义map,这个map即是ModelAndView里面的Map,由视图解析器处理
(上面两张方法不建议使用)
- 建议使用:在方法的参数列表中定义Model对象,相当于把结果数据放到request
2.5 ajax的使用
2.6 重定向
- controller内部重定向,redirect:加上同一个controller中的requestMapping的值
return "redirect:homenews-list.do";
- controller之间的重定向:必须要指定好controller的命名空间再指定requestMapping的值,redirect:后必须要加/,是从根目录开始,例:
return "redirect:/homenews/homenews-list.do";
2.7 拦截器的使用
- 先spring mvc配置文件里配置:
- 直接在方法的参数列表中来定义map,这个map即是ModelAndView里面的Map,由视图解析器处理
<!-- 拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**/*"/>
<bean class="com.hmaccelerate.interceptors.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
- 然后实现相对于的接口
时间: 2024-11-05 20:32:06