Java 框架的一些文件配置

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

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

🥈 系列专栏:【Java框架】   

🥉与这篇相关的文章:            

 【JAVAEE框架】MyBatis与Spring的整合(上)【JAVAEE框架】MyBatis与Spring的整合(上)_程序猿追的博客-CSDN博客
【JAVAEE框架】浅谈 AOP 及代码实现【JAVAEE框架】浅谈 AOP 及代码实现_程序猿追的博客-CSDN博客
【JAVAEE框架】浅谈 Spring 框架的两大核心思想 AOP 与 IOP【JAVAEE框架】浅谈 Spring 框架的两大核心思想 AOP 与 IOP_程序猿追的博客-CSDN博客

目录

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

<!--    配置别名-->
    <typeAliases>
        <package name="com.itxzw.user.model"/>
    </typeAliases>

1、动态SQL 

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

配置某某插件
​
eg:
<!--    配置分页插件-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <property name="helperDialect" value="mysql"/>
        </plugin>
    </plugins>
 

二、Spring 文件配置

Spring 引入外部文件

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

或者以这种形式

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

说明

只需要在spring的配置文件里添加一句:<context:property-placeholder?location="classpath:jdbc.properties"/>?即可,
这里location值为参数配置文件的位置,参数配置文件通常放在src目录下,而参数配置文件的格式跟java通用的参数配置文件相同,即键值对的形式

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

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

1、SqlSessionFactoryBean

<!--    在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的,
        而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建-->
<!--    sqlSessionFactory是mybatis中的一个中要的对象,通俗讲它是用来创建sqlSession对象的,而sqlSession用来操作数据库的。-->
    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/> 
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="mapperLocations">
            <list>
                <value>classpath:com/itxzw/*/dao/mapper/*.xml</value>
            </list>
        </property>
    </bean>

2、MapperScannerConfigurer



   <!--4、配置MapperScannerConfigurer,自动扫描指定包下的Mapper接口,并将它们直接注册为MapperFactoryBean-->
 

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.itxzw.*.dao"/>
    </bean>
​
<!--配置事务-->
<!--配置事务管理Bean-->
​
<!--    对JDBC(Java Data Base Connectivity,java数据库连接)进行事务管理,在spring中是对JdbcTemplate进行事务管理-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
<!--    <tx:annotation-driven/> 是开启事务注解扫描 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
​
<!--    spring注解扫描-->
<!--    对于spring 不用管理控制层的东西,都交给springmvc,里面的都要com.itxzw,除了com.itxzw.util,com.itxzw.config,Controller-->
    <context:component-scan base-package="com.itxzw">
        <context:exclude-filter type="regex" expression="com.itxzw.util,com.itxzw.config"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

3、InternalResourceViewResolver 视图解析器

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/jsp/"/>
        <property name="suffix" value=".jsp" />
    </bean>
    
    当处理器返回“index”时,InternalResourceViewResolver解析器会自动添加前缀和后缀:/WEB-INF/jsp/index.jsp
    如果要使用 .html文件的话,要加上
    <!--mvc静态资源放行-->
    <mvc:resources location="/static/" mapping="/static/**"/>

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

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

<!--全局异常解析器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionAttribute" value="message" />
    <property name="exceptionMappings">
        <props>
            <prop key="java.lang.RuntimeException">error</prop>
        </props>
    </property>
</bean>

4、CommonsMultipartResolver 文件上传解析器

<!--文件上传解析器-->
<!--bean的id就叫multipartResolver,因为有其他的bean通过这个名字依赖-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--设置上传的文件每个允许大小-->
    <property name="maxUploadSizePerFile"  value="1000000"/>
    <!--设置上传的文件编码格式-->
    <property name="defaultEncoding" value="utf8"/>
</bean>

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

5、ConversionServiceFactoryBean

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

<bean id="conversionService2" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="com.itxzw.config.StringToDateConvertor">
                <property name="pattern" value="yyyy-MM-dd"/>
            </bean>
        </set>
    </property>
</bean>

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

eg:

    <!--启动SpringMVC注解 -->
    <!--启动SpringMVC注解,注解驱动属性-->
    <mvc:annotation-driven conversion-service="conversionService2">
<!--    <mvc:annotation-driven>-->
        <mvc:message-converters>
            <!--消息转换器StringHttpMessageConverter,设置字符编码为UTF-8-->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=utf8</value>
                    </list>
                </property>
            </bean>
​
            <!--消息转换器FastJson-->
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=utf8</value>
                    </list>
                </property>
                <property name="fastJsonConfig">
                    <bean class="com.alibaba.fastjson.support.config.FastJsonConfig">
                        <property name="serializerFeatures">
                            <list>
                                <!--yyyy-MM-dd HH:mm:ss-->
                                <value>WriteDateUseDateFormat</value>
                                <!--禁止循环引用的-->
                                <value>DisableCircularReferenceDetect</value>
                            </list>
                        </property>
                    </bean>
                </property>
            </bean>
​
        </mvc:message-converters>
    </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、如何自定义拦截器?

public class LoginInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        HttpSession session = request.getSession();
        Object loginUser = session.getAttribute("loginUser");

        if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){
            if (loginUser == null){
                response.setHeader("Content-Type","text/plain;charset=utf8");
                response.getWriter().write("FAILURE");
                return false;
            }
        }

        if (loginUser == null){
            response.sendRedirect(request.getContextPath() + "/login.jsp");
            return false;
        }

        return true;
    }
}

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

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

<!--    配置springmvc拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/static/**"/>
            <mvc:exclude-mapping path="/user/login"/>
            <bean class="com.itxzw.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

4、通过interceptor类设置拦截器

<!--mvc静态资源放行-->
<mvc:resources location="/static/" mapping="/static/**"/>

<!--spring注解扫描,对弈springmvc,在com.itxzw里面,我们只要 include里面的,其他的都不要-->
<context:component-scan base-package="com.itxzw" use-default-filters="true">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

四、web.xml 文件配置

<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springMVC.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<filter>
    <filter-name></filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf8</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

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

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

1、dispatcherServlet: 视图解析器

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿追

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值