Spring mvc--杂记

 1、spring  事物处理机制

    需要抛出异常事物处理机制才能捕捉到

<!-- 配置事务 -->  
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    </bean>
    <!-- 使用annotation定义事务-->
	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
	<aop:config proxy-target-class="true">
		<aop:pointcut id="servicePointcut" expression="execution(service.impl..*(..))" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut" order="2"/>
		<aop:advisor advice-ref="dataSourceExchange" pointcut-ref="servicePointcut" order="1"/>				
	</aop:config>

 

    public Result insertEnumber(EnumberDto enumberDto) throws Exception {
    	Result result = new Result();
    	List<EnumberDetailDto> detailList = new ArrayList<EnumberDetailDto>();
    	int num = enumberDto.getQuantity();			
    	

		for (int i = 0; i < num; i++) {
			EnumberDetailDto detailBean = new EnumberDetailDto();
			
			detailBean.setBatchNo(enumberDto.getBatchNo());
			detailBean.seteCode(DateUtils.getTimestampStr() + new Random().nextInt(10000));	
			detailBean.setState("NOTOUT");
			detailBean.setAgentId(enumberDto.getAgentId());	
			detailBean.setAgentName(enumberDto.getAgentName());
			detailBean.setCreateBy(enumberDto.getCreateBy());
			detailBean.setModifyBy(enumberDto.getModifyBy());
			
			detailList.add(detailBean);
		}
		
		enumberDao.insertEnumber(enumberDto);
		enumberDetailDao.insertEnumberDetailList(detailList);
		result.setSuccess(true);
		
		return result;
    }

 

2、将对象自动封装成json传到前台

    在方法上加入@ResponseBody,同时方法返回值为实体对象,spring会自动将对象转换为json格式,并返回到客户端。如下所示:

@RequestMapping("/json1")
@ResponseBody
public Demo json1() {
    Demo demo=new Demo();
    demo.setBirthday(new Date());
    demo.setCreateTime(new Date());
    demo.setHeight(170);
    demo.setName("tomcat"); 
    demo.setRemark("json测试"); 
    demo.setStatus((short)1); 
    return demo;
}

 

 3、避免IE执行AJAX时,返回JSON出现下载文件的配置

 4、post提交中文乱码解决方案

 

<filter>  
	<filter-name>CharacterEncodingFilter</filter-name>  
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
	<init-param>  
		<param-name>encoding</param-name>  
		<param-value>utf-8</param-value>  
	</init-param>  
</filter>  
<filter-mapping>  
	<filter-name>CharacterEncodingFilter</filter-name>  
	<url-pattern>/*</url-pattern>  
</filter-mapping>
 

 5、想要通过AppContextUtil.getBean("***")获取对象,必须将该对象对应的路径配置到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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context" 
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
    http://www.springframework.org/schema/tx   
    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd   
    http://www.springframework.org/schema/context   
    http://www.springframework.org/schema/context/spring-context-3.1.xsd">

	<!-- 引入jdbc配置文件 -->
	<context:property-placeholder location="/WEB-INF/jdbc.properties" />
	
	<!-- 要通过 AppContextUtil.getBean("privilegeService")获得service这个一定要在Mybatis配置文件中-->
   	<context:component-scan base-package="com.service" />
   	
	<!--创建jdbc数据源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
	
	<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory" />
	</bean>
	
	<!-- 创建session工厂 -->	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- 自动扫描com/dao/impl/下的*.Impl文件, 省掉mybatis-config.xml里的手工配置 -->
		<property name="mapperLocations" value="classpath*:/com/dao/impl/*Impl.xml"/>
	</bean>
	
	<!-- 扫描,自动装配com.dao下的类(映射扫描) -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.dao" />
	</bean>
		
	<!--把mybatis的事务交由spring去管理 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!--注意:此处的数据源要与sqlSessionFactory中的dataSource相同 -->
		<property name="dataSource" ref="dataSource" />
	</bean>

	<!-- 注解方式配置事物 -->
	<tx:annotation-driven />
</beans>

 说明: 要想通过 AppContextUtil.getBean("privilegeService")获得service,一定洋将

       <context:component-scan base-package="com.service" />,配置到mybatis配置数据员的配置文件中,如上面例子。

 

  6、下载文件

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;

public class FileDown {
	/**
	 * 下载pdf
	 * @param pictureShoppertrakAddress pdf地址 
	 * @param pdfName pdf文件名
	 */
	public void downPdfFile(String pictureShoppertrakAddress,String pdfName){
		HttpServletResponse response = ServletActionContext.getResponse();
        response.setCharacterEncoding("utf-8");
        response.setContentType("multipart/form-data");
		//pdfName = "activityPdf_1441441792005.pdf"
        response.setHeader("Content-Disposition", "attachment;fileName=" + pdfName);
        try {
			//pictureShoppertrakAddress = "E:/shoppertrak/file";
            InputStream inputStream = new FileInputStream(new File(pictureShoppertrakAddress + File.separator + pdfName));
            
            OutputStream os = response.getOutputStream();
            byte[] b = new byte[2048];
            int length;
            while ((length = inputStream.read(b)) > 0) {
                os.write(b, 0, length);
            }
 
            // 这里主要关闭。
            os.close();
            inputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
	}
}

 

