个人博客网:https://wushaopei.github.io/    (你想要这里多有)

一、文件上传

文件上传在SpringMVC中如何实现:

  1. 准备一个文件上传的表单
  2. 导入文件上传需要的jar包
           commons-fileupload-1.2.1.jar、
commons-io-1.4.jar

3.配置文件上传解析器 CommonsMultipartResolver
 
    4.配置Controller控制器的代码

1、创建Web工程

2、准备一个文件上传的表单

	<form action="${ pageContext.request.contextPath }/upload" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username" /><br/>
头像: <input type="file" name="photo" /><br/>
<input type="submit">
</form>

3、导入文件上传需要的jar包

commons-fileupload-1.2.1.jar
commons-io-1.4.jar
commons-logging-1.1.3.jar
spring-aop-4.3.18.RELEASE.jar
spring-beans-4.3.18.RELEASE.jar
spring-context-4.3.18.RELEASE.jar
spring-core-4.3.18.RELEASE.jar
spring-expression-4.3.18.RELEASE.jar
spring-web-4.3.18.RELEASE.jar
spring-webmvc-4.3.18.RELEASE.jar

4、配置文件上传解析器

        <!-- 配置文件上传解析器
CommonsMultipartResolver负责解决上传的数据,得到用户希望的结果<br/>
id="multipartResolver" id值必须为:multipartResolver
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 配置上传解析用的字符集,防止出现乱码 -->
<property name="defaultEncoding" value="UTF-8"/>
</bean>

5、编写文件上传的Controller控制器中的代码:

@Controller
public class LastController { @RequestMapping("/upload")
public String upload(@RequestParam(name = "username") String username,
@RequestParam(name = "photo") MultipartFile photo) { System.out.println("用户名是:" + username);
// 获取文件名
System.out.println("上传的文件名是:" + photo.getOriginalFilename()); try {
photo.transferTo(new File("E:\\" + photo.getOriginalFilename()));
} catch (Exception e) {
e.printStackTrace();
} return "/result.jsp";
} }

二、使用@ResponseBody将返回的数据转成json

1、使用的步骤如下:

  1. 导入json相关的包到web工程中

      • jackson-annotations-2.7.0.jar
      • jackson-core-2.7.4.jar
      • jackson-databind-2.7.4.jar
  2. 编写一个请求的方式接收请求,并返回数据对象
  3. 在方法上添加注解@ResponseBody自动将返回值json化

2、Controller中的代码:

	/**
* @ResponseBody表示将返回值转换成为json对象
*/
@ResponseBody
@RequestMapping("/getPerson")
public Person getPerson() {
return new Person(1, "wzg168", 18, new Date(), new BigDecimal(10000));
} @ResponseBody
@RequestMapping("/getPersonList")
public List<Person> getPersonList() {
List<Person> persons = new ArrayList<Person>();
for (int i = 0; i < 10; i++) {
persons.add(new Person(i, "name"+i, 18+i, new Date(), new BigDecimal(10000)));
}
return persons;
}

3、打开浏览器测试如下:

4、使用@JsonFormat修改时间在json中的格式

        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date birthDate;

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
public Date getBirthDate() {
return birthDate;
}

@JsonFormat表示设置json转换格式。
pattern="yyyy-MM-dd HH:mm:ss" 表示日期类型返回以 yyyy-MM-dd HH:mm:ss 格式 yyyy-MM-dd 表示年月日,HH:mm:ss表示时分秒 timezone = "GMT+8" 表示时间为格林时间+8小时

三、使用@RequestBody接收请求体数据

在HTTP协议中,我们知道,请求体只存在于POST请求中才有。所以我们需要有一个表单。而且请求必须是post请求。

1、准备一个post请求的表单

        <h1>requestBody注解</h1>
<form action="${ pageContext.request.contextPath }/requestBody" method="post">
用户名:<input type="text" name="username" /><br/>
密码:<input type="text" name="password" /><br/>
<input type="submit" />
</form>

2、在Controller中添加一个方法接收请求体

	/**
* @RequestBody 它可以把请求体中全部的数据,都注入到body参数中<br/>
*/
@RequestMapping("/requestBody")
public String requestBody(@RequestBody String body) {
System.out.println("请求体全部内容:" + body);
return "/upload.jsp";
}

