Spring MVC[03-02]图片上传显示
IDEA创建maven-archetype-webapp项目
pom.xml
properties标签中添加spring.version标签
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<spring.version>4.3.7.RELEASE</spring.version>
</properties>
dependencies标签中添加相关依赖配置
<dependencies>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- Spring相关包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!--web 项目 需要配置 jsp servlet api -->
<!-- JSP标准标签库 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
<!--servlet api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!--com.mchange.v2.c3p0.ComboPooledDataSource-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!--test-->
<dependency>
<groupId>com.dfbz.test</groupId>
<artifactId>SpringMVC_03_02</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<optional>true</optional>
<scope>provided</scope>
</dependency>
<!--Log4j日志输出功能-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
<!--文件上传-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!-- AOP相关包 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.0</version>
</dependency>
<!-- MyBatis相关包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<!-- MySQL相关包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.20</version>
</dependency>
<!-- Spring集成MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
build标签中添加
<!--设置资源过滤器 静态资源导出-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--指定xml文件位置-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!--这里写成true会造成编译注释错误-->
<filtering>false</filtering>
</resource>
</resources>
a.jsp
在webapp/WEB-INF目录下创建a.jsp
<!--body内容-->
<form action="upImage" method="post" enctype="multipart/form-data">
图片上传:<input type="file" name="imgfile"><br>
<input type="submit" value="上传图片">
</form>
MyController.java
在java目录下创建controller层,创建MyController.java
@Controller
public class MyController{
@RequestMapping("upImage")
public String upShow(@RequestParam MultipartFile imgfile,HttpServletRequest request) throws IOException {
String realPath = request.getSession().getServletContext().getRealPath("img");
File f1=new File(realPath+"/"+imgfile.getOriginalFilename());
imgfile.transferTo(f1);
request.setAttribute("img",imgfile.getOriginalFilename());
return "show";
}
}
形参MultipartFile imgfile前需要加注解@RequestParam
imgfile与a.jsp中input标签name一致
realPath得到的是项目中img目录的路径(字符串)
新建文件对象,路径为img目录/加原文件名拼接
并将文件的完整路径key设为img,转到show页面
show.jsp
在webapp/WEB-INF目录下创建show.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<img src="img/${img}">
</body>
</html>
设置解析EL表达式,添加img标签显示上传的图片
spring-controller.xml
在main目录下创建resources文件夹,创建spring-controller.xml
右键resources(new→XML Configuration File→Spring Config)
<!--注解映射器-->
<context:component-scan base-package="com.dfbz.controller"/>
<!-- 视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- 文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10240"/>
</bean>
视图解析器中设置前缀为/WEB-INF/设置后缀为.jsp
则MyController.java中aPage方法返回a的效果就是访问/WEB-INF/a.jsp
文件上传id为multipartResolver,类是CommonsMultipartResolver
property中设置name为maxUploadSize意为最大上传大小,value的值1就代表1B(10240意为10KB)
web.xml
在web-app标签中添加
<!--设置编码格式为UTF-8-->
<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>
<!--配置DispatcherServlet加载spring容器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-controller.xml</param-value>
</init-param>
</servlet>
<!--设置接管所有链接-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
web.xml(tomcat)
在tomcat安装目录编辑conf下的web.xml文件,例如D:\apache-tomcat-7.0.90\conf\web.xml
大约在390行左右位置添加
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
server.xml(Tomcat)
在tomcat安装目录编辑conf下的web.xml文件,例如D:\apache-tomcat-7.0.90\conf\server.xml
大约在70行左右位置添加URIEncoding="UTF-8"
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
/>
解决文件名含有中文程序执行乱码的问题(未出现乱码此步忽略)
部署Tomcat并运行项目
部署Tomcat并运行项目,地址栏输入a,回车进入a.jsp页面
点击选择文件按钮,选择图片后点击上传图片按钮,页面跳转至show.jsp页面,同时页面中显示上传的图片
注意
若target目录未生成img目录,需要手动创建或者停止项目将target目录删除
重新运行项目
以上就是本期总结的全部内容,愿大家相互学习,共同进步!