springMVC是一个表现层的框架,作用简单来说就是处理前台请求和返回后台处理结果给前台。
1. 架构流程
2. 配置文件介绍
由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。需要用户开发的组件有handler、view。
架构流程
1. 用户发送请求至前端控制器DispatcherServlet
2. DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4. DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5. 执行处理器(Controller,也叫后端控制器)。
6. Controller执行完成返回ModelAndView
7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9. ViewReslover解析后返回具体View
10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
11. DispatcherServlet响应用户
这样就可以省去在spring配置文件中配置每个Controller类的繁琐,只要你写的Controller类的代码放在这个包下即可,再在类上加上注释@Controller,spring就会扫描该包下的类,注入到spring容器中
注解式处理器映射器,对类中标记了@ResquestMapping的方法进行映射。根据@ResquestMapping定义的url匹配@ResquestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器。
HandlerMethod对象中封装url对应的方法Method。
注解式处理器适配器,对标记@ResquestMapping的方法进行适配。
直接配置处理器映射器和处理器适配器比较麻烦,可以使用注解驱动来加载。
视图解析器使用SpringMVC框架默认的InternalResourceViewResolver,这个视图解析器支持JSP视图解析
1. spring容器的配置
/ : 拦截所有不包括jsp(建议使用)
/*: 拦截所有
如何对css js 等静态资源放行,在springmvc.xml中进行如下配置
1. 架构流程
2. 配置文件介绍
1. springMVC基本流程
2.springMVC架构介绍
2.1 架构图及架构流程
由图可以看出前端控制器是整个框架的中心,由他来调用其他组件
组件说明- 1. DispatcherServlet前端控制器
- 2. HanderMapping 处理器映射器
- 3. Handler:处理器
由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
- 4. HandlAdapter:处理器适配器
- 5. ViewResolver:视图解析器
- 6. View:视图
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。需要用户开发的组件有handler、view。
架构流程
1. 用户发送请求至前端控制器DispatcherServlet
2. DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4. DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5. 执行处理器(Controller,也叫后端控制器)。
6. Controller执行完成返回ModelAndView
7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9. ViewReslover解析后返回具体View
10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
11. DispatcherServlet响应用户
3.springMVC配置文件介绍
3.1 springMVC配置文件中的主要节点及说明
1. 组件扫面器这样就可以省去在spring配置文件中配置每个Controller类的繁琐,只要你写的Controller类的代码放在这个包下即可,再在类上加上注释@Controller,spring就会扫描该包下的类,注入到spring容器中
<!-- 配置controller扫描包,多个包之间用,分隔 -->
<context:component-scan base-package="cn.wyy.springmvc.controller" />
2. 配置处理器映射器
注解式处理器映射器,对类中标记了@ResquestMapping的方法进行映射。根据@ResquestMapping定义的url匹配@ResquestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器。
HandlerMethod对象中封装url对应的方法Method。
<!-- 配置处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
3. 配置处理器适配器
注解式处理器适配器,对标记@ResquestMapping的方法进行适配。
<!-- 配置处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
4. 注解驱动
直接配置处理器映射器和处理器适配器比较麻烦,可以使用注解驱动来加载。
SpringMVC使用一下标签自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,这样就不需要配置前面的两项
<!-- 注解驱动 -->
<mvc:annotation-driven />
5. 配置视图解析器
视图解析器使用SpringMVC框架默认的InternalResourceViewResolver,这个视图解析器支持JSP视图解析
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置逻辑视图的前缀 value的值就是jsp页面的路径-->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 配置逻辑视图的后缀 -->
<property name="suffix" value=".jsp" />
</bean>
有何作用
@Controller
public class DemoController {
// @RequestMapping:里面放的是请求的url,和用户请求的url进行匹配
@RequestMapping("/itemList.action")
public ModelAndView queryItemList() {
// 。。。。。
// 创建ModelAndView,用来存放数据和视图 后面会介绍,主要是用来实现向前台页面传递出数据
ModelAndView modelAndView = new ModelAndView();
// 设置数据到模型中
modelAndView.addObject("list", list);
// 设置视图jsp,需要设置视图的物理地址
//modelAndView.setViewName("/WEB-INF/jsp/itemList.jsp");
// 如果你配置了上述的视图解析器,则可以这样写
modelAndView.setViewName("add"); // 也就是页面的路径和后缀就可以省略了
return modelAndView;
}
}
说明:还有其他的配置,比如文件上传解析器,配置资源映射(对静态资源放行),配置dubbo服务等
3.2 web.xml中关于springMVC的配置
前端控制器配置,加载spring容器的配置, 解决post提交乱码问题filter1. spring容器的配置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring配置文件的类路径</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2. 前端控制器配置
<!-- springmvc的前端控制器 -->
<servlet>
<servlet-name>e3-manager</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- contextConfigLocation不是必须的,
如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>e3-manager</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
不仅仅可以配/,还可以配/*
/ : 拦截所有不包括jsp(建议使用)
/*: 拦截所有
如何对css js 等静态资源放行,在springmvc.xml中进行如下配置
<!-- 对静态资源放行
localtion: 静态资源的路径,从webcontent开始
-->
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/fonts/" mapping="/fonts/**"/>
3. post提交乱码问题解决
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>