SpringMVC的其他应用

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,如图

扫描二维码关注公众号,回复: 8576874 查看本文章

然后,在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注解,就会走视图解析器,返回页面。

发布了128 篇原创文章 · 获赞 6 · 访问量 3262

猜你喜欢

转载自blog.csdn.net/weixin_43318134/article/details/102906742