写在前面
今天主要学习了SpringMVC中的响应,文件上传,异常处理和拦截器。关于SpringMVC的内容到今天也就学完了。不是很多,但收获很多。可以说SpringMVC是Spring框架思想的一个具体体现。接着就是SSM整合了。加油奥利给。
SpringMVC中的响应
首先进行必要的配置。这里不再赘述了。
关于响应,最重要的应用其实就是ajax。我们这里就来看看如何通过SpringMVC来实现ajax。
首先导入jquery,这里由于SpringMVC会对所有资源进行拦截,导致我们的js文件无法读取。我们要在配置中取消对这些静态资源的拦截:
<!--告诉前端控制器哪些静态资源不拦截-->
<mvc:resources location="/js/" mapping="/js/**"/>
之后编写必要的ajax代码:
<script>
//页面加载,绑定点击事件
$(function(){
$("#btn").click(function(){
//alert("hello");
//发送ajax请求
$.ajax({
//编写json格式,设置格式属性
url:"user/testAjax",
contentType:"application/json;charset=UTF-8",
data:'{"username":"小王","password":"abc456","age":30}',
dataType:"json",
type:"post",
success:function(data){
//data指服务器端相应的json数据,进行解析
alert(data);
alert(data.username);
alert(data.age);
alert(data.password);
}
});
});
});
</script>
编写我们的Controller:
/**
* 模拟异步请求相应
* @return
*/
@RequestMapping("/testAjax")
public @ResponseBody User testAjax(@RequestBody User user){
System.out.println("testAjax方法执行了...");
//客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中
System.out.println(user);
// 做响应,模拟查询数据库
user.setUsername("哈哈");
user.setAge(40);
//作响应
return user;
}
可以看到,我们这里使用了一个@ReqeuestBody的注解。通过这个注解我们就可以取到前台发来的文件了.这里我们使用自建的User类,SpringMVC会自动把我们前台的内容找到javabean中对应的set方法赋值,只要确保前台输入的数据一致即可。最后返回值我们用了一个@ResponseBody的方式,意为把javabean转成了json对象。可以看到以往有些复杂的AJAX请求就被SpringMVC十分简单的处理了。
SpringMVC的文件上传
同服务器的文件上传
首先导入必要的jar包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.18.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.18.1</version>
</dependency>
</dependencies>
之后编写controller层代码:
/**
* SpringMVC文件上传
*
* @return
*/
@RequestMapping("/fileUpload2")
public String fileUpload2(HttpServletRequest request, MultipartFile upload) throws Exception {
System.out.println("springMVC文件上传..");
// 使用fileupload组件完成文件上传
// 上传的位置
String path = request.getSession().getServletContext().getRealPath("/uploads/");
//判断该路径是否存在
File file = new File(path);
if (!file.exists()) {
//创建该文件夹
file.mkdirs();
}
//说明是上传文件项
//获取上传文件的名称
String filename = upload.getOriginalFilename();
// 把文件的名称设置唯一值,uuid
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid + "_" + filename;
upload.transferTo(new File(path,filename));
return"success";
}
同时我们需要在配置文件中配置一下:
<!-- 配置文件解析器对象 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"></property>
</bean>
这样子就很简单的实现了文件上传功能了.
跨服务器的文件上传
对于跨服务器的文件上传,我们使用jersey的jar包来帮助我们实现。具体也很简单,见代码:
/**
* 跨服务器文件上传
*
* @return
*/
@RequestMapping("/fileUpload3")
public String fileUpload3( MultipartFile upload) throws Exception {
System.out.println("跨服务器文件上传..");
//定义上传文件服务器的路径
String path = "http://localhost:9090/SpringMVC02_fileuploadserver/uploads/";
//说明是上传文件项
//获取上传文件的名称
String filename = upload.getOriginalFilename();
// 把文件的名称设置唯一值,uuid
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid + "_" + filename;
// 创建客户端对象
Client client = Client.create();
//和图片服务器进行连接
WebResource webResource = client.resource(path + filename);
//上传文件
webResource.put(upload.getBytes());
return"success";
}
总结
可以看到,SpringMVC为我们封装了许多常用的操作,让我们写web应用的时候更加简单方便。框架的使用可以说大大简化了以往的操作。接下来就是最后的SSM整合了。