springmvc2

本文深入探讨SpringMVC框架的高级应用技巧,包括请求映射、数据交互、RESTful风格实现等内容,并提供了详细的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.@RequestMapping
通过R额questMapping注解可以定义不同的处理器映射规则
2.URL路径映射
@RequestMapping(value="/item")或@Request("/item")
value的值是数组,可以将多个url映射到同一个方法
3.在class上添加@RequestMapping(url)指定通过请求前缀,限制此类下的所有方法请求url必须以请求前缀开头,通过此方法对url进行分类管理。
如:
@RequestMapping放在类名上边,设置请求前缀
@Controller
@RequestMapping("/item")
方法名上边设置请求映射url:
@RequestMapping放在方法名上边,如下:
@RequestMapping("/queryItem “)
访问地址为:/item/queryItem
4. 限定GET方法
@RequestMapping(method = RequestMethod.GET)
如果通过Post访问则报错:
HTTP Status 405 - Request method ‘POST’ not supported
例如:
@RequestMapping(value=”/editItem",method=RequestMethod.GET)
5. 限定POST方法
@RequestMapping(method = RequestMethod.POST)
如果通过Post访问则报错:
HTTP Status 405 - Request method ‘GET’ not supported
6.GET和POST都可以
@RequestMapping(method={RequestMethod.GET,RequestMethod.POST})
7.request和response页面跳转和响应

@RequestMapping("ItemList")
public void itemList(HttpServletRequest request,HttpServletResponse response){
PrintWriter writer=response.getWiriter();
response.setCharacterEncoding("utf-8");
response.setContenType("application/json;charst=utf-8");
writer.write("{\"id":"\123"}");
}

8.重定向Redirect
controller 方法返回字符串可以指定逻辑视图名,通过视图解析为物理视图地址。
return “item/editItem”;
Contrller方法返回重定向到一个url地址,如商品修改提交后重定向到商品查询方法,参数无法带到商品查询的方法中
return “redirect:queryItem.action”;
9.异常处理器
Springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。
9.1系统中异常包括两类:预期异常和运行时期异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。
系统的dao、service、Controller出现都通过throws、Exception向上抛出,最后由springMVC前端控制器交由异常处理器进行异常处理。
在这里插入图片描述
全局异常:

public class CustomeException extends Exception{
	private String exMessage;
	public CustomeException(){
	}
    public CustomeException(String msg){
		this.exMessage = msg;
	}
	public String getExMessage() {
		return exMessage;
	}
	public void setExMessage(String exMessage) {
		this.exMessage = exMessage;
	}
}
public class GlobalExceptionResolver implements HandlerExceptionResolver{

	@Override
	public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
			Exception exception) {
		//判断异常种类
		String msg=null;
		if(exception instanceof CustomeException){
			CustomeException custExp = (CustomeException) exception;
			custExp.getExMessage();
		}else {
			//如果时候自定义异常,取错误消息
			//如果是运行时期异常,取错误的堆栈
			StringWriter s = new StringWriter();
			PrintWriter printWriter = new PrintWriter(s);
			exception.printStackTrace(printWriter);
			s.toString();
		}
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("msg", msg);
		modelAndView.setViewName("error");
		//写,日志发短息,发邮件
		//返回一个错误页面,显示错误消息
		
		return modelAndView;
	}

}

SpringMvc.xml

<bean class="com.itheima.springmvc.exception.GlobalExceptionResolver"></bean>

10.图片上传
配置多媒体文件解析器

<!-- 配置多媒体文件解析器 -->
	<!-- 文件上传 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	 <property name="maxUploadSize">
	 <value>5242880</value>
	 </property>
	</bean>
@RequestMapping("/updateitem")
	public String updateItem(Items items, MultipartFile picture) throws Exception{
		//把图片保存到图片目录下
		//为每个文件生成一个新的文件名
		String picName= UUID.randomUUID().toString();
		//取文件扩展名
		String oriName= picture.getOriginalFilename();
		String extName= oriName.substring(oriName.lastIndexOf("."));
		//保存文件
		picture.transferTo(new File("G:\\pic\\"+picName + extName));
		//把文件名保存到数据库
		items.setPic(picName + extName);
		itemService.updateItems(items);
		//返回成功页面
		return "success";
	}

11.JSON数据交互
11.1@RequestBody
作用:
@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读取到的内容转换json、xml等格式的数据并绑定到controller方法参数上
11.2@ResponseBody
作用:
该注解作用于将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端

//json数据交互
	//@RequestBody:接收json数据并转换成pojo对象
	//@ResponseBody:响应json数据,把java对象转换成json并响应
	@RequestMapping("/jsontest")
	@ResponseBody
	public Items jsonTest(@RequestBody Items items) {
		return items;
	}
<button onclick="sendJson()">json数据交互测试</button>
<script type="text/javascript">
	function sendJson() {
		$.ajax({
			type:"post",
			url:"${pageContext.request.contextPath }/item/jsontest.action",
			data:'{"id":1,"name":"电冰箱","price":1999.0}',
			contentType:"application/json;charset=utf-8",
			success:function(data){
				alert(data.id +":" +data.name);
			}
		});
	}
</script>

12.RESTful风格
12.1什么是restful
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格,是对http协议的诠释。
资源定位:互联网所有的事务都是资源,要求url中没有动词,只有名词。没有参数

	@RequestMapping("/itemEdit/{id}")
	
	public String editItem(@PathVariable("id") Integer iid,Model model){
		Items itemById = itemService.getItemById(iid);
		//把数据传递给页面
		model.addAttribute("item",itemById);
		//返回逻辑视图
		return "editItem";
	} 
<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>*.action</url-pattern>
	</servlet-mapping>
	<!-- restfull风格 -->
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<!-- /:拦截所有请求,不包括jsp。 /*:拦截所有请求包括jsp -->
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<%-- <td><a href="${pageContext.request.contextPath }/item/itemEdit.action?id=${item.id}">修改</a></td> --%>
	<td><a href="${pageContext.request.contextPath }/item/itemEdit/${item.id}">修改</a></td>

13.静态资源访问mvc:resources
如果在DispatcheService中设置url-pattern为/则必须对静态资源进行访问处理。
springMVC的<mvc:resources mapping="“location=”">实现对静态资源进行映射访问。
对js文件访问配置
<mvc:resources location="/js/mapping="/js"mapping="/js/**"/>
14.拦截器
定义
Spring Web MVC的处理器拦截器类似于Service开发中的过滤器Filter,用于对处理器进行预处理和后处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值