`

Spring Mvc——基本使用

阅读更多

原创内容,转载请注明出处

 

注:以下例子都是建立在第一个例子的基础上修改

1、@ResponseBody

该注解放置在一个方法上,表示会将方法的返回值写入到Http response body内(实际处理:Spring mvc 通过HttpMessageConverter消息转换器接口类将返回值转换成对应消息,然后将消息写入到Http response body内)。

 

首先在第一个例子的UserController类中添加以下代码,去构建初始化数据

 

	private static Map<String,User> map = new HashMap<String,User>();
	static{
		for(int i=0;i<10;i++){
			User user = new User("zhangsan"+i, (int) (Math.random()*50));
			map.put("zhangsan"+i,user);
		}
	}

  

在UserController类中添加如下方法。

1.返回字符串

 

	//返回字符串处理例子 http://localhost:8080/springmvctest/helloworld.shtml
	@RequestMapping("helloworld")
	@ResponseBody
	public Object helloworld(){
		return "helloworld";
	}
  

 

测试结果:输入http://localhost:8080/springmvctest/helloworld.shtml,浏览器显示

helloworld

 

2.实体bean转json

 

	//实体bean转json http://localhost:8080/springmvctest/getUser.shtml
	@RequestMapping("getUser")
	@ResponseBody
	public Object getUser(){
		User user = new User("zhangsan", (int) (Math.random()*50));
		return user;
	}
 

 

测试结果:输入http://localhost:8080/springmvctest/getUser.shtml,浏览器显示

{"name":"zhangsan","age":26}

 

3.数组转json

	//数组转json http://localhost:8080/springmvctest/getUsers.shtml
	@RequestMapping("getUsers")
	@ResponseBody
	public Object getUsers(){
		return map.values().toArray();
	}

 

测试结果:输入http://localhost:8080/springmvctest/getUsers.shtml,浏览器显示

[{"name":"zhangsan1","age":0},{"name":"zhangsan2","age":1}]

 

4.Collection集合转json

	//Collection集合转json http://localhost:8080/springmvctest/getUserCollection.shtml
	@RequestMapping("getUserCollection")
	@ResponseBody
	public Object getUserCollection(){
		return map.values();
	}

 

测试结果:输入http://localhost:8080/springmvctest/getUserCollection.shtml,浏览器显示

[{"name":"zhangsan1","age":0},{"name":"zhangsan2","age":1}]

 

5.Map集合转json

	//Map集合转json http://localhost:8080/springmvctest/getUserMap.shtml
	@RequestMapping("getUserMap")
	@ResponseBody
	public Object getUserMap(){
		return map;
	}

 

测试结果:输入http://localhost:8080/springmvctest/getUserMap.shtml,浏览器显示

{"zhangsan1":{"name":"zhangsan1","age":0},"zhangsan2":{"name":"zhangsan2","age":1}} 

 

 

2、@PathVariable

该注解用在方法参数上,被注解的参数的值将在对应的Url路径上。

 

	//PathVariable注解例子 http://localhost:8080/springmvctest/get/zhangsan1.shtml
	@RequestMapping("get/{username}")
	@ResponseBody
	public Object get(@PathVariable String username){
		User user = map.get(username);
		return user;
	}

	//PathVariable注解使用正则表达式 http://localhost:8080/springmvctest/get1/zhangsan1.shtml
	@RequestMapping("get1/{username:[a-z]+[1]}")
	@ResponseBody
	public Object get1(@PathVariable String username){
		User user = map.get(username);
		return user;
	}

 

测试结果如下

输入http://localhost:8080/springmvctest/get/zhangsan1.shtml,浏览器展示

{"name":"zhangsan1","age":0}

 

输入 http://localhost:8080/springmvctest/get/zhangsan1.shtml,浏览器展示

{"name":"zhangsan1","age":0}

 

3、@RequestParam

 @RequestParam注解使用在方法参数上,使用它可以接收请求的参数。

 

	//RequestParam注解 http://localhost:8080/springmvctest/getByusername.shtml?username=zhangsan1
	@RequestMapping("getByusername")
	@ResponseBody
	public Object getByusername(@RequestParam String username){
		User user = map.get(username);
		return user;
	}
测试结果:输入http://localhost:8080/springmvctest/getByusername.shtml?username=zhangsan1,浏览器展示

{"name":"zhangsan1","age":12}

 

4、@RequestBody

 @RequestBody注解使用在方法参数上,用来接收请求Body内容

 

 

	//RequestBody注解 http://localhost:8080/springmvctest/getRequestBody.shtml
	@RequestMapping("getRequestBody")
	@ResponseBody
	public Object getRequestBody(@RequestBody String requestBody){
		
		return "testRequestBody:"+requestBody;
	}
 

 

测试结果如下

url ——》 http://localhost:8080/springmvctest/getRequestBody.shtml

请求体——》test

浏览器显示结果 testRequestBody:test

 

测试设置如下

 

测试响应结果如下


 

5、@ModelAttribute

@ModelAttribute可用于方法体和方法参数上,使用在方法参数上可将请求参数转换为对应model对象,使用在方法体上暂不考虑。

 

	//ModelAttribute注解 http://localhost:8080/springmvctest/getUserByUser.shtml?name=lisi&age=32
	@RequestMapping(value="getUserByUser")
	@ResponseBody
	public Object getUserByUser(@ModelAttribute("user") User user){
		
		return user;
	}

 

运行结果:输入 http://localhost:8080/springmvctest/getUserByUser.shtml?name=lisi&age=32,浏览器展示如下

{"name":"lisi","age":32}

 

6、请求和响应对象作为方法接收参数

spring mvc可让HttpServletRequest和HttpServletResponse对象作为方法的接收参数 

 

	//请求、响应作为方法参数 http://localhost:8080/springmvctest/getUserByRequest.shtml?name=wangwu&age=32
	@RequestMapping(value="getUserByRequest")
	@ResponseBody
	public Object getUserByRequest(HttpServletRequest request , HttpServletResponse response){
		String name = request.getParameter("name");
		int age = Integer.parseInt(request.getParameter("age"));
		return new User(name , age);
	}

 

运行结果:输入http://localhost:8080/springmvctest/getUserByRequest.shtml?name=wangwu&age=32,在浏览器展示如下

{"name":"wangwu","age":32}

 

7、文件上传 

spring mvc支持文件上传,并且支持多文件。spring mvc文件上传解析器是CommonsMultipartResolver(如果使用Servlet3.0,则使用StandardServletMultipartResolver解析器 )。

 

1.在spring-mvc.xml配置文件下添加解析器。

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>	

 

2.在pom.xml文件下添加fileupload上传jar包。

		<!-- 文件上传包 -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>

 

3.添加方法

	//上传文件 http://localhost:8080/springmvctest/upload.shtml
	@RequestMapping(value="upload")
	@ResponseBody
	public Object upload(@RequestParam("files") MultipartFile[] files){
		StringBuffer sb = new StringBuffer();
		for(MultipartFile file : files){
			int size = (int) (file.getSize()/1024);
			sb.append("upload success,this file size is "+size+"KB.<br/>");
		}
		return sb.toString();
	}

 

4.测试结果如下图

 

 

 

 

8、@ExceptionHandler

@ExceptionHandler注解使用在方法体上,使用它将可以拦截处理该Controller类的所有的异常,其值为一个数组,即可拦截多种异常。使用注解只能拦截当前Controller类,代码不好复用,可自己实现HandlerExceptionResolver,然后在Xml配置文件中配置,达到异常统一处理

 

1、使用注解方法

 

	//ExceptionHandler注解例子 http://localhost:8080/springmvctest/exceptiontest.shtml
	@RequestMapping("exceptiontest")
	public void exceptiontest(){
		String str = null;
//		Integer.parseInt(str);//报NumberFormatException异常
		str.trim();//报NullPointerException异常
	}
	
	@ResponseBody
	@ExceptionHandler(value={NullPointerException.class,NumberFormatException.class})
	public Object exception(Exception e){
		return "it is error page:" + e.getMessage();
	}

 

运行结果输入http://localhost:8080/springmvctest/exceptiontest.shtml,浏览器展示如下

it is error page:null

 

2、使用HandlerExceptionResolver接口类,自定义处理异常。

(1).创建异常处理类HandlerException,该类实现HandlerExceptionResolver接口

 

package com.springmvctest.handler;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

public class HandlerException implements HandlerExceptionResolver {

	public ModelAndView resolveException(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex) {
		
		ModelAndView mav = new ModelAndView("error");
		mav.addObject("msg", ex.getMessage());
		
		return mav;
	}

}

 

 

(2).在spring-mvc.xml配置文件中配置HandlerException类

 

<bean class="com.springmvctest.handler.HandlerException"></bean>

 

 

 

(3).在jsp文件夹下构建error.jsp。

 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
    erro页面<br/>
    异常为:${msg} <br/>

  </body>
</html>

 

 

(4).在UserController类中添加如下方法

 

	//异常统一处理例子 http://localhost:8080/springmvctest/exceptiontest1.shtml
	@RequestMapping("exceptiontest1")
	public void exceptiontest1(){
		int i = 1/0;
	}

 

 

(5).运行结果如下

输入http://localhost:8080/springmvctest/exceptiontest1.shtml,浏览器展示如下 

erro页面
异常为:/ by zero 

 

 

源码见附件 

 

 

  • 大小: 15.5 KB
  • 大小: 9.4 KB
  • 大小: 31.9 KB
分享到:
评论

相关推荐

    Spring Mvc——第一个应用程序

    **Spring MVC —— 第一个应用程序** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了一种模型-视图-控制器(MVC)架构,简化了开发过程,使得开发者可以专注于业务逻辑而不必过于关心...

    Java EE 框架整合开发⼊⻔到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf

    这份文档名为《Java EE 框架整合开发入门到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf》,它显然是关于Java EE中流行的三个框架整合使用的教程。这三个框架分别是Spring、Spring MVC和MyBatis,...

    Spring系列——MVC框架整合.md

    Spring系列——MVC框架整合.md

    Spring MVC-Web(4)

    例如,"实验4 Spring MVC——Web.pdf"可能详细介绍了如何配置和使用这些视图解析器。 此外,Spring MVC支持多种数据绑定和验证机制。例如,@RequestParam注解用于将请求参数绑定到控制器方法的参数上,而@...

    maven与spring MVC

    【标题】"maven与spring MVC"涉及到的是Java Web开发中的两个关键组件——Maven和Spring MVC,它们在构建和管理复杂项目时起着至关重要的作用。Maven是一个项目管理和综合工具,它通过提供一个标准化的构建过程和...

    Spring MVC 解读——View,ViewResolver.zip

    配置FreeMarkerViewResolver后,Spring MVC可以使用FreeMarker模板来渲染视图: ```xml &lt;bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"&gt; ;charset=UTF-8"/&gt; ``` ...

    Spring Boot——2分钟构建spring web mvc REST风格HelloWorld

    查看`spring-boot-helloworld`压缩包中的源码,可以看到项目的基本结构和代码实现。`pom.xml`是Maven的配置文件,定义了项目依赖;`src/main/resources`存放资源配置文件;`src/main/java`是代码目录。 **工具使用*...

    Spring MVC入门(登录示例)

    **Spring MVC 入门教程——基于登录示例** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了模型-视图-控制器(MVC)架构,帮助开发者分离业务逻辑、数据处理和用户界面,使得代码更易于...

    基于spring mvc信息管理系统完整版本.rar

    Spring框架的另一个重要部分——Spring Data,被用来简化数据访问层的操作。Spring Data提供了对多种数据存储的抽象,包括JPA、MongoDB等,使得数据操作更加便捷。在这个系统中,Spring Data可能与Hibernate结合,...

    基于maven+spring+spring mvc+mybatis 框架web项目

    通过学习和实践这个项目,初学者可以了解到如何使用Maven管理项目,Spring进行业务逻辑处理,Spring MVC构建Web界面,以及MyBatis进行数据库操作。同时,也会了解如何在Eclipse中配置和运行项目,以及如何与MySQL...

    Spring MVC-API(5)

    在"实验5 Spring MVC——API.pdf"中,可能详细介绍了如何创建和测试一个Spring MVC API的步骤。这个文档可能包括了设置控制器、配置URL映射、处理数据绑定、异常处理等方面的内容。通过阅读这份文档,开发者能更好地...

    Spring MVC不能直接接收list类型参数的问题

    本文探讨的是一个常见的问题——Spring MVC 无法直接接收 List 类型参数。 #### 问题描述 当前端使用 jQuery 向后台传递数组类型的参数时,Java 后台尝试直接通过 `List` 类型来接收这些参数,却发现无法取到任何...

    spring mvc + spring + hibernate 全注解整合开发视频教程 04

    在本视频教程“Spring MVC + Spring + Hibernate 全注解整合开发视频教程 04”中,我们将深入探讨Java企业级开发中的三大核心技术——Spring、Spring MVC和Hibernate的集成与应用,尤其是通过注解实现的简化配置。...

    spring MVC中文教程

    - **前后端分离**:Spring MVC非常适合与现代前端框架(如React、Vue.js)结合使用,实现前后端完全分离的架构。 #### 十、Spring MVC的应用场景 - **企业级Web应用**:Spring MVC被广泛应用于构建大型的企业级Web...

    spring mvc+mybatis项目代码

    【标题】"Spring MVC+MyBatis项目代码"是一个针对初学者的实践教程,它结合了两种主流的Java Web开发框架——Spring MVC和MyBatis,以帮助学习者理解如何在实际项目中整合这两个框架。Spring MVC是Spring框架的一...

    Spring MVC Ibatis Bean 根据mysql数据表——代码生成工具

    标题中的“Spring MVC Ibatis Bean 根据mysql数据表——代码生成工具”就是这样的一个工具,它能够根据MySQL数据库中的表结构,快速生成符合Spring MVC和Ibatis框架的代码。 Rapid-generator-0.2v可能是这个工具的...

    spring mvc工程-初学者helloworld

    创建完成项目后,我们需要配置Spring MVC的核心组件——DispatcherServlet。在web.xml文件中,我们定义DispatcherServlet,并指定其配置文件,例如`spring-mvc-servlet.xml`。在这个配置文件中,我们将定义视图解析...

    Spring Web MVC外文翻译

    与 Spring Web MVC 并行地,Spring Framework 5.0 引入了响应式栈——一个名为 Spring WebFlux 的 Web 框架,该框架的命名也是基于其源模块 `spring-webflux`。本节将重点讨论 Spring Web MVC。 #### 二、...

    spring mvc快速搭建——Hello World!

    手把手教你如何快速搭建spring mvc环境.zip

Global site tag (gtag.js) - Google Analytics