1、快速入门(使用maven)
- 导入SpringMVC相关坐标(Spring、Spring-MVC)
org.springframework
spring-context
5.3.4
org.springframework
spring-webmvc
5.3.4
- 创建spring-mvc.xml配置文件
- 配置SpringMVC核心控制器DispatcherServlet
DispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
DispatcherServlet
/
- 创建Controller类并配置方法映射地址注解
@Controller
public class UserController {
@RequestMapping("/say")
public String say() {
System.out.println("UserController Running...");
return "say.jsp";
}
}
操作流程
1、导入SpringMVC坐标
2、配置核心控制器DispatcherServlet
3、创建Controller及试图并添加注解
4、配置SpringMVC配置文件spring-mvc.xml
5、客户端发起请求测试@RequestMapping注解
1、可以作用在类或方法上
2、常用属性包括value、method、param
3、value属性值代表访问地址映射
4、method属性值表示请求方式,是一个枚举类型
5、param属性值代表请求参数
@Controller
@RequestMapping("/user") //添加该注解后,请求say方法变为/user/say
public class UserController {
// 访问地址映射为/user/say,当类使用地址映射注解后,value="/say"可以写为value="say"
// 请求方式必须为POST
// 请求参数必须携带id
@RequestMapping(value = "/say", method = RequestMethod.POST, params = {"id"})
public String say() {
System.out.println("UserController Running...");
// 类使用RequestMapping注解设置地址映射后,如/user
// say.jsp将会在webapp/user文件夹查找
// 前面加/斜线,/say.jsp将会在webapp文件夹查找
return "/say.jsp";
}
}
- SpringMVC核心控制器DespatcherServlet配置文件
# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping,\
org.springframework.web.servlet.function.support.RouterFunctionMapping
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter,\
org.springframework.web.servlet.function.support.HandlerFunctionAdapter
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
- 可通过自定义配置视图控制器来设置访问地址前后缀
public class UrlBasedViewResolver extends AbstractCachingViewResolver implements Ordered {
public static final String REDIRECT_URL_PREFIX = "redirect:";
public static final String FORWARD_URL_PREFIX = "forward:";
@Nullable
private Class viewClass;
private String prefix = "";
private String suffix = "";
2、数据响应
- 转发、重定向
1、返回的路径地址默认为f orward:转发模式
// 默认为转发
@RequestMapping(value = "/say")
public String say() {
return "hello";
}
2、使用redirect:关键字,进行重定向跳转
@RequestMapping(value = "/say")
public String say(RedirectAttributes attr) {
attr.addAttribute("id", 123);
attr.addAttribute("name", "tom");
return "redirect:hello";
}
3、使用ModelAndView进行重定向
@RequestMapping("/hi")
public ModelAndView hi() {
ModelAndView modelAndView = new ModelAndView("redirect:hello");
modelAndView.addObject("id", 10000);
return modelAndView;
}
- 数据回写
1、使用HttpSerlvetResponse
@RequestMapping("/hi")
public void hi(HttpServletResponse response) throws IOException {
response.getWriter().print("hello");
}
2、使用@ResponseBody注解
@ResponseBody注解的作用是告诉适配器以相应消息体的形式返回数据,不加载视图就必须添加该注解
@RequestMapping("/hi")
@ResponseBody
public String hi() {
return "hello world";
}
3、返回对象或集合
com.fasterxml.jackson.core
jackson-databind
2.12.0
com.fasterxml.jackson.core
jackson-annotations
2.12.0
com.fasterxml.jackson.core
jackson-core
2.12.0
@RequestMapping("/hi")
@ResponseBody
public User hi() {
User user = new User(10000, "小红");
return user;
}
@RequestMapping("/hello")
@ResponseBody
public List hello() {
List list = new ArrayList<>();
User user1 = new User(10000, "小红");
User user2 = new User(10001, "小补丁");
list.add(user1);
list.add(user2);
return list;
}
3、获取请求参数
- 请求参数名与方法形参名相同
// 请求地址 http://localhost:8080/springmvc/user/hi?username=hello&password=23423
@RequestMapping("/hi")
@ResponseBody
public void hi(String username, String password) {
System.out.println("username:" + username + " password:" + password);
}
- 获取普通对象
请求参数与类属性一致,可以将参数直接赋予对象属性
// 请求地址 http://localhost:8080/springmvc/user/hi?id=10000&name=abcd
@RequestMapping(value = "/hi", method = RequestMethod.POST)
@ResponseBody
public void hi(User user) {
System.out.println(user.getId() + "/" + user.getName());
}
class User {
private int id;
private String name;
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
- 获取数组
// 请求地址 http://localhost:8080/springmvc/user/hi?arr=tom&arr=jerry
@RequestMapping(value = "/hi")
@ResponseBody
public void hi(String[] arr) {
System.out.println(Arrays.toString(arr));
}
- 获取集合
客户端传递json数据,以键值对的形式;访问方法形参需要使用@RequestBody注解,可以直接获取请求消息体的数据
@RequestMapping(value = "/hi")
@ResponseBody
public void hi(@RequestBody Map map) {
Integer id = (Integer) map.get("id");
String name = (String) map.get("name");
String gender = (String) map.get("gender");
System.out.println(id + "/" + name + "/" + gender);
}
- web.xml配置解决中文乱码
encoding
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
encoding
/*
- @RequestParam注解
1、value:请求参数名称
2、required:是否必须传值,默认true
3、defaultValue:默认值
@RequestMapping(value = "/hi")
@ResponseBody
public void hi(@RequestParam(value = "uname", required = false, defaultValue = "tom") String username) {
System.out.println(username);
}