关于springmvc配置validator的注意事项,科猫网项目总结

关于springmvc配置validator的注意事项,springmvcvalidator

1 <mvc:annotation-driven validator="validator" /> 

  在使用springmvc整合hibernate-validator做表单数据验证的时候(页面标签使用spring的form相关标签),不知道是由于版本原因还是其他原因,需要把上面的配置放置在最前面,数据验证注释(例如:@size、@email等)才会生效,错误绑定类才能接收到错误信息。

  另外,说一下springmvc中spring-servlet.xml、applicationContext.xml的区别:

  1:spring-servlet.xml是在dispatcherServlet启动的时候读取并加载其中的配置,applicationContext.xml是由contextLoaderListener监听到服务器启动的时候加载的;

  2:在不使用springmvc的dispatcherServlet做控制层的时候(比如用struts2),applicationContext.xml可以单独使用配置所有spring相关的东西;一起使用的时候有一些规范,spring-servlet.xml最好加载包含Web组件的bean,如控制器、视图解析器以及处理器映射,而contextLoaderListener要加载应用中的其他bean,这些bean通常是驱动应用后端的中间层和数据层组件。

1 mvc:annotation-driven validator =”validator” /
在使用springmvc整合hibernate-validator做表单数据验证的…

1.配置文件的添加

SSM整合需要web.xml配置文件,springmvc的配置文件,spring和mybatis整合的配置文件。

1.web.xml文件的配置

1.在WEB-INF下新建web.xml

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

上面控制springmvc的servlet,下面控制哪些文件会走springmvc

<servlet-name>标签的取名影响到XXX-servlet.xml文件的命名 

 

2.在web.xml中新增Listener标签

   

 <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     </listener>

ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext( 可以用来获取Spring容器中已初始化的bean**)的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。

如果要对spring的配置文件位置,名称进行指定(框架中的配置文件都可以对名称位置进行指定,springmvc则是在web.xml中添加<init-param>),可以添加:

  

 <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/applicationContext.xml</param-value>
    </context-param>

classpath:spring/applicationContext.xml也可以简化为/WEB-INF/applicationContext.xml

当我们不对位置进行配置,则默认位置为WEB-INF,文件名称为:applicationContext.xml(其作用是spring和mybatis的整合)

 

3.其他的标签

<servlet-mapping>
     <servlet-name>springmvc</servlet-name>    需要与上面名称相对应
     <url-pattern>*.action</url-pattern>    哪些路径要走springmvc
</servlet-mapping>

<welcome-file-list>
     <welcome-file>index.jsp</welcome-file>    指定起始页
</welcome-file-list>

2.spring-servlet.xml文件的配置

spring-servlet.xml也就是springmvc的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.1.xsd">
<!-- 使用注释方式 -->
     <mvc:annotation-driven/>
<!-- 自动扫描Controller-->
     <context:component-scan base-package="controller"/>
<!-- 配置一个springMVC视图解析器 -->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <property name="prefix" value= ""/>
         <property name="suffix" value= ".jsp"/>
     </bean>
<!-- 返回json的处理 -->
     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
         <property name="messageConverters">
             <list>
                 <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                     <property name="supportedMediaTypes">
                         <list>
                             <value>text/html; charset=UTF-8</value>
                             <value>application/json;charset=UTF-8</value>
                         </list>
                     </property>
                 </bean>
                 <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                     <property name="supportedMediaTypes">
                         <list>
                             <value>text/html; charset=UTF-8</value>
                             <value>application/json;charset=UTF-8</value>
                         </list>
                     </property>
                 </bean>
             </list>
         </property>
     </bean>
</beans>

使用springMVC有xml配置与注解配置,这里用注解配置

 

1.引入mvc和context的命名空间

mvc:

xmlns:mvc="http://www.springframework.org/schema/mvc"  
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd

context:

xmlns:context="http://www.springframework.org/schema/context" 
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd

 

2.设置注解驱动

<mvc:annotation-driven/>

 

3.自动实例化路径(需要改动)

 

