中心控制器
Spring的web框架围绕DispatcherServlet设计,而DispatcherServlet的作用是将请求分发到不同的处理器,从Spring2.5开始,使用JAVA5以上的用户一般会使用注解Controller声明方式.
Spring MVC 框架像其它许多MVC框架一样,已请求为 驱动,围绕一个中心分派请求以及使用其它功能,DispatcherServlet实际上是一个Servlet。
注解方式
-
@Controller :代表这个类会被Spring接管,被接管的这个类中的所有方法,如果返回值是String,并且有具体界面可以进行跳转,那么就会被视图解析器进行解析
-
@RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法,可以用于类或者方法上,用于类上,表示所有类中的所有响应请求的方法都是以该地址作为父路径。
Spring MVC:结果跳转方式
ModelAndView
- 设置ModelAndView 对象根据view 的名称 和视图解析器跳转到指定的界面
- 页面=视图解析器前缀+viewname+视图解析器后缀
ServletAPI进行设置,则不需要进行视图解析器
- 通过HttpServletResponse进行输出
response.getWriter().print("Servlet API");
- 通过HttpServletResponse实现重定向
response.sendRedirect("/xxx.jsp");
- 通过HttpServletResponse实现请求转发
request.getRequestDispatcher("/路径").forward(request,response);
如果使用SpringMVC来实现请求转发则无需要使用使用视图解析器
- 将视图解析器注释掉
return "redirect:/index.jsp";//重定向
return "forward:/index.jsp"; //转发方式二
return "/index.jsp"; // 转发方式一
乱码问题
这里博主会单独出一篇文章
什么是JSON
- JSON是一种轻量级的数据交换格式
- 采用完全独立于编程语言的文本格式来存储和表示数据
- 易于阅读易于解析,有效提高网络传输效率
语法格式
- 对象表示为键值对,数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON 是js对象的字符串表示法,它使用文本表示一个js对象,本质是一个字符串
使用Controller返回JSON数据
- JackSon是目前比较好的json解析器
- 工具还有Alibaba的fastjson
添加上jackson的依赖
<!-- 添加上jsckson依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
@Controller
public class UserController {
@GetMapping( "/t2")
@ResponseBody
//添加上@ResponseBody注解该方法就不会走视图解析器,直接返回一个字符串
public String test1(){
Student student=new Student(1,"家森","纯爷们");
return student.toString();
}
}
现在向前端界面返回的只是一个普通的字符串 ,现在我们想返回有一个容易被解析的JSON数据格式
public String test1() throws JsonProcessingException {
ObjectMapper mapper=new ObjectMapper();
Student student=new Student(1,"家森","纯爷们");
String str = mapper.writeValueAsString(student);
return " json格式"+str+"普通字符串"+student.toString() ;
}
对比看一下
日期转化
- 抽取工具类
//自定义工具类
public class JsonUtils {
//普通类
public static String getJson(Object obj) throws JsonProcessingException {
ObjectMapper mapper=new ObjectMapper();
return mapper.writeValueAsString(obj);
}
//日期转化类
public static String getJsonDate(Object obj) throws JsonProcessingException {
ObjectMapper mapper=new ObjectMapper();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(obj);
return mapper.writeValueAsString(format);
}
}
*现在我们只需要new一个Date便OK了
Date date=new Date();
return JsonUtils.getJsonDate(date);
//或者直接一步
return JsonUtils.getJsonDate(new Date());
使用Alibaba旗下的FastJson
<!-- FastJson依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
- 字符串和java对象相互转化
//java对象转json字符串
String str = JSON.toJSONString(student);
//json字符串转java对象
JSONObject object = JSON.parseObject(str);
不得不说Alibaba还是很OK的
Restful风格
- 对比RestFul风格
@GetMapping(value = "/add {a}/{b}")
public String test2(@PathVariable int a, @PathVariable String b, Model model) {
System.out.println("test2");
String res=a+b;
model.addAttribute("msg","结果为:"+res);
return "test";
}
-
@PathVariable 映射 URL 绑定的占位符
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过 -
@PathVariable(“xxx”) 绑定到操作方法的入参中。
一般与@RequestMapping(method = RequestMethod.GET)一起使用
@RequestMapping("/getUserById/{name}")
public User getUser(@PathVariable("name") String name){
return userService.selectUser(name);
}