SSM框架--小功能整合
来源:互联网 发布:西南政法大学王洪 知乎 编辑:程序博客网 时间:2024/06/08 20:09
在 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 preHandlePermissionInterceptor preHandlePermissionInterceptor postHandleLoginInterceptor postHandlePermissionInterceptor afterCompletionLoginInterceptor 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框架搭建的文章,基本的配置与功能都可以实现了。
- SSM框架--小功能整合
- SSM框架的整合思路&功能实现
- SSM:简单SSM框架整合
- SSM框架整合---实现简单登录注册功能
- SSM框架整合
- ssm框架整合
- SSM框架整合例子
- SSM框架整合
- SSM框架整合
- ssm框架整合
- SSM框架整合
- SSM 框架整合
- ssm框架总体整合
- SSM框架整合
- SSM 框架整合案例
- SSM框架整合
- SSM框架整合
- SSM框架整合
- 13.5. Classes That Manage Dynamic Memory
- CDOJ1598-线段树合并(2017 UESTC Training for Data Structures G)
- HDU1166敌兵布阵 分块解法,分块练习
- javascript 对象描述符
- js 检测变量是否存在
- SSM框架--小功能整合
- python解析XML文件(基础)
- 《Python黑帽子》学习笔记
- 51Nod-1613-翻硬币
- UDP协议的简单使用
- hashMap和Hashtable的区别
- codeforces 479A(Expression) Java
- 一年的职业生涯(留给以后的自己看)
- 机器学习之分类回归树CART