SSM框架--小功能整合

SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)之后,还需要配置一些功能,提供常用的开发功能。

1. 静态文件过滤

 两种方式,分别是在spring-mvc配置文件中配置mvc:resources或者在web.xml中配置defaultservlet的优先过滤的项。
    <!-- 静态资源解析 js,css,img -->
    <mvc:resources location="/source/" mapping="/source/*"/>
    <mvc:resources location="/source/" mapping="*.html"/>
<!-- Servlet解析 js,css,img -->
<servlet-mapping>  
    <servlet-name>default</servlet-name>  
    <url-pattern>*.html</url-pattern>  
  </servlet-mapping>
  <servlet-mapping>  
    <servlet-name>default</servlet-name>  
    <url-pattern>*.htm</url-pattern>  
  </servlet-mapping>
  <servlet-mapping>  
    <servlet-name>default</servlet-name>  
    <url-pattern>*.css</url-pattern>  
  </servlet-mapping>
  <servlet-mapping>  
    <servlet-name>default</servlet-name>  
    <url-pattern>*.js</url-pattern>  
  </servlet-mapping>
  <servlet-mapping>  
    <servlet-name>default</servlet-name>  
    <url-pattern>*.jpg</url-pattern>  
  </servlet-mapping>
  <servlet-mapping>  
    <servlet-name>default</servlet-name>  
    <url-pattern>*.png</url-pattern>  
  </servlet-mapping>
  <servlet-mapping>  
    <servlet-name>default</servlet-name>  
    <url-pattern>*.gif</url-pattern>  
  </servlet-mapping>

2. 文件上传
配置此文件后可以直接绑定MultipartFile 对象操作上传的文件

public String uploadFile(@RequestParam("uploadTest")MultipartFile upFile) throws IOException{  
        if(upFile!=null){
            String orgName=upFile.getOriginalFilename();
            String newName=UUID.randomUUID()+(orgName.length()>0?orgName.substring(orgName.lastIndexOf(".")):"");
            File newFile=new File("D:\\pic\\"+newName);
            if(!newFile.exists()){
                newFile.createNewFile();
            }
            upFile.transferTo(newFile);
            return "success";
        }           
        return "failure";
    }
    <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
    <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>

3. 返回JSON数据

    <!-- 启用AnnotationMethodHandlerAdapter 否则json乱码-->
    <mvc:annotation-driven></mvc:annotation-driven> 
    <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
    <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJacksonHttpMessageConverter" />   <!-- JSON转换器 -->
            </list>
        </property>
    </bean>

4. SQL注解
可以自动绑定SQL和参数,除XML配置SQL语句外,相对更简单的方法。

    @Select("SELECT * FROM staff_info WHERE StaffID=#{staffid}")
    Map selectByAnnotation(String staffid);

5. 事务管理
注解配置:@Transactional注解后的参数可以设置事务隔离级别

    @Override
    @Transactional
    public int updateStaffNameAndPhone(String phone, String staffName) {

        StaffInfo staff=new StaffInfo();
        staff.setStaffphonenumber(phone);
        StaffInfoExample example=new StaffInfoExample();
        Criteria criteria=example.createCriteria();
        criteria.andStaffidEqualTo("20151402002");
        staffInfoMapper.updateByExampleSelective(staff, example);

        int i=10/0;

        StaffInfo staff1=new StaffInfo();
        staff1.setStaffname(staffName);
        StaffInfoExample example1=new StaffInfoExample();
        Criteria criteria1=example1.createCriteria();
        criteria1.andStaffidEqualTo("20151402002");
        staffInfoMapper.updateByExampleSelective(staff1, example1);

        return 0;
    }
    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 事务注解驱动,标注@Transactional的类和方法将具有事务性 -->  
    <tx:annotation-driven transaction-manager="transactionManager" /> 

文件配置:可直接批量配置方法

    <!--  配置参与事务的类 -->
    <tx:advice id="TestAdvice" transaction-manager="transactionManager">
        <tx:attributes>
          <tx:method name="update*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <aop:pointcut id="allTestServiceMethod" expression="execution(* com.model.service.*.*(..))"/>
        <aop:advisor pointcut-ref="allTestServiceMethod" advice-ref="TestAdvice" />
    </aop:config> 

附:
Propagation :key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。

6. 拦截器

spring-mvc中配置拦截器,在前面的拦截器先执行,继承HandlerInterceptor接口,实现该接口的3个方法。preHandle:处理请求Handle之前执行;postHandle:处理请求Handle之后执行;afterCompletion:最后执行,Handle已经处理完成,比如已经返回数据之后执行。
执行顺序:嵌套执行,先执行第一个拦截器,在第一个拦截器内执行第二个.

<!-- 执行两个拦截器方法的结果LoginInterceptor 在前 -->
LoginInterceptor preHandle
PermissionInterceptor preHandle
PermissionInterceptor postHandle
LoginInterceptor postHandle
PermissionInterceptor afterCompletion
LoginInterceptor afterCompletion
    <mvc:interceptors>
        <mvc:interceptor>
        <!--默认拦截的连接-->
            <mvc:mapping path="/**"/>
            <!--不拦截的连接-->
            <mvc:exclude-mapping path="/staff/show"/>
            <bean class="com.model.interceptor.LoginInterceptor"></bean>
        </mvc:interceptor>

        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/staff/show"/>
            <bean class="com.model.interceptor.PermissionInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
            Object arg2) throws Exception {
        // TODO Auto-generated method stub
        System.out.println("preHandle");
        String testString=arg0.getParameter("interceptor");
        if(testString==null||!testString.equals("OK"))return false;
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
            Object arg2, ModelAndView arg3) throws Exception {
        System.out.println("postHandle");

    }

    @Override
    public void  afterCompletion(HttpServletRequest request,
            HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        System.out.println("afterCompletion");

    }
}

搭配之前转载的SSM框架搭建的文章,基本的配置与功能都可以实现了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值