ssm+thymeleaf整合

近来在不断的学习中学习了SSM框架,本来还想继续使用jsp,但是在了解了jsp逐渐有所淘汰的趋势,就学习了thymeleaf模板引擎,下面开始介绍我使用过程中遇到的问题以及详细配置,我用的myeclipse和数据库用的mysql

一.(pom.xml)

<properties>

    <webVersion>3.1</webVersion>

    <!-- spring版本号 -->

    <spring.version>4.2.4.RELEASE</spring.version>

    <!-- mybatis版本号 -->

    <mybatis.version>3.2.6</mybatis.version>

    <!-- log4j日志文件管理包版本 -->

    <slf4j.version>1.7.7</slf4j.version>

    <log4j.version>1.2.17</log4j.version>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  </properties>

  <dependencies>


    <!-- JUnit 4.12 -->

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>4.11</version>

      <!-- 表示开发的时候引入,发布的时候不会加载此包 -->

      <scope>test</scope>

    </dependency>


    <!-- 生成验证码,这个是一个图形化验证码kaptcha-->
    <dependency>
      <groupId>com.github.axet</groupId>
     <artifactId>kaptcha</artifactId>
     <version>0.0.9</version>
    </dependency>

    <dependency>

      <groupId>commons-codec</groupId>
      <artifactId>
commons-codec</artifactId>
      <version>
1.11</version>
    </dependency>


    <!-- 映入JSON -->
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.13</version>
    </dependency>
    
    <dependency>    
      <groupId>com.fasterxml.jackson.core</groupId>    
      <artifactId>jackson-core</artifactId>    
      <version>2.6.0</version>    
    </dependency>    
      
    <dependency>    
      <groupId>com.fasterxml.jackson.core</groupId>    
      <artifactId>jackson-databind</artifactId>    
      <version>2.6.0</version>    
    </dependency>


    <!-- spring核心包 -->

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-core</artifactId>

      <version>${spring.version}</version>

    </dependency>

 

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-web</artifactId>

      <version>${spring.version}</version>

    </dependency>

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-oxm</artifactId>

      <version>${spring.version}</version>

    </dependency>

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-tx</artifactId>

      <version>${spring.version}</version>

    </dependency>

 

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-jdbc</artifactId>

      <version>${spring.version}</version>

    </dependency>

 

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-webmvc</artifactId>

      <version>${spring.version}</version>

    </dependency>

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-aop</artifactId>

      <version>${spring.version}</version>

    </dependency>

 

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-context-support</artifactId>

      <version>${spring.version}</version>

    </dependency>

 

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-test</artifactId>

      <version>${spring.version}</version>

    </dependency>


    <!--   引入servlet依赖 -->

    <dependency>
      <groupId>
javax.servlet</groupId>
      <artifactId>
javax.servlet-api</artifactId>
      <version>
3.0.1</version>

      <!-- provided表明该包只在编译和测试的时候用 -->
      <scope>provided</scope>
    </dependency>


    <!-- mybatis核心包 -->

    <dependency>

      <groupId>org.mybatis</groupId>

      <artifactId>mybatis</artifactId>

      <version>${mybatis.version}</version>

    </dependency>

    <!-- mybatis/spring -->

    <dependency>

      <groupId>org.mybatis</groupId>

      <artifactId>mybatis-spring</artifactId>

      <version>1.2.2</version>

    </dependency>


    <!--AspectJ Weaver -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>

      <version>1.7.4</version>
    </dependency>


    <dependency>
      <groupId>
org.aspectj</groupId>
      <artifactId>
aspectjweaver</artifactId>
      <version>
1.8.8</version>
     </dependency>


    <!-- 定义JTA规范的JAR包,当Hibernate使用JTA的时候需要 -->

    <dependency>
     <groupId>
javax.transaction</groupId>
     <artifactId>
jta</artifactId>
     <version>
1.1</version>

    </dependency>


    <!-- 邮件包 -->
    <dependency>
     <groupId>
com.sun.mail</groupId>

     <artifactId>javax.mail</artifactId>
     <version>
