SSM框架整合以及webupload的集成与使用

在项目中最近用到了webupload.js,也方方面面遇到了不少问题,比如上传文件前对表单参数校验,当校验失败不予提交,及在文件上传成功后,选择同名文件,则不会显示文件,但可以提交表单。外加一直没有对SSM框架整合没有整理过,借此机会做以学习笔记。遇到的具体问题会在代码注释中说明,以备不时之需,若有不恰之处,还望各位予以指教。

1、项目结构:

2、pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>com.test.ssm</groupId>
  8. <artifactId>SSM</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10. <packaging>war</packaging>
  11.  
  12. <name>SSM Maven Webapp</name>
  13. <!-- FIXME change it to the project's website -->
  14. <url>http://www.example.com</url>
  15.  
  16. <properties>
  17. <!-- spring版本号 -->
  18. <spring.version>4.2.6.RELEASE</spring.version>
  19. <!-- mybatis版本号 -->
  20. <mybatis.version>3.4.0</mybatis.version>
  21. <!-- log4j日志文件管理包版本 -->
  22. <slf4j.version>1.7.7</slf4j.version>
  23. <log4j.version>1.2.17</log4j.version>
  24. <!--jackson版本号-->
  25. <jackson.version>2.7.1</jackson.version>
  26.  
  27. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  28. <maven.compiler.source>1.7</maven.compiler.source>
  29. <maven.compiler.target>1.7</maven.compiler.target>
  30. </properties>
  31.  
  32. <dependencies>
  33. <dependency>
  34. <groupId>junit</groupId>
  35. <artifactId>junit</artifactId>
  36. <version>4.11</version>
  37. <scope>test</scope>
  38. </dependency>
  39.  
  40. <dependency>
  41. <groupId>junit</groupId>
  42. <artifactId>junit</artifactId>
  43. <version>4.11</version>
  44. <!-- 表示开发的时候引入,发布的时候不会加载此包 -->
  45. <!--<scope>test</scope>-->
  46. </dependency>
  47.  
  48. <!-- spring核心包 -->
  49. <dependency>
  50. <groupId>org.springframework</groupId>
  51. <artifactId>spring-core</artifactId>
  52. <version>${spring.version}</version>
  53. </dependency>
  54.  
  55. <dependency>
  56. <groupId>org.springframework</groupId>
  57. <artifactId>spring-web</artifactId>
  58. <version>${spring.version}</version>
  59. </dependency>
  60.  
  61. <dependency>
  62. <groupId>org.springframework</groupId>
  63. <artifactId>spring-oxm</artifactId>
  64. <version>${spring.version}</version>
  65. </dependency>
  66.  
  67. <dependency>
  68. <groupId>org.springframework</groupId>
  69. <artifactId>spring-tx</artifactId>
  70. <version>${spring.version}</version>
  71. </dependency>
  72.  
  73. <dependency>
  74. <groupId>org.springframework</groupId>
  75. <artifactId>spring-jdbc</artifactId>
  76. <version>${spring.version}</version>
  77. </dependency>
  78.  
  79. <dependency>
  80. <groupId>org.springframework</groupId>
  81. <artifactId>spring-webmvc</artifactId>
  82. <version>${spring.version}</version>
  83. </dependency>
  84.  
  85. <dependency>
  86. <groupId>org.springframework</groupId>
  87. <artifactId>spring-aop</artifactId>
  88. <version>${spring.version}</version>
  89. </dependency>
  90.  
  91. <dependency>
  92. <groupId>org.springframework</groupId>
  93. <artifactId>spring-context-support</artifactId>
  94. <version>${spring.version}</version>
  95. </dependency>
  96.  
  97. <dependency>
  98. <groupId>org.springframework</groupId>
  99. <artifactId>spring-test</artifactId>
  100. <version>${spring.version}</version>
  101. </dependency>
  102.  
  103. <!-- mybatis核心包 -->
  104. <dependency>
  105. <groupId>org.mybatis</groupId>
  106. <artifactId>mybatis</artifactId>
  107. <version>${mybatis.version}</version>
  108. </dependency>
  109.  
  110. <!-- mybatis/spring包 -->
  111. <dependency>
  112. <groupId>org.mybatis</groupId>
  113. <artifactId>mybatis-spring</artifactId>
  114. <version>1.3.0</version>
  115. </dependency>
  116.  
  117. <dependency>
  118. <groupId>javax.mail</groupId>
  119. <artifactId>mail</artifactId>
  120. <version>1.4</version>
  121. </dependency>
  122.  
  123. <!-- 导入Mysql数据库链接jar包 -->
  124. <dependency>
  125. <groupId>mysql</groupId>
  126. <artifactId>mysql-connector-java</artifactId>
  127. <version>5.1.30</version>
  128. </dependency>
  129. <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
  130. <dependency>
  131. <groupId>commons-dbcp</groupId>
  132. <artifactId>commons-dbcp</artifactId>
  133. <version>1.2.2</version>
  134. </dependency>
  135.  
  136. <!-- JSTL标签类 -->
  137. <dependency>
  138. <groupId>jstl</groupId>
  139. <artifactId>jstl</artifactId>
  140. <version>1.2</version>
  141. </dependency>
  142.  
  143. <!-- 日志文件管理包 -->
  144. <!-- log start -->
  145. <dependency>
  146. <groupId>log4j</groupId>
  147. <artifactId>log4j</artifactId>
  148. <version>${log4j.version}</version>
  149. </dependency>
  150.  
  151. <!-- 格式化对象,方便输出日志 -->
  152. <dependency>
  153. <groupId>com.alibaba</groupId>
  154. <artifactId>fastjson</artifactId>
  155. <version>1.1.41</version>
  156. </dependency>
  157.  
  158. <dependency>
  159. <groupId>org.slf4j</groupId>
  160. <artifactId>slf4j-api</artifactId>
  161. <version>${slf4j.version}</version>
  162. </dependency>
  163.  
  164. <dependency>
  165. <groupId>org.slf4j</groupId>
  166. <artifactId>slf4j-log4j12</artifactId>
  167. <version>${slf4j.version}</version>
  168. </dependency>
  169. <!-- log end -->
  170.  
  171. <!-- 映入JSON -->
  172. <dependency>
  173. <groupId>com.fasterxml.jackson.core</groupId>
  174. <artifactId>jackson-core</artifactId>
  175. <version>${jackson.version}</version>
  176. </dependency>
  177. <dependency>
  178. <groupId>com.fasterxml.jackson.core</groupId>
  179. <artifactId>jackson-databind</artifactId>
  180. <version>${jackson.version}</version>
  181. </dependency>
  182. <dependency>
  183. <groupId>com.fasterxml.jackson.core</groupId>
  184. <artifactId>jackson-annotations</artifactId>
  185. <version>${jackson.version}</version>
  186. </dependency>
  187. <dependency>
  188. <groupId>javax.servlet</groupId>
  189. <artifactId>javax.servlet-api</artifactId>
  190. <version>3.1.0</version>
  191. </dependency>
  192. <dependency>
  193. <groupId>javax.servlet.jsp.jstl</groupId>
  194. <artifactId>javax.servlet.jsp.jstl-api</artifactId>
  195. <version>1.2.1</version>
  196. </dependency>
  197.  
  198. <dependency>
  199. <groupId>org.apache.commons</groupId>
  200. <artifactId>commons-lang3</artifactId>
  201. <version>3.6</version>
  202. </dependency>
  203.  
  204. <!-- commons-fileupload 1.1以后移除了commons-io需要单独引入 -->
  205. <dependency>
  206. <groupId>commons-fileupload</groupId>
  207. <artifactId>commons-fileupload</artifactId>
  208. <version>1.2.1</version>
  209. </dependency>
  210. <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
  211. <dependency>
  212. <groupId>commons-io</groupId>
  213. <artifactId>commons-io</artifactId>
  214. <version>2.4</version>
  215. </dependency>
  216.  
  217. </dependencies>
  218.  
  219. <build>
  220. <finalName>SSM</finalName>
  221. </build>
  222. </project>

 3、spring-mvc.xml  springmvc配置文件

  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. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-3.1.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
  12. <!-- 自动扫描该包,使用SpringMVC认为包下用了@Controller注解的类是控制器,避免扫描@Service导致事务不能使用 -->
  13. <context:component-scan base-package = "com.ssm.test">
  14. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  15. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
  16. </context:component-scan>
  17.  
  18. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  19. <!-- set the max upload size100MB -->
  20. <property name="maxUploadSize">
  21. <value>10485760000</value>
  22. </property>
  23. <property name="maxInMemorySize">
  24. <value>4096</value>
  25. </property>
  26. </bean>
  27.  
  28. <!-- 定义跳转的文件的前后缀 ,视图模式配置-->
  29. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  30. <!-- 自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
  31. <property name="prefix" value="/WEB-INF/page/" />
  32. <property name="suffix" value=".jsp" />
  33. </bean>
  34.  
  35. <!-- 添加后可以显示welcome-file界面 -->
  36. <mvc:default-servlet-handler/>
  37.  
  38. <!-- 启动注解 -->
  39. <mvc:annotation-driven />
  40.  
  41. </beans>

  4、spring-mybatis.xml 整合spring与mybatis

  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:tx="http://www.springframework.org/schema/tx"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-3.1.xsd
  10. http://www.springframework.org/schema/tx
  11. http://www.springframework.org/schema/tx/spring-tx.xsd">
  12. <!-- 自动扫描 -->
  13. <context:component-scan base-package="com.ssm.test">
  14. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  15. </context:component-scan>
  16.  
  17. <!-- 引入数据库配置文件 -->
  18. <bean id = "propertyConfigurer"
  19. class = "org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
  20. <property name = "location" value="classpath:jdbc.properties" />
  21. </bean>
  22. <!-- 连接池 -->
  23. <bean id = "dataSource" class = "org.apache.commons.dbcp.BasicDataSource"
  24. destroy-method = "close">
  25. <property name="driverClassName" value="${jdbc.driver}" />
  26. <property name="url" value="${jdbc.url}" />
  27. <property name="username" value="${jdbc.username}" />
  28. <property name="password" value="${jdbc.password}" />
  29. <!-- 初始化连接大小 -->
  30. <property name="initialSize" value="${jdbc.initialSize}" />
  31. <!-- 连接池最大数量 -->
  32. <property name="maxActive" value="${jdbc.maxActive}"/>
  33. <!-- 连接池最大空闲 -->
  34. <property name="maxIdle" value="${jdbc.maxIdle}" />
  35. <!-- 连接池最小空闲 -->
  36. <property name="minIdle" value="${jdbc.minIdle}" />
  37. <!-- 获取连接最大等待时间 -->
  38. <property name="maxWait" value="${jdbc.maxWait}" />
  39. </bean>
  40.  
  41. <!-- 结合Spring和Mybatis -->
  42. <bean id = "sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  43. <property name="dataSource" ref="dataSource" />
  44. <!--给映射的类配置别名,驼峰命名,默认首字母小写-->
  45. <property name="typeAliasesPackage" value="com.ssm.test.entity"/>
  46. <!-- 自动扫描mapping.xml文件 -->
  47. <property name = "mapperLocations" value="classpath:com/ssm/test/mapper/*.xml" />
  48. </bean>
  49.  
  50. <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
  51. <bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer">
  52. <property name = "basePackage" value="com.ssm.test.dao" />
  53. <property name = "sqlSessionFactoryBeanName" value = "sqlSessionFactory" />
  54. </bean>
  55.  
  56. <!-- 定义事务 -->
  57. <bean id = "transactionManager"
  58. class = "org.springframework.jdbc.datasource.DataSourceTransactionManager">
  59. <property name = "dataSource" ref = "dataSource" />
  60. </bean>
  61.  
  62. <!-- 使用注解定义事务 -->
  63. <tx:annotation-driven transaction-manager = "transactionManager" />
  64. </beans>

  5、jdbc.properties

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/test
  3. jdbc.username=root
  4. jdbc.password=123123
  5. #初始化连接数
  6. jdbc.initialSize=0
  7. #最大活跃连接数
  8. jdbc.maxActive=20
  9. #最大连接数
  10. jdbc.maxIdle=20
  11. #最小连接数
  12. jdbc.minIdle=1
  13. #最大等待时间
  14. jdbc.maxWait=60000

  6、log4j.properties配置

  1. log4j.rootLogger=INFO,Console,File
  2. log4j.appender.Console=org.apache.log4j.ConsoleAppender
  3. log4j.appender.Console.Target=System.out
  4. log4j.appender.Console.layout = org.apache.log4j.PatternLayout
  5. log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
  6.  
  7. log4j.appender.File = org.apache.log4j.RollingFileAppender
  8. log4j.appender.File.File = logs/ssm.log
  9. log4j.appender.File.MaxFileSize = 10MB
  10. log4j.appender.File.Threshold = ALL
  11. log4j.appender.File.layout = org.apache.log4j.PatternLayout
  12. log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

  7、web.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns="http://java.sun.com/xml/ns/javaee"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  6. version="3.0">
  7. <display-name>Archetype Created Web Application</display-name>
  8. <!-- Spring和Mybatis的配置文件 -->
  9. <context-param>
  10. <param-name>contextConfigLocation</param-name>
  11. <param-value>classpath:spring-mybatis.xml</param-value>
  12. </context-param>
  13. <context-param>
  14. <param-name/>
  15. <param-value/>
  16. </context-param>
  17.  
  18. <!-- 编码过滤器 -->
  19. <filter>
  20. <filter-name>encodingFilter</filter-name>
  21. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  22. <async-supported>true</async-supported>
  23. <init-param>
  24. <param-name>encoding</param-name>
  25. <param-value>UTF-8</param-value>
  26. </init-param>
  27. </filter>
  28. <filter-mapping>
  29. <filter-name>encodingFilter</filter-name>
  30. <url-pattern>/*</url-pattern>
  31. </filter-mapping>
  32.  
  33. <!-- Spring监听器 -->
  34. <listener>
  35. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  36. </listener>
  37. <!-- 防止Spring内存溢出监听器 -->
  38. <listener>
  39. <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
  40. </listener>
  41.  
  42. <!-- Spring MVC servlet -->
  43. <servlet>
  44. <servlet-name>SpringMVC</servlet-name>
  45. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  46. <init-param>
  47. <param-name>contextConfigLocation</param-name>
  48. <param-value>classpath:spring-mvc.xml</param-value>
  49. </init-param>
  50. <!-- 容器在启动时就加载这个servlet -->
  51. <load-on-startup>1</load-on-startup>
  52. <async-supported>true</async-supported>
  53. </servlet>
  54.  
  55. <servlet-mapping>
  56. <servlet-name>SpringMVC</servlet-name>
  57. <url-pattern>*.do</url-pattern>
  58. </servlet-mapping>
  59.  
  60. <!-- 设置默认首页 -->
  61. <welcome-file-list>
  62. <welcome-file>/index.jsp</welcome-file>
  63. </welcome-file-list>
  64.  
  65. </web-app>

  8、创建实体:User.java

  1. package com.ssm.test.entity;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public class User implements Serializable {
  6.  
  7. private int id;
  8. private String name;
  9. private String password;
  10. private int age;
  11.  
  12. public int getId() {
  13. return id;
  14. }
  15.  
  16. public void setId(int id) {
  17. this.id = id;
  18. }
  19.  
  20. public String getName() {
  21. return name;
  22. }
  23.  
  24. public void setName(String name) {
  25. this.name = name;
  26. }
  27.  
  28. public String getPassword() {
  29. return password;
  30. }
  31.  
  32. public void setPassword(String password) {
  33. this.password = password;
  34. }
  35.  
  36. public int getAge() {
  37. return age;
  38. }
  39.  
  40. public void setAge(int age) {
  41. this.age = age;
  42. }
  43.  
  44. }

  9、创建service接口及实现类

  9.1、UserService.java

  1. package com.ssm.test.service;
  2.  
  3. import com.ssm.test.entity.User;
  4.  
  5. public interface UserService {
  6. User queryUserInfoById(String id);
  7. }

  9.2、UserServiceImpl.java

  1. package com.ssm.test.service.impl;
  2.  
  3. import com.ssm.test.dao.UserDao;
  4. import com.ssm.test.entity.User;
  5. import com.ssm.test.service.UserService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8.  
  9. @Service
  10. public class UserServiceImpl implements UserService {
  11.  
  12. @Autowired
  13. private UserDao userDao;
  14.  
  15. @Override
  16. public User queryUserInfoById(String id) {
  17. return userDao.queryUserInfoById(id);
  18. }
  19. }

 10、创建数据交互层接口及对应的mapper文件:

 10.1、 UserDao.java

  1. package com.ssm.test.dao;
  2.  
  3. import com.ssm.test.entity.User;
  4.  
  5. public interface UserDao {
  6.  
  7. User queryUserInfoById(String id);
  8. }

  10.2、User.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3. <mapper namespace="com.ssm.test.dao.UserDao">
  4. <select id="queryUserInfoById" parameterType="string" resultType="user">
  5. select name as name,age as age,password as password from user where id = #{id}
  6. </select>
  7. </mapper>

11、创建控制层:UserController.java

  1. package com.ssm.test.controller;
  2.  
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6.  
  7. import javax.servlet.http.HttpServletRequest;
  8.  
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.apache.log4j.Logger;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Controller;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14. import org.springframework.web.bind.annotation.RequestParam;
  15. import org.springframework.web.bind.annotation.ResponseBody;
  16. import org.springframework.web.multipart.MultipartFile;
  17. import org.springframework.web.servlet.ModelAndView;
  18.  
  19. import com.ssm.test.entity.User;
  20. import com.ssm.test.service.UserService;
  21.  
  22. @Controller
  23. @RequestMapping("/user")
  24. public class UserController {
  25.  
  26. private static Logger logger = Logger.getLogger(UserController.class);
  27. private static final String excelPath = "E:\\";
  28.  
  29. @Autowired
  30. private UserService userService;
  31.  
  32. @RequestMapping("/index")
  33. public ModelAndView index(HttpServletRequest request, ModelAndView model){
  34. User user = null;
  35. try {
  36. String id = request.getParameter("id");
  37. if (StringUtils.isNotEmpty(id)){
  38. user = userService.queryUserInfoById(id);
  39. }
  40. model.addObject("name",user.getName());
  41. model.addObject("age",user.getAge());
  42. model.addObject("pw",user.getPassword());
  43. model.setViewName("index");
  44. } catch (Exception e) {
  45. logger.error("user异常:",e);
  46. }
  47. return model;
  48. }
  49.  
  50. @RequestMapping("/upload")
  51. @ResponseBody
  52. public String upload(@RequestParam("file") MultipartFile file,HttpServletRequest request) {
  53.  
  54. String uname = request.getParameter("uname");
  55. String pw = request.getParameter("pw");
  56. String age = request.getParameter("age");
  57. String originalFilename = file.getOriginalFilename();
  58.  
  59. String fileName = excelPath + File.separator + "test"+ File.separator + originalFilename;
  60.  
  61. File desFile = new File(fileName);
  62. if (!desFile.exists()) {
  63. desFile.getParentFile().mkdirs();
  64. }
  65. logger.info("【"+uname+ ","+ age+"岁,密码:"+pw+"】" + "上传文件:"+originalFilename);
  66. boolean createFileFlag = createFile(file,desFile);
  67. if (createFileFlag) {
  68. return "{\"state\":\"succ\",\"msg\":\"succ\"}";
  69. }else {
  70. return "{\"state\":\"fail\",\"msg\":\"fail\"}";
  71. }
  72.  
  73. }
  74.  
  75. private boolean createFile(MultipartFile file,File desFile) {
  76. boolean flag = false;
  77. try {
  78. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desFile));
  79. bos.write(file.getBytes());
  80. bos.flush();
  81. bos.close();
  82. flag = true;
  83. } catch (Exception e) {
  84. logger.error("【文件上传异常】:",e);
  85. }
  86. return flag;
  87. }
  88. }

  12、创建jsp页面:index.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <!--获取URL根路径-->
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
  6. + path + "/";
  7. %>
  8. <html>
  9. <head>
  10. <link rel="stylesheet" href="${basePath}/SSM/css/webuploader.css"/>
  11. </head>
  12. <body>
  13. <form id="uploadForm" enctype="multipart/form-data">
  14. <table>
  15. <tr>
  16. <td>
  17. 姓名:<input id="uname" value="${name}" type="text">
  18. </td>
  19. </tr>
  20. <tr>
  21. <td>
  22. 年龄:<input id="age" value="${age}" type="text">
  23. </td>
  24. </tr>
  25. <tr>
  26. <td>
  27. 密码:<input id="pw" value="${pw}" type="password">
  28. </td>
  29. </tr>
  30. <tr>
  31. <td id="fileList" style=""></td>
  32. </tr>
  33. <tr>
  34. <td id="csvPicker" class="webuploader-container clearfix" style="float: left;"></td>
  35. <td id="UploadBtn" class="webuploader-pick clearfix" >开始上传</td>
  36. </tr>
  37. </table>
  38. </form>
  39. <script type="text/javascript" src="${basePath}/SSM/js/jquery/jquery.js"></script>
  40. <script type="text/javascript" src="${basePath}/SSM/js/webupload/webuploader.js"></script>
  41. <script type="text/javascript">
  42. var $list = $('#fileList');
  43. var uploader = WebUploader.create({
  44. // 存在文件自动上传
  45. auto: false,
  46. // swf文件路径
  47. swf: './Uploader.swf',
  48. // 文件接收服务端地址。
  49. server: 'upload.do',
  50. // 选择文件的按钮。
  51. pick: {id: '#csvPicker', label: 'innerHTML', innerHTML: '上传文件', multiple: false},
  52. // 限制文件类型
  53. accept: {title: 'xls,xlsx', extensions: 'xls,xlsx', mimeTypes: 'xls/*,xlsx/*'},
  54. // 是否分片上传
  55. chunked: false,
  56. // 设置分片大小
  57. chunkSize: 5242880,
  58. // 最高并发线程 1
  59. threads: 1,
  60. //允许重复上传
  61. duplicate: true,
  62. // 压缩文件
  63. resize: false,
  64. /** 上传方式 */
  65. method: 'post',
  66. //设定单个文件大小 不能超过20M
  67. fileSingleSizeLimit: 20 * 1024 * 1024,
  68. fileNumLimit:1
  69. })
  70. // 当有文件被添加进队列的时候
  71. uploader.on('fileQueued', function (file) {
  72. $list.append('<div id="' + file.id + '" class="item">' +
  73. '<h4 class="info" style="font-size: 14px;margin-top: 4px;margin-bottom: 5px;">' + file.name + '<button type="button" fileId="' + file.id + '"' +
  74. ' class="btn btn-danger btn-delete" style="padding: 0px 4px;margin-left: 6px;font-size: 5px;background-color: #999999;border-color: #999999;">' +
  75. '<span class="glyphicon glyphicon-trash">X</span></button>' +
  76. '<span class="state" style="display: inline-block; margin-left: 12px">等待上传...</span></h4>' +
  77. '</div>');
  78. /** 删除队列文件 */
  79. $(document).on('click', '.btn-delete', function () {
  80. uploader.removeFile(file,true);
  81. $(this).parent().parent().fadeOut();
  82. $(this).parent().parent().remove();
  83. })
  84. });
  85. /** 开始上传 */
  86. $('#UploadBtn').click(function () {
  87. uploader.upload($('.btn-delete').attr('fileId'))
  88. });
  89. /** 上传过程中进度条 */
  90. uploader.on('uploadProgress', function (file, percentage) {
  91. var $li = $('#' + file.id);
  92. $li.find('.state').text(Math.ceil(percentage * 100) + '%');
  93. });
  94. /** 完成上传 */
  95. uploader.on('uploadSuccess', function (file, reponse) {
  96. if(reponse.state == 'succ'){
  97. alert(reponse.msg);
  98. //this.options.formData.type = '';
  99. this.options.formData.age = '';
  100. this.options.formData.uname = '';
  101. this.options.formData.pw = '';
  102. uploader.removeFile(uploader.getFile(file.id));
  103. uploader.getFiles('inited');
  104. }else{
  105. //上传失败将文件从队列中移出避免再次添加统一文件时不显示名称
  106. uploader.removeFile(uploader.getFile(file.id));
  107. uploader.getFiles('inited');
  108. alert(reponse.msg);
  109. }
  110. });
  111. /** 文件上传开始之前 */
  112. uploader.on('uploadStart', function (file, reponse) {
  113. var uname = $("#uname").val();
  114. var pw = $("#pw").val();
  115. var age = $("#age").val();
  116. if(name == null && name == ''){
  117. alert('姓名不能为空');
  118. return false;
  119. }
  120. if(pw == null && pw == ''){
  121. alert('密码不能为空');
  122. return false;
  123. }
  124. //this.options.formData.type = $("#type option:selected").val();
  125. this.options.formData.uname = uname;
  126. this.options.formData.age = age;
  127. this.options.formData.pw = pw;
  128. });
  129. /** 上传失败 */
  130. uploader.on('uploadError', function (file) {
  131. $('#' + file.id).find('.state').text('上传出错!');
  132. });
  133. /** 上传完成后执行 */
  134. uploader.on('uploadComplete', function (file) {
  135. $('#' + file.id).fadeOut();
  136. });
  137. /** 文件上传前处理 */
  138. uploader.on('beforeFileQueued', function (chunk, data) {
  139. /*
  140. 在文件加入队列之前可以根据需求在此监听事件中加入自己的处理逻辑
  141. */
  142. });
  143. /**
  144. * 验证文件格式以及文件大小
  145. */
  146. uploader.on("error", function (type) {
  147. if (type == "Q_TYPE_DENIED") {
  148. alert("请上传xlsx格式文件");
  149. } else if (type == "F_EXCEED_SIZE") {
  150. alert("文件大小不能超过20M");
  151. }
  152. });
  153. </script>
  154. </body>
  155. </html>

  13、测试:

