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