1.6.0</version>

    </dependency>


    <!-- 导入MySQL数据库链接jar包 -->

    <dependency>

      <groupId>mysql</groupId>

      <artifactId>mysql-connector-java</artifactId>

      <version>5.1.8</version>

    </dependency>


    <!--目前常用的数据源主要有c3p0、dbcp、proxool、druid,我使用了阿里巴巴的druid   -->

    <!-- 导入druidjar包,用来配置数据库 -->

    <!-- Druid 1.0.16 -->
    <dependency>
       <groupId>
com.alibaba</groupId>
       <artifactId>
druid</artifactId>
       <version>
1.0.16</version>
    </dependency>


    <!--这里还可以用导入dbcpjar包,用来在applicationContext.xml中配置数据库 -->

    <!--    <dependency> -->
    <!--       <groupId>commons-dbcp</groupId> -->
    <!--       <artifactId>commons-dbcp</artifactId> -->
    <!--       <version>1.2.2</version> -->
    <!--     </dependency> -->

   

    <!-- 导入Java EE jar 包 -->
    <dependency>
      <groupId>
javax</groupId>
      <artifactId>
javaee-api</artifactId>
      <version>
7.0</version>
     
 <scope>provided</scope>
    </dependency>


    <!-- JSTL标签类 -->

    <dependency>

      <groupId>jstl</groupId>

      <artifactId>jstl</artifactId>

      <version>1.2</version>

    </dependency>


    <!-- 用来自动生成注解配置的jar包 -->
    <dependency>
  <groupId>xdoclet</groupId>
  <artifactId>xdoclet</artifactId>
  <version>1.2.3</version>
    </dependency>


    <!-- 日志文件管理包 -->

    <!-- log start -->

    <dependency>

      <groupId>log4j</groupId>

      <artifactId>log4j</artifactId>

      <version>${log4j.version}</version>

    </dependency>

   

    <!-- 格式化对象,方便输出日志 -->

    <dependency>

      <groupId>com.alibaba</groupId>

      <artifactId>fastjson</artifactId>

      <version>1.2.7</version>

    </dependency>

 

    <dependency>

      <groupId>org.slf4j</groupId>

      <artifactId>slf4j-api</artifactId>

      <version>${slf4j.version}</version>

    </dependency>

 

    <dependency>

      <groupId>org.slf4j</groupId>

      <artifactId>slf4j-log4j12</artifactId>

      <version>${slf4j.version}</version>

    </dependency>


    <!-- log end -->

    <!-- 上传组件 -->

    <dependency>

      <groupId>commons-fileupload</groupId>

      <artifactId>commons-fileupload</artifactId>

      <version>1.3.1</version>

    </dependency>


    <dependency>

      <groupId>commons-io</groupId>

      <artifactId>commons-io</artifactId>

      <version>2.4</version>

    </dependency>


    <dependency>

      <groupId>commons-codec</groupId>

      <artifactId>commons-codec</artifactId>

      <version>1.9</version>

    </dependency>

   

    <!-- 引入thymeleaf -->
    <dependency>
      <groupId>org.thymeleaf</groupId>
      <artifactId>thymeleaf</artifactId>
      <version>3.0.0.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.thymeleaf</groupId>
      <artifactId>thymeleaf-spring4</artifactId>
      <version>3.0.0.RELEASE</version>
      <exclusions>
        <exclusion>
   <artifactId>javassist</artifactId>
   <groupId>org.javassist</groupId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
     <groupId>org.thymeleaf.extras</groupId>
     <artifactId>thymeleaf-extras-springsecurity4</artifactId>
     <version>3.0.0.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.thymeleaf.extras</groupId>
      <artifactId>thymeleaf-extras-java8time</artifactId>
      <version>3.0.0.RELEASE</version>

    </dependency>


  </dependencies>


  <!--mybatis 逆向工程准备-->

  <plugin>
      <groupId>
org.mybatis.generator</groupId>
      <artifactId>
mybatis-generator-maven-plugin</artifactId>
      <version>
1.3.2</version>
      <executions>
          <execution>
              <id>
