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

一.引例

我们在开发过程中会遇到这样的问题 , 在不同包下往往会出现同名的类,造成类名的重复,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>

需要导入的jar包

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45596525/article/details/107971732