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

一、文件上传

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

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

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

1、创建Web工程

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

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

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

  1. commons-fileupload-1.2.1.jar
  2. commons-io-1.4.jar
  3. commons-logging-1.1.3.jar
  4. spring-aop-4.3.18.RELEASE.jar
  5. spring-beans-4.3.18.RELEASE.jar
  6. spring-context-4.3.18.RELEASE.jar
  7. spring-core-4.3.18.RELEASE.jar
  8. spring-expression-4.3.18.RELEASE.jar
  9. spring-web-4.3.18.RELEASE.jar
  10. spring-webmvc-4.3.18.RELEASE.jar

4、配置文件上传解析器

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

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

  1. @Controller
  2. public class LastController {
  3. @RequestMapping("/upload")
  4. public String upload(@RequestParam(name = "username") String username,
  5. @RequestParam(name = "photo") MultipartFile photo) {
  6. System.out.println("用户名是:" + username);
  7. // 获取文件名
  8. System.out.println("上传的文件名是:" + photo.getOriginalFilename());
  9. try {
  10. photo.transferTo(new File("E:\\" + photo.getOriginalFilename()));
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. }
  14. return "/result.jsp";
  15. }
  16. }

二、使用@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中的代码:

  1. /**
  2. * @ResponseBody表示将返回值转换成为json对象
  3. */
  4. @ResponseBody
  5. @RequestMapping("/getPerson")
  6. public Person getPerson() {
  7. return new Person(1, "wzg168", 18, new Date(), new BigDecimal(10000));
  8. }
  9. @ResponseBody
  10. @RequestMapping("/getPersonList")
  11. public List<Person> getPersonList() {
  12. List<Person> persons = new ArrayList<Person>();
  13. for (int i = 0; i < 10; i++) {
  14. persons.add(new Person(i, "name"+i, 18+i, new Date(), new BigDecimal(10000)));
  15. }
  16. return persons;
  17. }

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

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

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

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

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

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

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

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

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

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

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

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

表单:

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

Controller控制器的代码:

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

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

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

六、HandlerInterceptor拦截器

1、HandlerInterceptor拦截器的介绍

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

2、单个HandlerInterceptor拦截器的示例

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

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

  1. public class MyHandlerIntercorptor implements HandlerInterceptor {
  2. /**
  3. * afterCompletion在请求完成后<br/>
  4. * 指的是页面渲染
  5. */
  6. @Override
  7. public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
  8. Object arg2, Exception arg3) throws Exception {
  9. System.out.println("这是afterCompletion方法");
  10. }
  11. /**
  12. * postHandle在目标资源执行之后的代码
  13. */
  14. @Override
  15. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2,
  16. ModelAndView arg3) throws Exception {
  17. // TODO Auto-generated method stub
  18. System.out.println("这是postHandle方法");
  19. }
  20. /**
  21. * preHandle预处理方法<br/>
  22. * 在提交的目标资源之前执行的代码
  23. */
  24. @Override
  25. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2)
  26. throws Exception {
  27. System.out.println("这是preHandle方法");
  28. // 如果返回true则放行,如果返回false,就不放行
  29. return true;
  30. }
  31. }

拦截器的配置:

  1. <!-- 配置所有拦截器 -->
  2. <mvc:interceptors>
  3. <!-- 配置单个拦截器 -->
  4. <mvc:interceptor>
  5. <!-- 拦截器,拦截地址 -->
  6. <mvc:mapping path="/hello" />
  7. <!-- 配置哪个类是拦截器实现类 -->
  8. <bean class="com.webcode.controller.MyHandlerIntercorptor" />
  9. </mvc:interceptor>
  10. </mvc:interceptors>

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

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

  1. 一:目标方法前返回false的情况:
  2. 1、目标方法前执行 返回false
  3. 2、这是目标方法 不执行
  4. 3、目标方法之后 不执行
  5. 4、这是渲染页面 不执行
  6. 5、页面渲染完成! 不执行
  7. 二:目标方法前返回true的情况,目标方法异常
  8. 1、目标方法前执行 返回true
  9. 2、这是目标方法 异常
  10. 3、目标方法之后 不执行
  11. 4、这是渲染页面 渲染异常页面
  12. 5、页面渲染完成! 执行
  13. 三:目标方法前返回true的情况,目标方法后异常
  14. 1、目标方法前执行 返回true
  15. 2、这是目标方法 执行
  16. 3、目标方法之后 异常
  17. 4、这是渲染页面 渲染异常页面
  18. 5、页面渲染完成! 执行
  19. 四:目标方法前返回true的情况,渲染页面异常
  20. 1、目标方法前执行 返回true
  21. 2、这是目标方法 执行
  22. 3、目标方法之后 执行
  23. 4、这是渲染页面 异常
  24. 5、页面渲染完成! 执行

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