<context:component-scan base-package=”controller”/>

 

  
在xml配置了这个标签后
spring可以自动去扫描base-pack下面或者子包下面的Java文件,如果扫描到有@Component
@Controller@Service等这些注解的类,则把这些类注册为bean

只要添加@Controller,spring会为里面的类创建实例

@Controller 标注 web 控制器, @Service 标注 Service 层的服务, @Respository 标注 DAO层的数据访问。 @Component 是通用标注,只是定义为一个类为 Bean , SpringMVC 会把所有添加 @Component 注解的类作为使用自动扫描注入配置路径下的备选对象。 @Controller 、 @Service@Respository 只是更加的细化

 

3.applicationContext.xml文件的配置

 

applicationContext.xml也就是spring和mybatis整合的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-4.1.xsd
          http://www.springframework.org/schema/tx
          http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
          http://www.springframework.org/schema/aop
          http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">

          <context:component-scan base-package="dao"/>
          <context:property-placeholder location="classpath:db.properties" />

         <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">
             <!-- 初始化连接数量; -->
             <property name="initialSize" value="0" />
             <!-- 最大并发连接数   -->
             <property name="maxActive" value="20" />

             <!-- 最大空闲连接数 -->
             <property name="maxIdle" value="20" />
             <!-- 最小空闲连接数 -->
             <property name="minIdle" value="0" />
             <!-- 最大等待时长 -->
             <property name="maxWait" value="60000" />
             <!-- 超过时间限制是否回收 -->
             <property name="removeAbandoned" value="true" />
             <!-- 超过时间限制多长; -->
             <property name="removeAbandonedTimeout" value="180"/>


             <!-- 数据源连接参数配置; -->
             <property name="username" value="${db.username}"/>
             <property name="url" value="${db.url}"/>
             <property name="password" value="${db.password}"/>
             <property name="driverClassName" value="${db.driver}"/>

         </bean>

<!-- 配置SessionFactory -->
     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
           <property name="dataSource" ref="dataSource"/>
<!-- <property name="mapperLocations" value="classpath:mapper/*.xml" /> -->
           <property name="mapperLocations">
             <list>
                 <value>classpath:config/*.xml</value>
             </list>
           </property>
     </bean>

<!-- 自动扫描mapper接口,注入sqlSessionFactory -->
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
         <property name="basePackage" value="mapper"/>
     </bean>

<!-- 配置事务管理器 -->
     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"/>
     </bean>

<!-- <tx:annotation-driven transaction-manager="transactionManager"  proxy-target-class="true"/> -->
<!-- 定义切面 -->
     <aop:config>
     <aop:pointcut expression="execution(* dao.*.* (..))" id="txPointCut"/>
     <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
     </aop:config>

<!-- 声明式事务 -->
     <tx:advice id="txAdvice" transaction-manager="transactionManager">
     <tx:attributes>
           <tx:method name="isValid" propagation="REQUIRED" read-only="true"/>
           <tx:method name="add" propagation="REQUIRED" read-only="true"/>
     </tx:attributes>
     </tx:advice>

</beans>
1.自动实例化对象包的指定(需要改动)
<!-- 开启自动初始化标签:添加Component就可以自动将类初始化 -->
     <context:component-scan base-package="dao"></context:component-scan>
为dao的类前面添加注解:
@Component
表示自动创建实例,而controller的类也是需要自动创建实例的,但是其由springMVC来完成了(添加了@Controller)
2.数据库信息文件的指定
<context:property-placeholder location="classpath:db.properties" />
表示在src目录下的db.properties文件(需要改动)
3.数据源dataSource使用dbcp
4.配置SessionFactory
<!-- 配置SessionFactory -->
     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
           <property name="dataSource" ref="dataSource"/>
<!-- <property name="mapperLocations" value="classpath:mapper/*.xml" /> -->
           <property name="mapperLocations">
             <list>
                 <value>classpath:config/*.xml</value>
             </list>
           </property>
     </bean>

id是固定的,一定不能写错(要修改很麻烦)

发表评论

电子邮件地址不会被公开。 必填项已用*标注