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,用于对处理器进行预处理和后处理。