7、springMVC组件

    @Component:组件,项目启动后加载累

    @Scheduled(fixedRate = 50000):延时,XXX毫秒;

 

package com.wanrong.task.jobs;

import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
......

/**
 * 类ScheduledTasks.java的实现描述:TODO 类实现描述
 */
@Component
public class ScheduledTasks {
    protected Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    TaskInfoService  taskInfoService;

    @Scheduled(fixedRate = 50000)
    public void taskStart() {
        QueryResult<TaskInfoDTO> result = taskInfoService.queryTaskInfoAll();
        // 判断是否成功
        if (result.isSuccess()) {
            List<TaskInfoDTO> taskList = result.getResults();
            for (TaskInfoDTO taskInfo : taskList) {
                if (taskInfo.getStatus() == 1) {
                    boolean flag = QuartzManager.checkExists(taskInfo.getJobName(), taskInfo.getJobGroup());
                    if (!flag) {
                        QuartzManager.addJob(taskInfo.getJobName(), taskInfo.getJobGroup(), taskInfo.getTriggerName(),taskInfo.getTriggerGroupName(), taskInfo.getProcessClass(), taskInfo.getCronExpression());
                        logger.info("------" + taskInfo.getJobName() + "----" + taskInfo.getJobGroup() + "-------add succeed-----");
                    }
                }
            }
        } else {
            logger.error("call taskInfoService.queryTaskInfoAllWithCached error");
        }
    }
}

 

8、两个对象之间的属性拷贝

org.springframework.beans.BeanUtils.copyProperties(msg, cardInfo);

    说明:将msg对象的属性拷贝到cardInfo对象中

2、将对象自动封装成json传到前台

    在方法上加入@ResponseBody,同时方法返回值为实体对象,spring会自动将对象转换为json格式,并返回到客户端。如下所示:

@RequestMapping("/json1")
@ResponseBody
public Demo json1() {
    Demo demo=new Demo();
    demo.setBirthday(new Date());
    demo.setCreateTime(new Date());
    demo.setHeight(170);
    demo.setName("tomcat"); 
    demo.setRemark("json测试"); 
    demo.setStatus((short)1); 
    return demo;
}

 

 3、避免IE执行AJAX时,返回JSON出现下载文件的配置

 4、post提交中文乱码解决方案

 

<filter>  
	<filter-name>CharacterEncodingFilter</filter-name>  
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
	<init-param>  
		<param-name>encoding</param-name>  
		<param-value>utf-8</param-value>  
	</init-param>  
