• Java 框架的一些文件配置


     哈喽~大家好,之前已经记录了Spring、SpringMvc、Mybatis等框架的学习,对于这些框架的 xx 文件配置还是很多的,所以专门写了一篇关于一些常用配置的文,也为后面的SpringBoot 作出铺垫。

     🥇个人主页:个人主页​​​​​             

    🥈 系列专栏:【Java框架】   

    🥉与这篇相关的文章:            

    目录

    一、MyBatis 文件配置

    1、动态SQL 

    二、Spring 文件配置

    1、SqlSessionFactoryBean

    2、MapperScannerConfigurer

    3、InternalResourceViewResolver 视图解析器

    4、CommonsMultipartResolver 文件上传解析器

    5、ConversionServiceFactoryBean

    三、SpringMvc 文件配置

    1、StringHttpMessageConverter

    2、配置springmvc拦截器

    3、如何自定义拦截器?

    4、通过interceptor类设置拦截器

    四、web.xml 文件配置

    1、dispatcherServlet: 视图解析器


    一、MyBatis 文件配置

    configuration 配置文件的根元素
    settings 定义mybatis的一些全局属性
    ​
    
    1.   <settings>
    2.       <setting name="logImpl" value="LOG4J"/>
    3.       <setting name="autoMappingBehavior" value="FULL"/>
    4.       <setting name="jdbcTypeForNull" value="NULL"/>
    5.       <setting name="cacheEnabled" value="true"/>
    6.   settings>
        
    PARTIAL[默认],FULL[全匹配],NONE[不匹配]
    logImpl 是打印日志,日志可以帮我们把重要的信息输出出来,这样出错的时候,可以借助日志可以查看哪里有问题
    ​
    jdbcTypeForNull
    原因:mybatis insert空值报空值异常,但是在pl/sql不会提示错误,主要原因是mybatis无法进行转换,在执行SQL时MyBatis会自动通过对象中的属性给SQL中参数赋值,它会自动将Java类型转换成数据库的类型。而一旦传入的是null它就无法准确判断这个类型应该是什么,就有可能将类型转换错误,从而报错。
    解决方法:使用  对参数进行NULL判断,针对这些可能为空的字段,通过jdbcType属性手动指定其转换时用到的类型。一般情况下,我们没有必要对每个字段去识别/判断它是否可以为空,而是将所有的字段都当做可以为空,全部手动设置转换类型。
    ​
    ​

    1.   <typeAliases>
    2.       <package name="com.itxzw.user.model"/>
    3.   typeAliases>

    1、动态SQL 

        
        在 MyBatis 的 sql 映射配置文件中,需要使用 paramterType、resultType 来设置 sql 语句的输入输出参数,一般参数都是基本的数据类型或封装类型,但都需要声明该类型的全路径,java.lang.String,或者 cn.com.mybatis.pojo.User, 这时就可以通过 typeAliases 别名来设置,简化复杂度。
        eg:没有配置typeAliases的动态sql
    
    1. <select id="findUserByUsername" parameterType="java.lang.String" resultType="com.itxzw.user.model.User">
    2.   SELECT * FROM USER WHERE username LIKE '%${value}%'
    3. select>
    ​
    配置了之后
    
    1. <select id="findUserByUsername" parameterType="java.lang.String" resultType="User">
    2.   SELECT * FROM USER WHERE username LIKE '%${value}%'
    3. select>
    直接减少 resultType 里面的代码量
    
    配置某某插件
    ​
    eg:
    
    1.   <plugins>
    2.       <plugin interceptor="com.github.pagehelper.PageInterceptor">
    3.           <property name="helperDialect" value="mysql"/>
    4.       plugin>
    5.   plugins>
     
    

    二、Spring 文件配置

    Spring 引入外部文件

    1. <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    2.   <property name="location" value="jdbc.properties" />
    3. bean>-->

    或者以这种形式

    <context:property-placeholder location="classpath:jdbc.properties" system-properties-mode="NEVER"/>

    说明

    只需要在spring的配置文件里添加一句:?即可,
    这里location值为参数配置文件的位置,参数配置文件通常放在src目录下,而参数配置文件的格式跟java通用的参数配置文件相同,即键值对的形式

    配置数据源(记得要导入pom依赖)

    1. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    2.   <property name="driverClassName" value="${driverClassName}"/>
    3.   <property name="url" value="${url}"/>
    4.   <property name="username" value="${username}"/>
    5.   <property name="password" value="${password}"/>
    6. bean>

    1、SqlSessionFactoryBean

    
    
    
    1.   <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
    2.       <property name="dataSource" ref="dataSource"/>
    3.       <property name="configLocation" value="classpath:mybatis-config.xml"/>
    4.       <property name="mapperLocations">
    5.           <list>
    6.               <value>classpath:com/itxzw/*/dao/mapper/*.xmlvalue>
    7.           list>
    8.       property>
    9.   bean>

    2、MapperScannerConfigurer



      
     

    1.   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    2.       <property name="basePackage" value="com.itxzw.*.dao"/>
    3.   bean>
    
    
    
    1.   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    2.       <property name="dataSource" ref="dataSource"/>
    3.   bean>
    
        
    
    
    1.   <context:component-scan base-package="com.itxzw">
    2.       <context:exclude-filter type="regex" expression="com.itxzw.util,com.itxzw.config"/>
    3.       <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    4.   context:component-scan>

    3、InternalResourceViewResolver 视图解析器

    
            
            
        
        
        当处理器返回“index”时,InternalResourceViewResolver解析器会自动添加前缀和后缀:/WEB-INF/jsp/index.jsp
        如果要使用 .html文件的话,要加上
        
        

    SimpleMappingExceptionResolver的作用:对所有的异常进行统一处理,他将异常类名映射为视图名,即发生异常时,使用对应的视图显示异常;

    简称页面不显示报错信息,只显示一个自定义的错误页面,如:“您访问的页面去了火星了,呜呜呜”等类似的页面

    1. <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    2.   <property name="exceptionAttribute" value="message" />
    3.   <property name="exceptionMappings">
    4.       <props>
    5.           <prop key="java.lang.RuntimeException">errorprop>
    6.       props>
    7.   property>
    8. bean>

    4、CommonsMultipartResolver 文件上传解析器

    1. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    2.  
    3.   <property name="maxUploadSizePerFile" value="1000000"/>
    4.  
    5.   <property name="defaultEncoding" value="utf8"/>
    6. bean>

    MultipartResolver 用于处理文件上传,当收到请求时 DispatcherServlet 的 checkMultipart() 方法会调用 MultipartResolver 的 isMultipart() 方法判断请求中是否包含文件。如果请求数据中包含文件,则调用 MultipartResolver 的 resolveMultipart() 方法对请求的数据进行解析,然后将文件数据解析成 MultipartFile 并封装在 MultipartHttpServletRequest (继承了 HttpServletRequest) 对象中,最后传递给 Controller

    5、ConversionServiceFactoryBean

    ConversionServiceFactoryBean 格式转换器, 用于SpringMVC 绑定的格式转换

    1. <bean id="conversionService2" class="org.springframework.context.support.ConversionServiceFactoryBean">
    2.   <property name="converters">
    3.       <set>
    4.           <bean class="com.itxzw.config.StringToDateConvertor">
    5.               <property name="pattern" value="yyyy-MM-dd"/>
    6.           bean>
    7.       set>
    8.   property>
    9. bean>

    这里是时间转换的格式效果,设置好了之后我们就要把它配置到你的注解驱动属性里面去

    eg:

    1.  
    2.  
    3.   <mvc:annotation-driven conversion-service="conversionService2">
    4.       <mvc:message-converters>
    5.          
    6.           <bean class="org.springframework.http.converter.StringHttpMessageConverter">
    7.               <property name="supportedMediaTypes">
    8.                   <list>
    9.                       <value>application/json;charset=utf8value>
    10.                   list>
    11.               property>
    12.           bean>
    13.          
    14.           <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
    15.               <property name="supportedMediaTypes">
    16.                   <list>
    17.                       <value>application/json;charset=utf8value>
    18.                   list>
    19.               property>
    20.               <property name="fastJsonConfig">
    21.                   <bean class="com.alibaba.fastjson.support.config.FastJsonConfig">
    22.                       <property name="serializerFeatures">
    23.                           <list>
    24.                              
    25.                               <value>WriteDateUseDateFormatvalue>
    26.                              
    27.                               <value>DisableCircularReferenceDetectvalue>
    28.                           list>
    29.                       property>
    30.                   bean>
    31.               property>
    32.           bean>
    33.       mvc:message-converters>
    34.   mvc:annotation-driven>

    三、SpringMvc 文件配置

    1、StringHttpMessageConverter

    SpringMVC使用@ResponseBody注解,可以直接返回字符串,非常适合于响应ajax请求。但是,有时候直接返回时,会出现乱码问题。防止乱码的产生,就要加上StringHttpMessageConverter。同时设置 ajax 的消息转换器——FastJson

    2、配置springmvc拦截器

    HandlerInterceptorAdapter

    Interceptor定义: 拦截器是在面向切面编程中应用的,就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法。是基于JAVA的反射机制

    1.拦截器(Interceptor)执行顺序:

    1. 请求到达 DispatcherServlet

    2. DispatcherServlet 发送至 Interceptor ,执行 preHandle

    3. 请求达到 Controller

    4. 请求结束后,postHandle 执行

    2.拦截器(Interceptor)和过滤器(Filter)的执行顺序 过滤前->拦截前->Action处理->拦截后->过滤后

    3、如何自定义拦截器?

    1. public class LoginInterceptor extends HandlerInterceptorAdapter {
    2. @Override
    3. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    4. HttpSession session = request.getSession();
    5. Object loginUser = session.getAttribute("loginUser");
    6. if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){
    7. if (loginUser == null){
    8. response.setHeader("Content-Type","text/plain;charset=utf8");
    9. response.getWriter().write("FAILURE");
    10. return false;
    11. }
    12. }
    13. if (loginUser == null){
    14. response.sendRedirect(request.getContextPath() + "/login.jsp");
    15. return false;
    16. }
    17. return true;
    18. }
    19. }

    继承与 HandlerInterceptorAdapter 这个类,重写 preHandle 方法,并且拦截页面请求的方式(扩: 使用XMLHttpRequest (XHR)对象可以与服务器交互。您可以从URL获取数据,而无需让整个的页面刷新。这使得Web页面可以只更新页面的局部,而不影响用户的操作。XMLHttpRequest在 ajax 编程中被大量使用。)

    我们这个自定义的类叫 LoginInterceptor ,所以在SpringMVC 里面的配置是:

    
        
            
                
                
                
                
            
        

    4、通过interceptor类设置拦截器

    
    
    
    
    
        
    

    四、web.xml 文件配置

    1. <servlet>
    2. <servlet-name>dispatcherServletservlet-name>
    3. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    4. <init-param>
    5. <param-name>contextConfigLocationparam-name>
    6. <param-value>classpath:springMVC.xmlparam-value>
    7. init-param>
    8. servlet>
    9. <servlet-mapping>
    10. <servlet-name>dispatcherServletservlet-name>
    11. <url-pattern>/url-pattern>
    12. servlet-mapping>
    13. <filter>
    14. <filter-name>filter-name>
    15. <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    16. <init-param>
    17. <param-name>encodingparam-name>
    18. <param-value>utf8param-value>
    19. init-param>
    20. filter>
    21. <filter-mapping>
    22. <filter-name>characterEncodingFilterfilter-name>
    23. <url-pattern>/*url-pattern>
    24. filter-mapping>
    25. <context-param>
    26. <param-name>contextConfigLocationparam-name>
    27. <param-value>classpath:springContext.xmlparam-value>
    28. context-param>
    29. <listener>
    30. <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    31. listener>

    1、dispatcherServlet: 视图解析器

    characterEncodingFilter 是spring内置过滤器的一种,用来指定请求或者响应的编码格式。

    contextConfigLocation: 在web.xml中通过contextConfigLocation配置spring,contextConfigLocation参数定义了要装入的 Spring 配置文件。

    不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!向着明天更好的自己前进吧!

  • 相关阅读:
    云计算场景下,如何快速定位出虚拟机reboot/shutdown引发的故障
    数据结构-二叉树的线索化(C++)
    PyTorch中的多GPU训练:DistributedDataParallel
    【QT知识】在widget中的绘制事件函数
    Python 实验六 文件访问
    图形学学习笔记
    第31章_瑞萨MCU零基础入门系列教程之WIFI&蓝牙模块驱动实验
    小程序-防抖解决弹窗多次出现问题
    C++ mutex, atomic, CAS性能
    【ECharts】仪表盘指针自定义形状
  • 原文地址:https://blog.csdn.net/aasd23/article/details/127545210