springMVC的中文问题和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>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上传文件:
首先 配置web.xml文件:
在web.xml中新增加一段
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
表示允许访问*.jpg。
为什么要加这一段呢? 因为配置springmvc的servlet的时候,使用的路径是"/",导致静态资源在默认情况下不能访问,所以要加上这一段,允许访问jpg。 并且必须加在springmvc的servlet之前
注意:
这里仅仅是允许访问jpg,如果你要显示png,gif那么需要额外进行配置 ,方法相似。
配置springmvc-servlet.xml :
新增加一段配置
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
开放对上传功能的支持
上传页面:
需要注意的是form 的两个属性必须提供
method=“post” 和 enctype=“multipart/form-data” 缺一不可
上传组件 增加一个属性 accept=“image/*” 表示只能选择图片进行上传
留意 <input type="file" name="image" accept="image/*" /> 这个image,后面会用到这个image
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*" isELIgnored="false"%>
<form action="uploadImage" method="post" enctype="multipart/form-data">
选择图片:<input type="file" name="image" accept="image/*" /> <br>
<input type="submit" value="上传">
</form>
在UploadedImageFile中封装MultipartFile类型的字段 image ,用于接受页面的注入
这里的字段 image必须和上传页面upload.jsp中的image
<input type="file" name="image" accept="image/*" />
保持一致 ,如同之前的实体类一致:
import org.springframework.web.multipart.MultipartFile;
public class UploadedImageFile {
MultipartFile image;
public MultipartFile getImage() {
return image;
}
public void setImage(MultipartFile image) {
this.image = image;
}
}
UploadController 上传控制器
此处出现了两处错误 让我倒腾了一下午:
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.xwork.RandomStringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import pojo.UploadedImageFile;
@Controller
public class UploadController {
@RequestMapping("/uploadImage")
public ModelAndView upload(HttpServletRequest request, UploadedImageFile file)
throws IllegalStateException, IOException {
String name = RandomStringUtils.randomAlphanumeric(10);
String newFileName = name + ".jpg";
File newFile = new File(request.getServletContext().getRealPath("/image"), newFileName);
newFile.getParentFile().mkdirs();
file.getImage().transferTo(newFile);
ModelAndView mav = new ModelAndView("showUploadedFile");
mav.addObject("imageName", newFileName);
return mav;
}
}
一是:org.apache.commons.lang.xwork.RandomStringUtils;
此处依赖未导入,maven仓库里的资源缺少 ,当我手动写入依赖时版本对应不上 正确的是先写groupID 会弹出相应的依赖名 再对应获取 正确的版本会弹出
以下是导入的两个依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.1</version>
</dependency>
有时候导入会显示错误,不用着急,手动刷新即可
二处错误:Cannot resolve method ‘getServletContext()
原因在于之前的maven依赖,版本低:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
应该改成:
```xml
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
showUploadedFile.jsp 显示图片的页面 :
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<img src="image/${imageName}"/>
本文讲述了在SpringMVC中解决中文问题和配置上传文件的方法,包括在web.xml中允许访问静态资源,配置springmvc-servlet.xml以支持上传功能,以及上传页面的form属性设置。此外,还详细讨论了在处理上传过程中遇到的Maven依赖问题,如org.apache.commons.lang.xwork.RandomStringUtils的导入,以及因依赖版本过低导致的getServletContext()方法无法解析的问题。
1090

被折叠的 条评论
为什么被折叠?