Generate MyBatis Files</id>
      <goals>
     <goal>
generate</goal>
      </goals>
      <phase>
generate</phase>
      <configuration>
      <verbose>
true</verbose>
      <overwrite>
true</overwrite>
      </configuration>
   </execution>
      </executions>
     <dependencies>
  <dependency>
      <groupId>
mysql</groupId>
      <artifactId>
mysql-connector-java</artifactId>
      <version>
5.1.8</version>
  </dependency>
  <dependency>
      <groupId>
org.mybatis.generator</groupId>
      <artifactId>
mybatis-generator-core</artifactId>
      <version>
1.3.5</version>
  </dependency>
  <dependency>
      <groupId>
org.mybatis</groupId>
      <artifactId>
mybatis</artifactId>
      <version>
3.2.6</version>
  </dependency>
  <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
  <dependency>
      <groupId>
commons-codec</groupId> 
      <artifactId>
commons-codec</artifactId>
      <version>
1.9</version>
   </dependency>
</dependencies>
   </plugin>

二.(jdbc.properties)

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/数据库名字?useUnicode=true&amp;characterEncoding=utf8
user=
数据库账户
password=数据库密码
initialSize=0
maxActive=20
maxIdle=20
minIdle=1
maxWait=60000
validationQuery=SELECT 1

三.(log4j.properties)

### \u8BBE\u7F6E###
log4j.rootLogger = debug,stdout,Console
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
### \u8F93\u51FA\u4FE1\u606F\u5230\u63A7\u5236\u62AC ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### \u8F93\u51FADEBUG \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230=logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
### \u8F93\u51FAERROR \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230=logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}  [ %t\:%r ] - [ %p ]  %m%n

四.spring-mvc.xml

    <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->  
    <!-- 自动扫描且只扫描@Controller -->

    <context:component-scan base-package="com.futher.school.controller" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
    </context:component-scan>
     
    <mvc:annotation-driven content-negotiation-manager="contentNegotiationManager">
  <mvc:message-converters register-defaults="true">
        <!-- 将StringHttpMessageConverter的默认编码设为UTF-8 -->
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
              <constructor-arg value="UTF-8"/>
        </bean>
 </mvc:message-converters>

    </mvc:annotation-driven>

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">    
        <property name="messageConverters">    
            <list>    
                <ref bean="mappingJackson2HttpMessageConverter" />    
            </list>    
        </property>    
    </bean>

    
    <bean id="mappingJackson2HttpMessageConverter"  class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">    
        <property name="supportedMediaTypes">    
            <list>    
                <value>text/html;charset=UTF-8</value>    
                <value>text/json;charset=UTF-8</value>    
                <value>application/json;charset=UTF-8</value>    
            </list>    
        </property>    
    </bean>  


    <!-- REST中根据URL后缀自动判定Content-Type及相应的View -->
    <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <property name="mediaTypes">
            <value>
                json=application/json
                xml=application/xml
            </value>
        </property>
    </bean>


    <!--静态资源-->
    <!-- 对静态资源文件的访问 支持访问WEB-INF目录 -->
    <mvc:resources mapping="/static/**" location="/static/" />

    <!-- 为404界面,500界面做准备-->
    <mvc:resources mapping="/errorpage/*" location="/errorpage/" />
           <!-- 使用thymeleaf解析 -->
    <bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
        <property name="prefix" value="/WEB-INF/"/>
        <property name="suffix" value=".html"/>
        <property name="templateMode" value="HTML"/>
        <property name="cacheable" value="false"/>
        <property name="characterEncoding" value="UTF-8"/>
    </bean>

    <bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
        <property name="templateResolver" ref="templateResolver"/>
    </bean>

    <bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
        <property name="templateEngine" ref="templateEngine"/>
        <property name="characterEncoding" value="UTF-8"/> 
    </bean>
      
    <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->  
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
        <!-- 默认编码 -->  
        <property name="defaultEncoding" value="utf-8" />    
        <!-- 文件大小最大值 -->  
        <property name="maxUploadSize" value="10485760000" />    
        <!-- 内存中的最大值 -->  
        <property name="maxInMemorySize" value="40960" />    
    </bean>