打开浏览器访问:http://localhost:9090/SSM/user/index.do?id=1

上传成功后获取到的响应信息提示

控制台log打印

检查本地文件存储是否存储成功

SSM整合+WebUpload使用(spring+springmvc+mybatis+maven)的更多相关文章

  1. SSM Spring+SpringMVC+mybatis+maven+mysql环境搭建

    SSM Spring+SpringMVC+mybatis+maven环境搭建 1.首先右键点击项目区空白处,选择new->other..在弹出框中输入maven,选择Maven Project. ...

  2. Spring+SpringMVC+MyBatis+Maven框架整合

    本文记录了Spring+SpringMVC+MyBatis+Maven框架整合的记录,主要记录以下几点 一.Maven需要引入的jar包 二.Spring与SpringMVC的配置分离 三.Sprin ...

  3. SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)【申明:来源于网络】

    SSM框架--详细整合教程(Spring+SpringMVC+MyBatis)[申明:来源于网络] 地址:http://blog.csdn.net/u014662268/article/details ...

  4. 详细整合教程(Spring+SpringMVC+MyBatis)

    详细整合教程(Spring+SpringMVC+MyBatis) http://blog.csdn.net/gebitan505/article/details/44455235/

  5. SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)【转载】

    最近在学习Spring+SpringMVC+MyBatis的整合.以下是参考网上的资料自己实践操作的详细步骤. 1.基本概念   1.1.Spring Spring是一个开源框架,Spring是于20 ...

  6. Maven+SSM框架搭建【spring+springmvc+mybatis】

    本案例用到:ssm[spring+springmvc+mybatis]框架 数据库:mysql (推荐使用mysql 或者 sqlserver  .oracle太大,一般大型项目才会用到) 开发工具: ...

  7. 【SSM之旅】Spring+SpringMVC+MyBatis+Bootstrap整合基础篇(一)项目简介及技术选型相关介绍

    试水 一直想去搭建个自己的个人博客,苦于自己的技术有限,然后也个人也比较懒散.想动而不能动,想动而懒得动,就这么一直拖到了现在.总觉得应该把这几年来的所学总结一番,这样才能有所成长. 不知在何时,那就 ...

  8. Spring+SpringMVC+Mybatis+MAVEN+Eclipse+项目完整环境搭建

    1.新建一个Maven项目,创建父项目. 2.创建子项目模块 3.创建javaWeb项目 4.创建后的项目目录结构 5.Maven文件配置 parent父项目pom.xml文件配置 <?xml ...

  9. SSM后台管理系统(Spring SpringMVC Mybatis Mysql EasyUI)

    非常简单的一个后台管理系统,功能不多,框架也不复杂, 源码下载(附数据库)-ssm后台管理系统框架(Spring mvc + mybatis + mysql + easyui ) 实例图片