七、异常处理

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

  1. @Controller
  2. public class ExceptionController {
  3. /**
  4. * @ExceptionHandler处理异常的方法<br/>
  5. * 参数就是抛出的异常对象<br/>
  6. */
  7. @ExceptionHandler
  8. public String handlerException(Exception exception) {
  9. System.out.println("处理异常handlerException Exception ===>>> " + exception);
  10. return "/error.jsp";
  11. }
  12. /**
  13. * @ExceptionHandler处理异常的方法<br/>
  14. * 参数就是抛出的异常对象<br/>
  15. */
  16. @ExceptionHandler
  17. public String handlerException(RuntimeException exception) {
  18. System.out.println("处理异常handlerException RuntimeException ===>>> " + exception);
  19. return "/error.jsp";
  20. }
  21. /**
  22. * @ExceptionHandler处理异常的方法<br/>
  23. * 参数就是抛出的异常对象<br/>
  24. */
  25. @ExceptionHandler
  26. public String handlerException(ArithmeticException exception) {
  27. System.out.println("处理异常handlerException ArithmeticException ===>>> " + exception);
  28. return "/error.jsp";
  29. }
  30. @RequestMapping("/sendException")
  31. public String sendException() {
  32. System.out.println("目标方法抛异常sendException");
  33. int i = 12 / 0;
  34. return "/result.jsp";
  35. }
  36. }

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

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

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

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

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

  1. @ControllerAdvice
  2. @Controller
  3. public class ExceptionController {

3、异常处理优先顺序

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

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

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

  1. <!--
  2. 简单的异常解析器<br/>
  3. 把不同的异常。映射到不同的错误页面
  4. -->
  5. <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
  6. <property name="exceptionMappings">
  7. <props>
  8. <prop key="java.lang.Exception">/error2.jsp</prop>
  9. <prop key="java.lang.RuntimeException">/error1.jsp</prop>
  10. <prop key="java.lang.ArithmeticException">/error3.jsp</prop>
  11. </props>
  12. </property>
  13. </bean>

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

1、测试数据库

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

2、创建一个动态Web工程

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

  1. Spring的核心包
  2. spring-beans-4.0.0.RELEASE.jar
  3. spring-context-4.0.0.RELEASE.jar
  4. spring-core-4.0.0.RELEASE.jar
  5. spring-expression-4.0.0.RELEASE.jar
  6. commons-logging-1.1.3.jar
  7. Spring的切面包
  8. com.springsource.org.aopalliance-1.0.0.jar
  9. com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
  10. spring-aop-4.0.0.RELEASE.jar
  11. spring-aspects-4.0.0.RELEASE.jar
  12. log4j日记包
  13. log4j-1.2.17.jar
  14. mysql驱动和数据库连接池包
  15. c3p0-0.9.1.2.jar
  16. mysql-connector-java-5.1.37-bin.jar
  17. Spring的数据库及事务包
  18. spring-jdbc-4.0.0.RELEASE.jar
  19. spring-orm-4.0.0.RELEASE.jar
  20. spring-tx-4.0.0.RELEASE.jar
  21. SpringMVC的包
  22. spring-web-4.0.0.RELEASE.jar
  23. spring-webmvc-4.0.0.RELEASE.jar
  24. SpringHiberante验证包
  25. hibernate-validator-annotation-processor-5.0.0.CR2.jar
  26. hibernate-validator-5.0.0.CR2.jar
  27. validation-api-1.1.0.CR1.jar
  28. jboss-logging-3.1.1.GA.jar
  29. classmate-0.8.0.jar
  30. 文件上传包
  31. commons-fileupload-1.2.1.jar
  32. commons-io-1.4.jar
  33. Spring中的Json处理包
  34. jackson-annotations-2.1.5.jar
  35. jackson-core-2.1.5.jar
  36. jackson-databind-2.1.5.jar
  37. MyBatis以及整合包
  38. mybatis-3.4.1.jar
  39. mybatis-spring-1.3.0.jar
  40. JSTL标签库
  41. taglibs-standard-impl-1.2.1.jar
  42. 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核心配置文件

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

    4.4、SpringMVC需要的配置文件

springmvc.xml 配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
  7. xmlns:tx="http://www.springframework.org/schema/tx"
  8. xmlns:aop="http://www.springframework.org/schema/aop"
  9. xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
  10. http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
  11. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  12. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
  13. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
  14. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
  15. <!-- 扫描springMVC的类和异常处理 -->
  16. <context:component-scan base-package="com.webcode" use-default-filters="false">
  17. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  18. <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
  19. </context:component-scan>
  20. <!-- 视图解析器 -->
  21. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  22. <property name="prefix" value="/book/" />
  23. <property name="suffix" value=".jsp"/>
  24. </bean>
  25. <!-- SpringMVC标签的两个mvc标签 -->
  26. <mvc:default-servlet-handler/>
  27. <mvc:annotation-driven/>
  28. </beans>

web.xml中的配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  5. id="WebApp_ID" version="2.5">
  6. <display-name>ssm</display-name>
  7. <!-- 解决乱码的Filter过滤器 -->
  8. <filter>
  9. <filter-name>CharacterEncodingFilter</filter-name>
  10. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  11. <init-param>
  12. <param-name>encoding</param-name>
  13. <param-value>UTF-8</param-value>
  14. </init-param>
  15. <init-param>
  16. <param-name>forceEncoding</param-name>
  17. <param-value>true</param-value>
  18. </init-param>
  19. </filter>
  20. <filter-mapping>
  21. <filter-name>CharacterEncodingFilter</filter-name>
  22. <url-pattern>/*</url-pattern>
  23. </filter-mapping>
  24. <!-- 支持restful风格的Filter -->
  25. <filter>
  26. <filter-name>HiddenHttpMethodFilter</filter-name>
  27. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  28. </filter>
  29. <filter-mapping>
  30. <filter-name>HiddenHttpMethodFilter</filter-name>
  31. <url-pattern>/*</url-pattern>
  32. </filter-mapping>
  33. <!-- 整合Spring到Web的监听器 -->
  34. <context-param>
  35. <param-name>contextConfigLocation</param-name>
  36. <param-value>classpath:applicationContext.xml</param-value>
  37. </context-param>
  38. <listener>
  39. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  40. </listener>
  41. <!-- SpringMVC的前端控制器 -->
  42. <servlet>
  43. <servlet-name>springDispatcherServlet</servlet-name>
  44. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  45. <init-param>
  46. <param-name>contextConfigLocation</param-name>
  47. <param-value>classpath:springmvc.xml</param-value>
  48. </init-param>
  49. <load-on-startup>1</load-on-startup>
  50. </servlet>
  51. <servlet-mapping>
  52. <servlet-name>springDispatcherServlet</servlet-name>
  53. <url-pattern>/</url-pattern>
  54. </servlet-mapping>
  55. </web-app>

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
  4. xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
  5. xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
  6. xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
  7. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
  9. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
  10. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
  11. <!-- 扫描除SpringMVC之外所有组件 -->
  12. <context:component-scan base-package="com.atguigu">
  13. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
  14. <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
  15. </context:component-scan>
  16. <!-- 加载jdbc.properties属性配置文件 -->
  17. <context:property-placeholder location="classpath:jdbc.properties" />
  18. <!-- 配置数据库连接池对象 -->
  19. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  20. <property name="user" value="${jdbc.user}" />
  21. <property name="password" value="${jdbc.password}" />
  22. <property name="jdbcUrl" value="${jdbc.url}" />
  23. <property name="driverClass" value="${jdbc.driver}" />
  24. </bean>
  25. <!-- 配置事务管理器 -->
  26. <bean id="transactionManager"
  27. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  28. <property name="dataSource" ref="dataSource" />
  29. </bean>
  30. <!-- Mybatis整合Spring的核心配置之一 -->
  31. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  32. <property name="dataSource" ref="dataSource" />
  33. <property name="configLocation" value="classpath:mybatis-config.xml" />
  34. <property name="mapperLocations" value="classpath:com/webcode/dao/*.xml" />
  35. </bean>
  36. <!-- Mybatis整合Spring的核心配置之二 老式的将Mapper接口注入到SpringIOC容器中
  37. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  38. <property name="basePackage" value="com.webcode.dao"></property>
  39. </bean>
  40. -->
  41. <!-- Mybatis整合Spring的核心配置之二 扫描并将Mapper接口注入到SpringIOC容器中 -->
  42. <mybatis-spring:scan base-package="com.webcode.dao" />
  43. <!-- 配置事务属性 -->
  44. <tx:advice id="tx_ssm" transaction-manager="transactionManager">
  45. <tx:attributes>
  46. <tx:method name="add*" propagation="REQUIRED" />
  47. <tx:method name="save*" propagation="REQUIRED" />
  48. <tx:method name="update*" propagation="REQUIRED" />
  49. <tx:method name="delete*" propagation="REQUIRED" />
  50. <tx:method name="*" read-only="true" />
  51. </tx:attributes>
  52. </tx:advice>
  53. <!-- 配置事务切面 -->
  54. <aop:config>
  55. <aop:advisor advice-ref="tx_ssm"
  56. pointcut="execution(* com..service..*.*(..))" />
  57. </aop:config>
  58. </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. Coursera课程笔记----计算导论与C语言基础----Week 8

    C语言中的运算成分(Week 8) 赋值运算符 "="赋值运算符 给赋值号左边的变量赋予数值 在变量定义的同时可以为变量赋初值 要点一:两面类型不同 若=两边的类型不一致,赋值时要 ...

  2. 真香!PySpark整合Apache Hudi实战

    1. 准备 Hudi支持Spark-2.x版本,你可以点击如下链接安装Spark,并使用pyspark启动 # pyspark export PYSPARK_PYTHON=$(which python ...

  3. 最简单的手机预览WEB移动端网页的方法

    网上看了很多关于该问题的解决办法,各种各样的都有,个人也测试了一些, 最后总结出一个最简单且实用的方法. 1.安装nodejs node官网下载对应版本的nodejs,安装好了之后,在node.js执 ...

  4. python第七天--文件练

    目的: 将不同人物说的话分别保存下来 以==========分段 代码: f=open('record.txt','r',encoding='UTF-8') zyf=[] smy=[] count=1 ...

  5. C# 获取从1月至12月的月初时间和月末时间

    public IActionResult GetMonthData() { var dataList = new List<object>(); var currentMonth = Da ...

  6. ipad4密码忘记锁定了如何破解

    ipad4更新后被要求输入密码,但很长一段时间后忘记了,一直想不起来,也没有忘记密码的选项,以下是简单的破解方法. 注意:没有备份的资料是要被清空的 一.windows10系统,安装iTunes安装 ...

  7. Linux -- 在文件中添加信息的方法(转)

    转自:https://www.cnblogs.com/ZGreMount/p/7645542.html 创建test 文件: touch test.txt 方法一:echo 命令法: echo &qu ...

  8. putty、pscp、psftp 使用教程

    如何从安装了Windows的工作电脑连远程接到Linux服务器?其实有很多软件,比如 PuTTY.XShell.CRT.MobaXterm等等.不过还是 PuTTY最简单易用.无需安装.并且开源免费. ...

  9. Python中内置函数

    python提供了很多的内置函数,这些内置的函数在某些情况下,可以起到很大的作用,而不需要专门去 写函数实现XX功能,直接使用内置函数就可以实现,下面分别来学习内置函数的使用和案例代码. abs(), ...

  10. Java注解的定义和使用

    注解也叫元数据,一种代码级别的说明.是jdk1.5后产生的一个特性,与类.接口.枚举同一个档次,他可以在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素进行说明.注释: <!--m ...