<!-- 控制器异常处理 -->
    <bean id="exceptionHandlerExceptionResolver" class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
    </bean>

五.(spring-mybatis.xml)

    <!-- 自动扫描 -->  
    <context:component-scan base-package="com.futher.school.service"  use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    </context:component-scan> 

 
    <!-- 引入配置文件 -->  
    <bean id="propertyConfigurer"  
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location" value="classpath:jdbc.properties" />  
    </bean>  


  <!-- 生成验证码 -->
<!--  查看配置的属性: http://blog.csdn.net/extraordinarylife/article/details/54924572 -->
<!--模仿的: http://blog.csdn.net/chengxuzaza/article/details/60884957 -->
  <bean id="defaultKaptcha" class="com.google.code.kaptcha.impl.DefaultKaptcha">  
        <property name="config">  
            <bean class="com.google.code.kaptcha.util.Config">  
                <constructor-arg>  
                    <props>  
                        <!-- 验证码宽度 -->  
                        <prop key="kaptcha.image.width">80</prop>  
                        <!-- 验证码高度 -->  
                        <prop key="kaptcha.image.height">29</prop>  
                        <!-- 生成验证码内容范围 -->  
                        <prop key="kaptcha.textproducer.char.string">0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ</prop>  
                        <!-- 验证码个数 -->  
                        <prop key="kaptcha.textproducer.char.length">4</prop>  
                        <!-- 是否有边框 -->  
                        <prop key="kaptcha.border">no</prop>  
                        <!-- 边框颜色 -->  
                        <prop key="kaptcha.border.color">105,179,90</prop>  
                        <!-- 边框厚度 -->  
                        <prop key="kaptcha.border.thickness">1</prop>  
                        <!-- 验证码字体颜色 -->  
                        <prop key="kaptcha.textproducer.font.color">black</prop>  
                        <!-- 验证码字体大小 -->  
                        <prop key="kaptcha.textproducer.font.size">25</prop>  
                        <!-- 验证码所属字体样式 -->  
                        <prop key="kaptcha.textproducer.font.names">楷体</prop>  
                        <!-- 干扰线颜色 -->  
                        <prop key="kaptcha.noise.color">gray</prop>  
                        <!-- 验证码文本字符间距 -->  
                        <prop key="kaptcha.textproducer.char.space">3</prop>  
                        <!-- 图片样式 :阴影-->  
                        <prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.ShadowGimpy</prop>  
                    </props>  
                </constructor-arg>  
            </bean>  
        </property>  
    </bean> 
 

    <!-- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">-->

    <!--使用dbcp连接数据库 -->

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"  
       init-method="init"  destroy-method="close">  
        <property name="driverClassName" value="${driver}" />  
        <property name="url" value="${url}" />  
        <property name="username" value="${user}" />  
        <property name="password" value="${password}" />  
        <!-- 初始化连接大小 -->  
        <property name="initialSize" value="${initialSize}"></property>  
        <!-- 连接池最大数量 -->  
        <property name="maxActive" value="${maxActive}"></property>  
        <!-- 连接池最大空闲 -->  
        <property name="maxIdle" value="${maxIdle}"></property>  
        <!-- 连接池最小空闲 -->  
        <property name="minIdle" value="${minIdle}"></property>  
        <!-- 获取连接最大等待时间 -->  
        <property name="maxWait" value="${maxWait}"></property>
        <property name="validationQuery" value="${validationQuery}" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />
        <property name="testWhileIdle" value="true" />
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="180000" />
        <!-- 打开removeAbandoned功能 -->
        <property name="removeAbandoned" value="true" />
        <!-- 1800秒,也就是30分钟 -->
        <property name="removeAbandonedTimeout" value="1800" />
        <!-- 关闭abanded连接时输出错误日志 -->
        <property name="logAbandoned" value="true" />
        <!-- 监控数据库 -->
        <!-- <property name="filters" value="stat" /> -->
        <property name="filters" value="mergeStat" />  
    </bean>  
  
    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource" />