四、使用HttpEntity参数获取请求头和请求体

表单:

        <h1>HttpEntity获取请求头和请求体</h1>
<form action="${ pageContext.request.contextPath }/httpEntity" method="post">
用户名:<input type="text" name="username" /><br/>
密码:<input type="text" name="password" /><br/>
<input type="submit" />
</form>

Controller控制器的代码:

	@RequestMapping("/httpEntity")
public String httpEntity(HttpEntity<String> entity) {
System.out.println( "请求头:" + entity.getHeaders());
System.out.println( "请求体:" + entity.getBody() );
return "/upload.jsp";
}

五、使用ResponseEntity返回值操作响应头和响应体

        /**
* 现在希望做下载的操作
* @throws IOException
*/
@RequestMapping("/download")
public ResponseEntity<byte[]> download(HttpSession session) throws IOException{ ServletContext context = session.getServletContext(); // 读取需要下载的文件,以流的形式返回
InputStream inputStream = context.getResourceAsStream("/imgs/d.jpg"); byte[] buffer = new byte[1024*1000];
inputStream.read(buffer); //响应头
HttpHeaders httpHeaders = new HttpHeaders(); // 下载的文件的数据类型。
// getServletContext().getMimeType 获取下载的文件的数据类型
httpHeaders.add("Content-Type", session.getServletContext().getMimeType("/imgs/d.jpg"));
// 告诉客户端,我回传的数据。你要在附件的形式处理
httpHeaders.add("Content-Disposition", "attachment; filename=d.jpg"); // 第一个参数是响应体,返回的数据
// 第二个参数是响应头
// 第三个参数是响应状态码 200 OK ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(buffer, httpHeaders, HttpStatus.OK); return entity;
}

六、HandlerInterceptor拦截器

1、HandlerInterceptor拦截器的介绍

HandlerInterceptor是一个接口,它的作用类似于javaWeb的Filter过滤器

2、单个HandlerInterceptor拦截器的示例

(1)、编写一个类去实现HandlerInterceptor接口

(2)、到Spring的容器配置文件中去配置拦截器,让SpringMVC知道都拦截哪些目标方法

public class MyHandlerIntercorptor implements HandlerInterceptor {
/**
* afterCompletion在请求完成后<br/>
* 指的是页面渲染
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object arg2, Exception arg3) throws Exception { System.out.println("这是afterCompletion方法");
} /**
* postHandle在目标资源执行之后的代码
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2,
ModelAndView arg3) throws Exception {
// TODO Auto-generated method stub
System.out.println("这是postHandle方法");
} /**
* preHandle预处理方法<br/>
* 在提交的目标资源之前执行的代码
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2)
throws Exception {
System.out.println("这是preHandle方法");
// 如果返回true则放行,如果返回false,就不放行
return true;
} }

拦截器的配置:

        <!-- 配置所有拦截器 -->
<mvc:interceptors>
<!-- 配置单个拦截器 -->
<mvc:interceptor>
<!-- 拦截器,拦截地址 -->
<mvc:mapping path="/hello" />
<!-- 配置哪个类是拦截器实现类 -->
<bean class="com.webcode.controller.MyHandlerIntercorptor" />
</mvc:interceptor>
</mvc:interceptors>

        1、这是preHandle方法
2、这是目标方法执行啦……
3、这是postHandle方法
4、这是最终渲染的页面
5、这是afterCompletion方法

3、单个拦截器异常时的执行顺序

一:目标方法前返回false的情况:

    1、目标方法前执行 		返回false
2、这是目标方法 不执行
3、目标方法之后 不执行
4、这是渲染页面 不执行
5、页面渲染完成! 不执行 二:目标方法前返回true的情况,目标方法异常 1、目标方法前执行 返回true
2、这是目标方法 异常
3、目标方法之后 不执行
4、这是渲染页面 渲染异常页面
5、页面渲染完成! 执行 三:目标方法前返回true的情况,目标方法后异常 1、目标方法前执行 返回true
2、这是目标方法 执行
3、目标方法之后 异常
4、这是渲染页面 渲染异常页面
5、页面渲染完成! 执行 四:目标方法前返回true的情况,渲染页面异常 1、目标方法前执行 返回true
2、这是目标方法 执行
3、目标方法之后 执行
4、这是渲染页面 异常
5、页面渲染完成! 执行

只要preHandler方法返回True, afterCompletion方法就会执行。

七、异常处理

1、使用@ExceptionHandler注解处理异常

@Controller
public class ExceptionController { /**
* @ExceptionHandler处理异常的方法<br/>
* 参数就是抛出的异常对象<br/>
*/
@ExceptionHandler
public String handlerException(Exception exception) {
System.out.println("处理异常handlerException Exception ===>>> " + exception);
return "/error.jsp";
} /**
* @ExceptionHandler处理异常的方法<br/>
* 参数就是抛出的异常对象<br/>
*/
@ExceptionHandler
public String handlerException(RuntimeException exception) {
System.out.println("处理异常handlerException RuntimeException ===>>> " + exception);
return "/error.jsp";
} /**
* @ExceptionHandler处理异常的方法<br/>
* 参数就是抛出的异常对象<br/>
*/
@ExceptionHandler
public String handlerException(ArithmeticException exception) {
System.out.println("处理异常handlerException ArithmeticException ===>>> " + exception);
return "/error.jsp";
} @RequestMapping("/sendException")
public String sendException() {
System.out.println("目标方法抛异常sendException");
int i = 12 / 0;
return "/result.jsp";
} }

