SpringMVC学习之springMVC项目的相关配置文件配置

来源:互联网 发布:微信淘宝优惠券怎么做 编辑:程序博客网 时间:2024/05/16 05:44
  • 在项目的web.xml文件种配置如下的 前端控制器
<!--springMVC的前端控制器-->
<servlet>
   <servlet-name>springMVC</servlet-name>
   <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
       </servlet-class>
   <!--contextConfigLocation配置springMVC加载的配置文件(配置处理器映射器、适配器等等)(一般都要这样配置)
      如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml(springMVC-servlet.xml)
   -->
       <init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>classpath:context/springMVC.xml</param-value>
       </init-param>
   <load-on-startup>1</load-on-startup>
</servlet>

<!-- 映射路径,不要写成了/*那样会拦截所有的访问,连JSP页面都访问不了
 第一种 *.action 访问以.action结尾  由DispatcherServlet进行解析
 第二种 / 所有的访问地址都由DispatcherServlet(前端控制器)进行解析,但是对于静态文件的访问会不进行解析,
 所以对静态文件(jsp页面,图片什么的)的解析(访问)需要此配置。
 第三种 /* 这样配置不对,会解析所有的访问,连JSP页面都访问不了。不能访问静态文件了。(因为根据jsp页面去找Handler,会报错)。
 -->
<servlet-mapping>
   <servlet-name>springMVC</servlet-name>
   <url-pattern>/</url-pattern>
</servlet-mapping> 



在springMVC.xml种配置 (处理器映等射器、适配器、视图解析器等等)

  • 非注解的映射器 和 适配器(了解)。
a.(两种映射器的配置方法)
<!--非注解的处理器映射器和适配器-->

<!--配置Handler 如下 -->
<bean id="businessController" name="/queryList.action" class="cn.ffcs.wifi.portal.web.action.BusinessController"/>
<bean id="CommonDataController" name="/deleteList.action" class="cn.ffcs.wifi.portal.web.action.CommonDataController"/>

<!--1 处理器映射器的bean  name作为url进行查找,需要在配置Handler的时候指定beanName(就是url-->
<bean  class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

<!--2. 简单的 url 映射-->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <!--BusinessController进行url映射,url queryList1.action
            一个bean可以由多个url
            -->
            <prop key="/queryList1.action">businessController</prop>
            <prop key="/queryList2.action">businessController</prop>
        </props>
    </property>
</bean>

结论:多个映射器可以并存。(如上两种映射器并存配置);映射是通过url来映射的

b.(两种处理器适配器的配置 )
注:!!!
配置SimpleControllerHandlerAdapter --> Controller要实现Controller接口
配置HttpRequestHandlerAdapter  -->Controller 要实现HttpRequestHandler接口
<!--两种非注解的适配器  所有的适配器都实现HandlerAdapter接口-->
<!--第一种:适配器SimpleControllerHandlerAdapter 返回的是ModelAndView-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

<!--第二种:适配器HttpRequestHandlerAdapter 和原始的servlet类似 使用 request转发或重定向
也可以使用这种方法 可以通过修改response,设置响应的数据格式,比如响应json数据
-->
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>

如:图1.1


                                                                                                                               图1.1

注意:前端控制器在以上的配置文件种加载 处理器映射器、处理器适配器,和视图解析器等;如果以上没有在springMVC.xml文件中配置,那么使用默认加载的(Spring 3.1之前的)。如(图1.2)


                                      
                                                                                                                               图1.2
  • 注解的映射器 和 适配器。

在spring3.1之前使用的映射器是  org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
                         使用的适配器是  org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter


<!--注解的映射器配置-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--注解的适配器配置-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

<!--使用annotation-driven 代替以上的注解映射器和解析器的配置
annotation-driven 默认加载很多的参数绑定方法,比如json的转换解析器就默认加载了。
实际开发 使用这种!!!
-->
<mvc:annotation-driven></mvc:annotation-driven>

注意:
  1. 使用
<mvc:annotation-driven></mvc:annotation-driven>
  1. 注解的处理器适配器和注解的处理器映射器是配对使用的。 不能和非注解处理器映射器进行映射使用。(一注解和一非注解结合不行)

  • 主键扫描配置

<!-- 自动扫描相关包下面的类,通过注解找到controller -->
<context:component-scan base-package="cn.ffcs.wifi.portal.web.action"/>

  • 视图解析器

<!--视图解析器
解析jsp,默认使用jstl标签,classpath下得有jstl的包
-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 
    <!--配置jsp路径的前缀-->
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <!--配置jsp路径的后缀 这样在放回的modelandview等中的路径就不用写整个具体路径-->
    <property name="suffix" value=".jsp"/>
</bean>

注:
UrlBasedViewResolver与InternalResourceViewResolver的用法
转:
http://www.cnblogs.com/crazy-fox/archive/2012/02/18/2357675.html


<bean id="viewResolver"
       class
="org.springframework.web.servlet.view.UrlBasedViewResolver">
       <property name="viewClass"
           value
="org.springframework.web.servlet.view.JstlView" />
       <property name="prefix" value="/WEB-INF/jsp/" />
       <property name="suffix" value=".jsp" />
   </bean>

      这个定义的含义是指UrlBasedViewResolver将使用JstlView对象来渲染结果,并将handler method返回的modelAndView基础上,加上目录前缀/WEB-INF/jsp/和文件名称后缀.jsp。例如结果返回的viewName为helloworld,则对应的实际jsp为/WEB-INF/jsp/helloworld.jsp
当返回的viewName的前缀为forward:时,spring mvc将结果通过forward的方式转到对应的视图,例如forward:helloworld。这也是spring mvc缺省的使用模式。
当返回的viewName的前缀为redirect:时,spring mvc将结果通过redirect的方式转到对应的视图。例如redirect:helloworld


      InternalResourceViewResolver为UrlBasedViewResolver的子类,它将InternalResourceView作为缺省的View类,如果当前classpath中有jstl的jar包时则使用JstlView作为缺省的view来渲染结果。因此以下使用InternalResourceViewResolver的定义应该和之前使用UrlBasedViewResolver定义的viewresolver的作用相同。

<bean id="viewResolver"
       class
="org.springframework.web.servlet.view.UrlBasedViewResolver">
       <property name="viewClass"
           value
="org.springframework.web.servlet.view.JstlView" />
       <property name="prefix" value="/WEB-INF/jsp/" />
       <property name="suffix" value=".jsp" />
   </bean>




1 0