Java日记之SpringMVC窄化路径,文件上传

一.引例

我们在开发过程中会遇到这样的问题 , 在不同包下往往会出现同名的类,造成类名的重复,spring中又是不允许出现同名的bean的,那么,我们就应该通过取别名的方式来避免,传送门(在第四目第四点)
那么当前的controller与别的controller有重名的方法时,我们可以改方法名来避开,但是这样效率太低了,因此,就有了窄化路径

二.窄化路径

如何请求窄化路径呢?
在controller类上,打上一个标签@RequestMapping("test/")就实现了,当然这个test不是固定的,其它的单词也可以. 并且, / 的位置也不是固定的,可以打在方法的@RequestMapping("/add.action")
在访问时,应该在浏览器地址栏加个test
http://localhost:8888//springMVC/test/add.action

	@Controller
	@RequestMapping("test/")
	public class UserController {
		@RequestMapping("add.action")
		public void add() {
			System.out.println("user add...");
		}
	}

三.参数绑定

步骤:
1.前端的表单上action属性的值,就是前面窄化路径后的路径,以上一目距离,这是我们的action属性的值,应该是test/add.action
2.参数较少的情况,在后台接收参数的方法上加一个与表单name属性同名的参数
3.参数较多时,将表单属性封装成一个model类,传参的时候传这个类的对象
4.传中文时,配合web.xml中定义的过滤器使用
代码 :

	@RequestMapping("add.action")
	public void add(String username,String sex) { //参数少
		System.out.println("user add...");
		System.out.println(username+"-"+sex);
	}
	@RequestMapping("addModel.action")
	public ModelAndView addModel(User user) { //参数多
		System.out.println("user add...");
		System.out.println(user.getUsername()+"-"+user.getSex());
		return null;
	}
设置编码方式的配置文件代码
	<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阶段的文件上传来说简单了很多,
但是要注意文件名不可与model类的参数属性重名

步骤 : 1.我们的controller类的对应方法上,要再加一个参数接收文件存储位置,
和http请求对象,即`MultipartFile,HttpServletRequest`
2.通过字节流的形式获取文件
3.通过文件解析器限制文件大小,`getOriginalFilename()`方法获取文件名
4.生成一个文件名

代码 :

@RequestMapping("addModel.action")
	public ModelAndView addModel(User user ,
	MultipartFile myFile ,HttpServletRequest request) {
		System.out.println("user add...");
		System.out.println(user.getUsername()+"-"+user.getSex());
		String oldName = myFile.getOriginalFilename();
		
		String basePath = request.getRealPath("/");
		String uuid = UUID.randomUUID().toString();
		String newName = uuid+oldName.
		substring(oldName.lastIndexOf("."));
		//按.切分得到后缀后跟uuid相加
		String path = basePath+newName;
		System.out.println(path);
		try {
			myFile.transferTo(new File(path));
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}//
		return null;
	}

spring约定文件上传的bean的id必须为multipartResolver

<bean id="multipartResolver" class="org.springframework.web.multipart
.commons.CommonsMultipartResolver"><!-- 在jar包找到对应的文件位置 -->
	<property name="maxUploadSize" value="10485760"></property> 
	<!-- 规定最大为10mb -->
			
</bean>

注意点 :
1.在文件上传配置中 , 可用<property>标签的defaultEncoding属性,将文件编码格式转为utf-8的形式

2.在MultipartFile参数前可用加上@RequestParam("id")注解 , 将文件封装成MultipartFile类型的对象 (其中id是前端文件的id)

3.如果需要实现多文件上传 , 要把MultipartFile改成MultipartFile[],但是在方法中进行遍历的时候 , 必须判空idEmpty()方法 .

4.多文件上传 , 如果前端有不同id的文件传入 , 我们需要再加一个MultipartFile参数

需要导入的jar包

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值