随机推荐

  1. SkyWalking 搭建及简单使用(Linux)

    1.需求 公司项目采用微服务的架构,服务很多,人工监控是不可能的,项目的访问量很大,想通过日志查找某个方法中性能的问题也是非常困难的.但是系统的性能问题是不能忽视的.系统性能检测的问题如鲠在喉,经过长 ...

  2. 方法解析之Method与ConstMethod介绍

    HotSpot通过Method与ConstMethod来保存方法元信息. 1.Method Method没有子类,定义在method.hpp文件中,其类继承关系如下图: Method用于表示一个Jav ...

  3. Web组件的三种关联关系

    Web应用程序如此强大的原因之一是它们能彼此链接和聚合信息资源.Web组件之间存在三种关联关系: ●  请求转发 ●  URL重定向 ●  包含 存在以上关联关系的Web组件可以是JSP或Servle ...

  4. 2020-04-08:为什么TCP握手需要三次?

    假想一下,如果我们去掉了第三次呢?如果只是第二次建立的话,服务端和客户端就已经建立,但是如果客户端没有收到服务端的回应?这个时候,客户端认为没有建立,服务端却为认为建立成功,并保存了必要的资源,如果出 ...

  5. C#LeetCode刷题之#350-两个数组的交集 II(Intersection of Two Arrays II)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4044 访问. 给定两个数组,编写一个函数来计算它们的交集. 输入 ...

  6. LeetCode 115.不同的子序列 详解

    题目详情 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串.(例如, ...

  7. Oracle从回收站找回误删的数据

    Step1 先根据删除时间查看删除了那些表 select * from recyclebin where type = 'TABLE' and createtime like '${删除时间}%' o ...

  8. 【Codeforces】CF Round #592 (Div. 2) - 题解

    Problem - A Tomorrow is a difficult day for Polycarp: he has to attend \(a\) lectures and \(b\) prac ...

  9. (转)文件上传org.apache.tomcat.util.http.fileupload.FileUploadException: Stream closed

    文件上传时,tomcat报错org.springframework.web.multipart.MultipartException: Failed to parse multipart servle ...

  10. java.io.IOException: Stream closed 的问题

    public static String getBodyString(ServletRequest request) { StringBuilder sb = new StringBuilder(); ...