1. @RequestMapping的用法
1.1 多个请求路径配置
@RequestMapping(value = { "itemList", "itemList2" })
1.2 分目录管理
就是将@RequestMapping写在类上。
@RequestMapping("item")
public class ItemController
1.3 请求方法限定
@RequestMapping(value="/halou",method={RequestMethod.GET,RequestMethod.POST})
public void halouMvc(@RequestParam(value="id",required=true,defaultValue="234") Integer index){
System.out.println(index);
}
2. 全局异常处理器
2.1 自定义异常
public class MyException extends Exception {
private String msg;
public MyException() {
super();
}
public MyException(String msg) {
super();
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
2.2 全局异常处理器
public class CustomerExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object hanlder,
Exception ex) {
String result = "系统发生异常了,请联系管理员!";
//自定义异常处理
if(ex instanceof MyException){
result = ((MyException)ex).getMsg();
}
ModelAndView mav = new ModelAndView();
mav.addObject("msg", result);
mav.setViewName("msg");
return mav;
}
}
2.3 在SpringMVC中配置全局异常处理器
<!-- 配置全局异常处理器 -->
<bean class="com.bjc.springmvc.exception.CustomerExceptionResolver"/>
3. 图片上传
3.1 在eclipse中配置Tomcat服务器的虚拟目录
1. 双击服务器,得到如图
2. 选择modules,得到如图:
3. 点击add external web modules,得到如图:
4. 选择目录,并定义path访问路径
5. 点击OK,如图
然后,在server.xml中就会自动生成一行配置
<Context docBase="D:\safemon" path="/pic" reloadable="true"/>
也就是说,我们可以直接在server.xml中进行这行配置就可以设置虚拟目录了。
6. 启动服务器,访问:http://localhost:8080/pic/1.jpg
3.2 上传图片文件所需要的jar文件
commons-fileupload-1.2.2.jar
commons-io-2.4.jar
3.3 配置多媒体解析器
<!-- 配置多媒体处理器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 最大上传文件大小 -->
<property name="maxUploadSize" value="8388608" />
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxInMemorySize" value="40960"></property>
</bean>
注意:这里id必须填写:multipartResolver
3.4 JSP定义文件标签
<form action="http://localhost:8080/01-SpringMVC/yoxi.action" enctype="multipart/form-data">
<table>
<tr>
<input type="file" name="picFile" />
</tr>
</table>
<input type="submit" value="提交">
</form>
注意:enctype类型值必须为"multipart/form-data"
3.5 Controller编写
@RequestMapping(value="/yoxi",method=RequestMethod.POST)
public String yoxiMvc(ModelMap model,MultipartFile picFile) throws Exception{
// 新图片的前缀
String pux = UUID.randomUUID().toString();
// 上传图片的全名称
String oldName = picFile.getOriginalFilename();
// 后缀 包括 .
String sux = oldName.substring(oldName.lastIndexOf("."));
// 新图片名称
String newName = pux + sux;
// 创建文件
File file = new File("D:\\safemon\\"+newName);
// 写入文件到硬盘
picFile.transferTo(file);
return "hello";
}
注意:MultipartFile形参名必须与标签的name保持一致。
访问虚拟目录 file:///D://safemon/ 如图
4. JSON交互
4.1 @RequestBody
4.1.1 作用
该注解用于读取http请求的内容(字符串),即用于接收用户传入json串转成pojo,通过springmvc提供的HttpMessageConverter接口将读取到的内容(JSON数据)转换为java对象,并绑定到Controller方法的参数上。
4.1.2 jar包
jackson-annotations-2.4.0.jar
jackson-core-2.4.2.jar
jackson-databind-2.4.2.jar
4.1.3 用法示例
@RequestMapping(value="/yoxi")
public void getUser(@RequestBody User user) throws Exception{
System.out.println(user);
}
4.2 @ResponseBody
4.2.1 作用
该注解用于将Controller方法返回的对象,通过springMVC提供的HttpMessageConverter接口转换为指定格式的数据,如:json.xml等,通过Response响应给客户端。即@ResponseBody用于将pojo转成json串返回给客户端。
4.2.2 用法示例
@RequestMapping(value="/yoxi")
@ResponseBody
public User getUser(@RequestBody User user) throws Exception{
System.out.println(user);
return user;
}
5. Restful风格
5.1 定义
restful就是一个资源定位及资源操作的风格,不是标准也不是协议,只是一种风格,基于这种风格设计的软件可以更简洁,有层次,更易于实现缓存机制。
资源:互联网上所有的事物都可以被称之为资源
资源操作:通过POST、DELETE、PUT、GET,使用不同的方法对资源进行操作,分别对应 添加、删除、修改、查询
5.2 restful风格使用
Restful风格url上的参数通过 {} 点位符绑定,如果点位符参数名与方法参数名不一致,通过@PathVariable绑定
5.3 从URL上获取参数
使用Restful风格开发的接口,根据商品id查询商品,接口地址为:http://localhost/item/1
5.3.1 声明请求参数
使用注解@RequestMapping("item/{id}")声明请求的url
5.3.2 获取url上的数据
使用@PathVariable获取url上的参数
例如:
@RequestMapping("/item/{id}")
@ResponseBody
public Item queryItemById(@PathVariable() Integer id){
Item item = this.itemService.queryItemById(id)
return item;
}
注意:如果@RequestMapping中,点位符参数({id}),和形参名称一致,@PathVariable不用指定名称,如上面的例子。
5.4 两种获取请求参数说明
5.4.1 @PathVariable
获取url上的数据,
5.4.2 @RequestParam
获取请求参数的(包括post表单提交)
注意:在SpringMVC中,如果没有加@RequestBody注解,就会走视图解析器,返回页面。