返回值类型
1.返回字符串
Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。
@RequestMapping(value="/hello")
public String sayHello() {
System.out.println("Hello SpringMVC!!");
// 跳转到XX页面
return "success";
}
2. 返回值是void
如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找JSP页面没有找到, 默认会跳转到@RequestMapping(value="/initUpdate") initUpdate的页面。
可以使用请求转发或者重定向跳转到指定的页面(需要使用绝对地址)
3. 返回值是ModelAndView对象
ModelAndView对象是Spring提供的一个对象,可以用来调整具体的JSP视图
可以通过addObject()方法将目标保存到Request域中
ResponseBody响应json数据
该注解用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的 数据如:json,xml 等,通过 Response 响应给客户端
DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而 不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置
- mvc:resources标签配置不过滤
- location元素表示webapp目录下的包下的所有文件
- mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b
<!-- 设置静态资源不过滤 -->
<mvc:resources location="/css/" mapping="/css/**"/> <!-- 样式 -->
<mvc:resources location="/images/" mapping="/images/**"/> <!-- 图片 -->
<mvc:resources location="/js/" mapping="/js/**"/> <!-- javascript -->
使用@RequestBody获取请求体数据
- 模拟ajax异步请求响应
- 把json的字符串转换成JavaBean的对象
- .json字符串和JavaBean对象互相转换的过程中,需要使用jackson的jar包
<script>
//页面加载,绑定单击事件
$(function () {
$("#btn").click(function () {
// alert("hello btn")
//发送ajax请求
$.ajax({
url:"user/testAjax",
contentType:"application/json;charset=UTf-8",
data:'{"username":"悦悦","password":"123","age":18}',
dataType:"json",
type:"psot",
success:function (data) {
//data服务器端响应的json数据,进行解析
alert(data)
alert(data.username)
alert(data.password())
alert(data.age)
}
})
})
})
</script>
SpringMVC实现文件上传
文件上传的必要前提
- form 表单的 enctype 取值必须是:multipart/form-data
- method 属性取值必须是 Post
- 提供一个文件选择域
- 使用 Commons-fileupload 组件实现文件上传,需要导入该组件相应的支撑 jar 包
- 配置文件解析器对象
<!--配置文件解析器对象,id固定,最大值为10M(10*1024*1024)-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"></property>
</bean>
控制器代码
/**
* springmvc文件上传
*
* @param request
* @return
* @throws Exception
*/
@RequestMapping("/fileUpload2")
public String fileUpload2(HttpServletRequest request, MultipartFile upload) throws Exception {//upload名字必须跟表单一致
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";
}