</filter>  
<filter-mapping>  
	<filter-name>CharacterEncodingFilter</filter-name>  
	<url-pattern>/*</url-pattern>  
</filter-mapping>
 

 5、想要通过AppContextUtil.getBean("***")获取对象,必须将该对象对应的路径配置到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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context" 
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
    http://www.springframework.org/schema/tx   
    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd   
    http://www.springframework.org/schema/context   
    http://www.springframework.org/schema/context/spring-context-3.1.xsd">

	<!-- 引入jdbc配置文件 -->
	<context:property-placeholder location="/WEB-INF/jdbc.properties" />
	
	<!-- 要通过 AppContextUtil.getBean("privilegeService")获得service这个一定要在Mybatis配置文件中-->
   	<context:component-scan base-package="com.service" />
   	
	<!--创建jdbc数据源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
	
	<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory" />
	</bean>
	
	<!-- 创建session工厂 -->	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- 自动扫描com/dao/impl/下的*.Impl文件, 省掉mybatis-config.xml里的手工配置 -->
		<property name="mapperLocations" value="classpath*:/com/dao/impl/*Impl.xml"/>
	</bean>
	
	<!-- 扫描,自动装配com.dao下的类(映射扫描) -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.dao" />
	</bean>
		
	<!--把mybatis的事务交由spring去管理 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!--注意:此处的数据源要与sqlSessionFactory中的dataSource相同 -->
		<property name="dataSource" ref="dataSource" />
	</bean>

	<!-- 注解方式配置事物 -->
	<tx:annotation-driven />
</beans>

 说明: 要想通过 AppContextUtil.getBean("privilegeService")获得service,一定洋将

       <context:component-scan base-package="com.service" />,配置到mybatis配置数据员的配置文件中,如上面例子。

 

  6、下载文件

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;

public class FileDown {
	/**
	 * 下载pdf
	 * @param pictureShoppertrakAddress pdf地址 
	 * @param pdfName pdf文件名
	 */
	public void downPdfFile(String pictureShoppertrakAddress,String pdfName){
		HttpServletResponse response = ServletActionContext.getResponse();
        response.setCharacterEncoding("utf-8");
        response.setContentType("multipart/form-data");
		//pdfName = "activityPdf_1441441792005.pdf"
        response.setHeader("Content-Disposition", "attachment;fileName=" + pdfName);
        try {
			//pictureShoppertrakAddress = "E:/shoppertrak/file";
            InputStream inputStream = new FileInputStream(new File(pictureShoppertrakAddress + File.separator + pdfName));
            
            OutputStream os = response.getOutputStream();
            byte[] b = new byte[2048];
            int length;
            while ((length = inputStream.read(b)) > 0) {
                os.write(b, 0, length);
            }
 
            // 这里主要关闭。
            os.close();
            inputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
	}
}

 

7、springMVC组件

    @Component:组件,项目启动后加载累

    @Scheduled(fixedRate = 50000):延时,XXX毫秒;

 

package com.wanrong.task.jobs;

import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
......

/**
 * 类ScheduledTasks.java的实现描述:TODO 类实现描述
 */
@Component
public class ScheduledTasks {
    protected Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    TaskInfoService  taskInfoService;

    @Scheduled(fixedRate = 50000)
    public void taskStart() {
        QueryResult<TaskInfoDTO> result = taskInfoService.queryTaskInfoAll();
        // 判断是否成功
        if (result.isSuccess()) {
            List<TaskInfoDTO> taskList = result.getResults();
            for (TaskInfoDTO taskInfo : taskList) {
                if (taskInfo.getStatus() == 1) {
                    boolean flag = QuartzManager.checkExists(taskInfo.getJobName(), taskInfo.getJobGroup());
                    if (!flag) {
                        QuartzManager.addJob(taskInfo.getJobName(), taskInfo.getJobGroup(), taskInfo.getTriggerName(),taskInfo.getTriggerGroupName(), taskInfo.getProcessClass(), taskInfo.getCronExpression());
                        logger.info("------" + taskInfo.getJobName() + "----" + taskInfo.getJobGroup() + "-------add succeed-----");
                    }
                }
            }
        } else {
            logger.error("call taskInfoService.queryTaskInfoAllWithCached error");
        }
    }
}

 

8、两个对象之间的属性拷贝

org.springframework.beans.BeanUtils.copyProperties(msg, cardInfo);

    说明:将msg对象的属性拷贝到cardInfo对象中

猜你喜欢

转载自x125858805.iteye.com/blog/2106110