SpringMVC中文问题 和上传文件 及其遇到的一些maven依赖管理的细节

本文讲述了在SpringMVC中解决中文问题和配置上传文件的方法,包括在web.xml中允许访问静态资源,配置springmvc-servlet.xml以支持上传功能,以及上传页面的form属性设置。此外,还详细讨论了在处理上传过程中遇到的Maven依赖问题,如org.apache.commons.lang.xwork.RandomStringUtils的导入,以及因依赖版本过低导致的getServletContext()方法无法解析的问题。

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}"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值