SpringMVC的注解用法以及SpringMVC对resultful风格的支持

本文深入探讨SpringMVC框架的高级应用,包括@RequestMapping注解的详细使用、文件上传的处理流程、JSON交互的实现、RESTful风格的支持及配置、以及拦截器的定义与使用。适合有一定SpringMVC基础的开发者进一步提升技能。
1、@RequestMapping 注解的用法
  1. value:多个请求地址可以同时指向同一个方法
@RequestMapping(value={"/list","/list2"})
  1. method:限制请求方式,默认为post和get
@RequestMapping(value="/list",method= {RequestMethod.GET,RequestMethod.POST})
  1. RequestMapping注解写在Controller上是,表示窄化请求映射(路径)
@Controller
@RequestMapping(value="/item/")
2、文件上传
  1. 文件上传页面三要素

    • 需要添加两个jar commons-io.jar commons-fileupload.jar
    • 表单提交方式一定为post
    • 表单中enctype的值一定为multipart/form-data
    • input的类型一定为file
  2. SpringMVC的要素

    • 在springmvc容器中配置文件解析器
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置最大上传为5MB -->
        <property name="maxUploadSize">
            <value>5242880</value>
        </property>
    </bean>
    
    • 绑定参数类型 MultipartFile ,参数的名字要和 input的name属性值保持一致
  3. 文件保存实例

@RequestMapping("/updateitem")
public String updateItem(Items item,MultipartFile pictureFile,Model model) throws Exception, IOException {

    //获取到文件的名称和后缀
    String originalFilename = pictureFile.getOriginalFilename();
    //获取到文件的后缀
    String extendName = originalFilename.substring(originalFilename.lastIndexOf("."));
    //通过uuid设置文件的名称
    String name = UUID.randomUUID().toString().replace("-", "");
    //合并文件的名称和后缀
    String fileName = name + extendName;
    //保存文件到文件系统
    pictureFile.transferTo(new File("F:\\upFile\\"+fileName));
    //将路径保存到item中
    item.setPic(fileName);
    
    itemsService.update(item);
    return "success";
}
3、json交互
  1. @ResponseBody:把即将返回的对象转成json字符串并且回写到浏览器

    需要包:jackson-annotations-2.4.0.jar、jackson-core-2.4.2.jar、jackson-databind-2.4.2.jar

<!-- 前台ajax -->
<script type="text/javascript">
    function save(){
		$.ajax({
			url:'${pageContext.request.contextPath }/updateitemAjax.action',
			type:'post',
			/* 将form表中的数据序列号为一个对象 */
			data:$("#itemForm").serialize(),
			dataType:'json',
			success:function(data){
				alert(data.success)
			}
		})
	}
</script>
//后台接收数据,并返回json数据
@RequestMapping("/updateitemAjax")
@ResponseBody
public Map updateItemAjax(Items item,MultipartFile pictureFile,Model model) throws Exception, IOException {

	Map<String,Object> json = new HashMap<String,Object>();
    json.put("success", true);
    
    //平常方式:将json转换为json格式,然后通过Request.getWrite().Write("..")回写数据到页面

    return json;
}
  1. @RequestBody:强制请求的参数是json对象
4、SpringMVC对resultful风格的支持

需求:将访问路径改为第二种

/items/itemEdit.action?id=2 -------> /items/itemEdit/2/3

  1. 修改web.xml中的url-pattern
<!-- 拦截除jsp以外的所有资源 -->
<url-pattern>/</url-pattern>
  1. 修改方法的@RequestMapping注解
//通过占位符表示请求中的参数
@RequestMapping("/itemEdit/{id}")
public String itemEdit(@PathVariable("id")int id,Model model) {
	Items items = itemsService.findById(id);
	model.addAttribute("item", items);
	return "editItem";
}
  1. 处理静态资源 (如果是静态资源,直接访问相应文件夹中的文件)
<!-- 如果是静态资源,直接访问相应文件夹中的文件 -->
<!-- location:请求的访问路径		mapping:映射出文件的路径 -->
<mvc:resources location="/js/" mapping="/js/**"/>
5、SpringMVC中的拦截器
  1. 定义:

    Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。

  2. 使用

    • 必须实现HandlerInterceptor接口
    Public class HandlerInterceptor1 implements HandlerInterceptor{
    
    	/**
    	 * controller执行前调用此方法
    	 * 返回true表示继续执行,返回false中止执行
    	 * 这里可以加入登录校验、权限拦截等
    	 */
    	@Override
    	Public boolean preHandle(HttpServletRequest request,
    			HttpServletResponse response, Object handler) throws Exception {
    		// TODO Auto-generated method stub
    		Return false;
    	}
    	/**
    	 * controller执行后但未返回视图前调用此方法
    	 * 这里可在返回用户前对模型数据进行加工处理,比如这里加入公用信息以便页面显示
    	 */
    	@Override
    	Public void postHandle(HttpServletRequest request,
    			HttpServletResponse response, Object handler,
    			ModelAndView modelAndView) throws Exception {
    		// TODO Auto-generated method stub
    	}
    	/**
    	 * controller执行后且视图返回后调用此方法
    	 * 这里可得到执行controller时的异常信息
    	 * 这里可记录操作日志,资源清理等
    	 */
    	@Override
    	Public void afterCompletion(HttpServletRequest request,
    			HttpServletResponse response, Object handler, Exception ex)
    			throws Exception {
    		// TODO Auto-generated method stub
    	}
    }
    
    
    • 拦截器的配置
    <!--拦截器 -->
    <mvc:interceptors>
    	<!--多个拦截器,顺序执行 -->
    	<mvc:interceptor>
    		<mvc:mapping path="/**"/>
    		<bean class="com.edu.springmvc.filter.HandlerInterceptor1"></bean>
    	</mvc:interceptor>
    	<mvc:interceptor>
    		<mvc:mapping path="/**"/>
    		<bean class="com.edu.springmvc.filter.HandlerInterceptor2"></bean>
    	</mvc:interceptor>
    </mvc:interceptors>
    
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值