<!--          加载mybatis配置文件 -->
        <property name="configLocation" value="classpath:mybatis-configuration.xml"></property>  

        <!-- 自动扫描mapping.xml文件 -->  
         <property name="mapperLocations" value="classpath:mappers/*.xml"></property>
<!--         <property name="mapperLocations" value="classpath:com/cn/hnust/mapping/*.xml"></property>   -->
    </bean>  
  
    <!-- DAO接口所在包名,Spring会自动查找其下的类 -->  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
        <property name="basePackage" value="com.futher.school.dao" />  
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
    </bean>  
  
    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->  
    <bean id="transactionManager"  
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    </bean>

六.(mybatis-configuration.xml)

<!DOCTYPE configuration

  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  
  <!-- 指定Mybatis使用log4j -->
  <settings>
     <setting name="logImpl" value="LOG4J"/>
  </settings>
  
  <typeAliases>
    <!-- 设置别名 -->
  <typeAlias type="包名.实体类名" alias="自定义名字"/>
  <typeAlias type="java.lang.Integer" alias="int"/>
  <typeAlias type="java.lang.String" alias="String"/>
  <typeAlias type="java.util.HashSet" alias="HashSet"/>
  <typeAlias type="java.util.List" alias="List"/>
  </typeAliases>


</configuration>

七.(mybatis逆向工程-generatorConfig.xml)

<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>


<!--  <properties  resource="classpath:jdbc.properties"/> -->
  <context id="DB2Tables" targetRuntime="MyBatis3">
    <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
    </commentGenerator>


    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
        connectionURL="jdbc:mysql://localhost:3306/数据库名?useUnicode=true&amp;characterEncoding=utf8"
        userId="数据库账户"
        password="数据库密码">
    </jdbcConnection>

    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>
    
<!-- 指定Javabean生成的位置 -->
    <javaModelGenerator targetPackage="com.futher.school.entity" targetProject=".\src\main\java">

<!--targetPackage="实体类所在包的名字"   实际位置 .\src\main\java\com.futher.school.entity 下面-->
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>


<!-- 指定SQL映射文件生成的位置 -->
    <sqlMapGenerator targetPackage="mappers"  targetProject=".\src\main\resources">

<!--targetPackage="实体类所在包的名字"   实际位置 .\src\main\resources\mappers 下面-->
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

    <javaClientGenerator type="XMLMAPPER" targetPackage="com.futher.school.dao"  targetProject=".\src\main\java">

      <!--targetPackage="dao层所在包的名字"   实际位置 .\src\main\java\com.futher.school.dao 下面-->
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

    <table tableName="数据库表名" domainObjectName="实体类名" ></table>


  </context>


</generatorConfiguration>

以上就是所有的SSM+thymeleaf+mybatis逆向工程的所有配置

八.(下面讲mybatis的逆向工程操作)

运用maven指令生成逆向工程

项目右键->run as->maven build...,Goals:中输入mybatis-generator:generate-run

九.(验证码的使用)

@RequestMapping("/kaptcha")  
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception{  
        response.setDateHeader("Expires",0);  
        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");  
        response.addHeader("Cache-Control", "post-check=0, pre-check=0");  
        response.setHeader("Pragma", "no-cache");  
        response.setContentType("image/jpeg");  
        String capText = kaptchaProducer.createText();  
        session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);  
        BufferedImage bi = kaptchaProducer.createImage(capText);  
        ServletOutputStream out = response.getOutputStream();  
        ImageIO.write(bi, "jpg", out);  
        try {  
            out.flush();  
        } finally {  
            out.close();  
        }  
        return null;  
    }  


<div class="proof"><img id="kaptchaImage" th:src="@{/kaptcha}" οnclick="changeVerifyCode()"></div>


<script type="text/javascript">
    function changeVerifyCode() {  
        var time=new Date().getTime();  
        document.getElementById("kaptchaImage").src="kaptcha?d="+time;//为了不让验证码缓存,为了安全起见,需要次次都刷新  
        } 
 </script>

若是哪里有理解错误的或写错的地方,望各位读者评论或者私信指正,不胜感激。

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值