复习一下springmvc,以前看的时候只想着会用就行,但是时间久了记忆也就模糊了,今天简单整理一下,方便后期在复习
SpringMvc,
1、前端控制器
2、处理器映射器
3、处理器适配器
4、试图解析器
springMVc就是靠这4个器进行工作的。
怎么工作呢?
前端控制器将url传到处理器映射器,处理器映射器去寻找映射了url的Handler中的对应方法,这些Handler 要符合适配器的编写规则,最终 返回的结果由试图解析器渲染页面
前端控制器:【web.xml 中】
<!-- 加载Spring容器 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/*.xml</param-value> </context-param> <!-- Spring监听 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 配置前端控制器/适配器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器/适配器等..) --> <!-- 如果不配置,则默认加载'WEB-INF/servlet名-servlet.xml'(springmvc-servlet.xml) --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 第一种:*.action,访问以.action结尾由DispatcherServlet进行解析 第二种:/,所有访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析 使用此方法可是实现RESTful风格的url 第三种:/*,这样配置不对,使用这种配置,最终要转发一个jsp时,该jsp还是由DispatcherServlet进行解析,但不能根据jsp找到一个handler,所以会报错 --> <url-pattern>*.action</url-pattern> </servlet-mapping>
【与src同级目录下创建的文件夹下的springmvc.xml(自定义,规则看web.xml )】
处理器映射器
<!-- 处理器映射器 将bean的name作为url进行查找,需要在配置Handler时指定beanname(就是url) --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> <!-- 配置Handler 映射器是将bean的name作为url进行查找的,所以要配置Handler的name属性 --> <!-- <bean name="/queryItems.action" class="com.cfb.mees.controller.ItemsController"/> --> <bean id="ItemsController1" name="/queryItems.action" class="com.cfb.mees.controller.ItemsController"/> <!-- 配置另一个Handler --> <bean id="ItemsController2" class="com.cfb.mees.controller.ItemsController2"/>
<!--简单url映射 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/queryItems1.action">ItemsController1</prop> <prop key="/queryItems2.action">ItemsController1</prop> <prop key="/queryItems3.action">ItemsController2</prop> </props> </property> </bean>
<!--注解映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
处理器适配器
<!-- 处理器适配器 前端控制器要解析符合适配器规则编写的Handler 所有处理器适配器都实现 HandlerAdapter 接口 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!-- 另一种适配器 --> <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/> <!--注解适配器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
配置Handler
<bean name="/queryItems.action" class="com.cfb.mees.controller.ItemsController"/> <bean id="ItemsController1" name="/queryItems.action" class="com.cfb.mees.controller.ItemsController"/> <!-- 配置另一个Handler --> <bean id="ItemsController2" class="com.cfb.mees.controller.ItemsController2"/>
Handler 很多的时候,单个配置相当麻烦,开发过程中当然使用最简单的自动扫描
<!-- 注解开发的Handler也可以单个配置 开发中,方便起见,使用扫描器扫描Handler所在的包 --> <context:component-scan base-package="com.cfb.mees.controller"></context:component-scan>
开发过程中当然使用注解开发,,使用注解驱动
<!-- 注解驱动 使用 mvc:annotation-driven 可以代替单独配置注解映射器/注解适配器; mvc:annotation-driven :默认加载了很多参数绑定的方法,比如:json转换解析器 --> <mvc:annotation-driven> </mvc:annotation-driven>
视图解析器
<!-- 视图解析器 解析jsp视图,默认使用jstl标签,所以classpath下要引jstl的包 prefix : 前缀 suffix : 后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean>
=================================end ================================
到这里就简单配置完成了