@ExceptionHandler标注的方法,当Controller控制器出了异常之后。就会调用。

如果有多个异常。异常的对象。越精确越优先选择调用。

@ExceptionHandler只能处理它自己所在的控制器Controller所抛出的异常

2、使用@ControllerAdvice注解处理异常

@ControllerAdvice表示当前的Controller所有的@ExceptionHandler可以处理,所有Controller控制器抛出的异常

@ControllerAdvice
@Controller
public class ExceptionController {

3、异常处理优先顺序

在局部异常处理和全局异常处理同时存在的时候,优先顺序是:

  1. 局部优先 ---->>>> 2、精确优化

4、使用SimpleMappingExceptionResolver类映射异常跳转

         <!--
简单的异常解析器<br/>
把不同的异常。映射到不同的错误页面
-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.Exception">/error2.jsp</prop>
<prop key="java.lang.RuntimeException">/error1.jsp</prop>
<prop key="java.lang.ArithmeticException">/error3.jsp</prop>
</props>
</property>
</bean>

八、三大框架ssm(Spring+SpringMVC+Mybatis)的整合

1、测试数据库

drop database if exists ssm;

create database ssm;

use ssm; 

##创建图书表
create table t_book(
`id` int(11) primary key auto_increment, ## 主键
`name` varchar(50) not null, ## 书名
`author` varchar(50) not null, ## 作者
`price` decimal(11,2) not null, ## 价格
`sales` int(11) not null, ## 销量
`stock` int(11) ## 库存
); ## 插入初始化测试数据
insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , 'java从入门到放弃' , '国哥' , 80 , 9999 , 9 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , '数据结构与算法' , '严敏君' , 78.5 , 6 , 13 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , '怎样拐跑别人的媳妇' , '龙伍' , 68, 99999 , 52 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , '木虚肉盖饭' , '小胖' , 16, 1000 , 50 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , 'C++编程思想' , '刚哥' , 45.5 , 14 , 95 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , '蛋炒饭' , '周星星' , 9.9, 12 , 53 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , '赌神' , '龙伍' , 66.5, 125 , 535 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , 'Java编程思想' , '阳哥' , 99.5 , 47 , 36 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , 'JavaScript从入门到精通' , '婷姐' , 9.9 , 85 , 95 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , 'cocos2d-x游戏编程入门' , '国哥' , 49, 52 , 62 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , 'C语言程序设计' , '谭浩强' , 28 , 52 , 74 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , 'Lua语言程序设计' , '雷丰阳' , 51.5 , 48 , 82 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , '西游记' , '罗贯中' , 12, 19 , 9999 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , '水浒传' , '华仔' , 33.05 , 22 , 88 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , '操作系统原理' , '刘优' , 133.05 , 122 , 188 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , '数据结构 java版' , '封大神' , 173.15 , 21 , 81 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , 'UNIX高级环境编程' , '乐天' , 99.15 , 210 , 810 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , 'javaScript高级编程' , '国哥' , 69.15 , 210 , 810 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , '大话设计模式' , '国哥' , 89.15 , 20 , 10 ); insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock`)
values(null , '人月神话' , '刚哥' , 88.15 , 20 , 80 ); ## 查看表内容
select id,name,author,price,sales,stock from t_book;

2、创建一个动态Web工程

3、然后导入整合Spring+SpringMVC+Mybatis的所有jar包

Spring的核心包
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
commons-logging-1.1.3.jar Spring的切面包
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
spring-aop-4.0.0.RELEASE.jar
spring-aspects-4.0.0.RELEASE.jar log4j日记包
log4j-1.2.17.jar mysql驱动和数据库连接池包
c3p0-0.9.1.2.jar
mysql-connector-java-5.1.37-bin.jar Spring的数据库及事务包
spring-jdbc-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar SpringMVC的包
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar Spring的Hiberante验证包
hibernate-validator-annotation-processor-5.0.0.CR2.jar
hibernate-validator-5.0.0.CR2.jar
validation-api-1.1.0.CR1.jar
jboss-logging-3.1.1.GA.jar
classmate-0.8.0.jar 文件上传包
commons-fileupload-1.2.1.jar
commons-io-1.4.jar Spring中的Json处理包
jackson-annotations-2.1.5.jar
jackson-core-2.1.5.jar
jackson-databind-2.1.5.jar MyBatis以及整合包
mybatis-3.4.1.jar
mybatis-spring-1.3.0.jar JSTL标签库
taglibs-standard-impl-1.2.1.jar
taglibs-standard-spec-1.2.1.jar

4、各种配置文件

4.1、log4j.properties日记配置文件

# Global logging configuration

log4j.rootLogger=INFO, stdout

# Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

4.2、jdbc.properties属性配置文件

jdbc.user=root

jdbc.password=root

jdbc.url=jdbc:mysql://localhost:3306/ssm

jdbc.driver=com.mysql.jdbc.Driver

4.3、Mybatis核心配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置 -->
<settings>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true" />
</settings> <!-- 配置扫描加载Mapper.xml配置文件 -->
<mappers>
<package name="com.webcode.mapper" />
</mappers>
</configuration>

    4.4、SpringMVC需要的配置文件

springmvc.xml 配置文件

<?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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <!-- 扫描springMVC的类和异常处理 -->
<context:component-scan base-package="com.webcode" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan> <!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/book/" />
<property name="suffix" value=".jsp"/>
</bean> <!-- SpringMVC标签的两个mvc标签 -->
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
</beans>

web.xml中的配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>ssm</display-name> <!-- 解决乱码的Filter过滤器 -->
<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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 支持restful风格的Filter -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- 整合Spring到Web的监听器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- SpringMVC的前端控制器 -->
<servlet>
<servlet-name>springDispatcherServlet</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>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> </web-app>

4.5、Spring需要的配置文件 applicationContext.xml

<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<!-- 扫描除SpringMVC之外所有组件 -->
<context:component-scan base-package="com.atguigu">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
</context:component-scan> <!-- 加载jdbc.properties属性配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties" /> <!-- 配置数据库连接池对象 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="driverClass" value="${jdbc.driver}" />
</bean> <!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean> <!-- Mybatis整合Spring的核心配置之一 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
<property name="mapperLocations" value="classpath:com/webcode/dao/*.xml" />
</bean>
<!-- Mybatis整合Spring的核心配置之二 老式的将Mapper接口注入到SpringIOC容器中
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.webcode.dao"></property>
</bean>
-->
<!-- Mybatis整合Spring的核心配置之二 扫描并将Mapper接口注入到SpringIOC容器中 -->
<mybatis-spring:scan base-package="com.webcode.dao" /> <!-- 配置事务属性 -->
<tx:advice id="tx_ssm" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice> <!-- 配置事务切面 -->
<aop:config>
<aop:advisor advice-ref="tx_ssm"
pointcut="execution(* com..service..*.*(..))" />
</aop:config> </beans>

SpringMVC(四)SpringMVC实现文件上传、异常拦截去、整合SSM的更多相关文章

  1. SpringMVC 使用MultipartFile实现文件上传(转)

    http://blog.csdn.net/kouwoo/article/details/40507565 一.配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们 ...

  2. SpringMVC:学习笔记(8)——文件上传

    SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...

  3. SpringMVC注解方式与文件上传

    目录: springmvc的注解方式 文件上传(上传图片,并显示) 一.注解 在类前面加上@Controller 表示该类是一个控制器在方法handleRequest 前面加上 @RequestMap ...

  4. SSM框架之SpringMVC(5)文件上传

    SpringMVC(5)文件上传 1.实现文件上传的前期准备 1.1.文件上传的必要前提 A form 表单的 enctype 取值必须是: multipart/form-data(默认值是:appl ...

  5. SpringMVC 通过commons-fileupload实现文件上传

    目录 配置 web.xml SpringMVC配置文件 applicationContext.xml 文件上传 Controller 上传实现一 上传实现二 测试 依赖 配置 web.xml < ...

  6. SpringBoot文件上传异常之提示The temporary upload location xxx is not valid

    原文: 一灰灰Blog之Spring系列教程文件上传异常原理分析 SpringBoot搭建的应用,一直工作得好好的,突然发现上传文件失败,提示org.springframework.web.multi ...

  7. SpringMVC框架笔记02_参数绑定返回值文件上传异常处理器JSON数据交互_拦截器

    目录 第1章 高级参数的绑定 1.1 参数的分类 1.2 数组类型的参数的绑定 1.3 集合类型的参数的绑定 第2章 @RequestMapping的用法 2.1 URL路径映射 2.2 请求方法限定 ...

  8. springmvc文件上传和拦截器

    文件上传 用到这两个包 配置视图解析器:springmvc配置文件配置 <!-- id必须要是"multipartResolver" --> <bean id=& ...

  9. springMVC easyUI filebox 单个文件上传

    被这个文件上传坑到如今.还是自己技术问题,照着之前extjs项目那边的上传实例,愣是上传不了 到后面就查了下springMVC的文件上传,依照那样搞定了http://blog.csdn.net/jad ...

  10. SpringMVC 参数映射与文件上传

    handler参数映射: 接下来就是Spring的各个处理细节了,无论框架如何疯转其实我们处理请求的流程是不变的,设计到的操作也是固定的,举个例子,当我们要实现一个登陆功能时: 创建一个用于处理登录请 ...

随机推荐

  1. 字节码编程,Javassist篇三《使用Javassist在运行时重新加载类「替换原方法输出不一样的结果」》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 通过前面两篇 javassist 的基本内容,大体介绍了:类池(ClassPool) ...

  2. Quartus II 与modelsim连接不上的问题

    在Quartus II 中tools>options>General>EDA Tool Options 设置modelsim 路径 说明:不管是Quartus II 与modelsi ...

  3. [hdu2222]ac自动机(模板)

    题意:一个文本串+多个模板串的匹配问题 思路:裸的ac自动机. #pragma comment(linker, "/STACK:10240000,10240000") #inclu ...

  4. [hdu2594]kmp水题

    题意:求最长的a的前缀同时满足是b的后缀,把a,b连在一起,kmp跑一下,迭代next直到长度小于等于a,b长度的最小值为止,即为答案. #pragma comment(linker, "/ ...

  5. HDU 2012 (水)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2012 题目大意:给你段连续数字,判断每个数字带入函数 n^2+n+41 是否都为素数,是输入OK,否则 ...

  6. python 利用 for ... else 跳出双层嵌套循环

    背景 周末在写一个爬虫时,遇到这样一种场景:从搜索结果中下载指定数量的文件 例如:搜索结果中共分为10页展示,加起来一共50条数据,现在要做的是从50条数据中下载指定数量的数据 为了实现这个功能,开始 ...

  7. PC端软件配置

    一,cmder软件安装 二,Snipaste软件安装 三,vwmare虚拟机安装 四,sublime安装 五,notepad++安装 六,Python环境 anaconda navigator安装 七 ...

  8. 1026 Table Tennis (30分) 难度不高 + 逻辑复杂 +细节繁琐

    题目 A table tennis club has N tables available to the public. The tables are numbered from 1 to N. Fo ...

  9. 关于RAID小结

    独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks ...

  10. LTC6804读写配置寄存器

    一.写配置寄存器步骤及函数封装 写配置寄存器 1.把CSB拉低至低电平: 2.发送WRCFG命令(0x00 0x01)及其PEC(0x3D 0x6E): 3.发送配置寄存器的CFGR0字节,然后继续发 ...