SpringMVC介绍
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等
总结:
1.SpringMVC是spring框架后续开发的web模块,主要负责与前端用户进行交互
2.springMVC基于servlet进行开发的框架,目的简化前后端的调用
知识回顾:
Servlet(Servlet),全称Java Servlet.是用java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态web内容.狭义的servlet
是指java语言实现一个接口,广义的servlet是指任何实现了这个servlet接口的类,一般情况下,人们将servlet理解为后者
servlet是java针对前后端交互,开发的一种调用的机制
sevlet弊端:
1.一个业务需求 就需要准备一个Servlet 数量繁多
2.需要编辑大量的配置文件 web.xml 开发繁琐
3.从servlet中获取的参数都是String数据类型,需要手动的转化类型
3.servlet只提供了get/post请求类型,不满足当下的需求
SpringMVC入门案例:
注意事项
1.开发路径的编辑
2.现在开发一般都使用前后端分离的方式,所以后端服务器返回的一般都是json串
3.每次编辑完成代码,都需要重启tomcat服务器
package com.jt.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller //springMVC专门扫描的注解
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello(){
return "您好SpringMVC";
}
}
//测试访问结果:http://localhost:8080/hello
springMVC注解说明
@RequestMapping(“/hello”)
作用:负责用户的请求路径与后台服务器之间的映射关系
如果请求路径不匹配,则用户报错404
@ResponseBody
作用:将服务器的返回值转化为json串,返回JSON串,JSON本质是字符串
案例二:
package com.jt.controller;
import com.jt.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller //springMVC专门扫描的注解
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello(){
return "您好SpringMVC";
}
@RequestMapping("/userpojo")
@ResponseBody
public User pojoUser(){
User user = new User();
user.setId(101);
user.setName("您好SpringMVC");
return user;
}
}
SpringMVC重要组件
1.前端控制器 DispatcherServlet
2.处理器映射器 handlerMapping
3.处理器适配器 handlerAdapter
4.视图解析器 ViewResolver
spring调用流程:
1.用户发起请求之后,第一步访问就是前端控制器
2.前端的控制器只负责请求的转发/响应,没有办法直接处理业务.
3.当spring容器启动时,处理器映射器,首先会加载所有的@RequestMapping注解,将请求路径与方法进行绑定,保存到Map中.
保存的结构是:Map</url,method方法>,当前端控制器发送请求被 处理映射器接收,如果URL地址匹配,则告知应该执行哪个方法,如果URL地址不匹配,则提示用户404错误
4.前端控制器得知将要执行的方法是谁,但是前端控制器只能转发,没有办法执行业务,所以请求处理器适配器执行业务逻辑
5.处理器适配器针对配置文件(xml方式/注解方式/其它方式)的格式挑选合适的处理器去执行业务逻辑业务执行成功之后返回ModelAndView对象,包含两部份,一部分是业务数据,一部分是页面数据(Model:业务数据 View:页面)
历史版本:需要返回页面名称,及将数据填充到页面中
6.前端控制器接收到返回的ModelAndView之后,交给视图解析器去解析数据,视图解析器通过自身的配置获取页面的名称
7.最终通过经过视图渲染,将数据填充到页面中,最终用户看到的页面就包含业务数据
现在的版本:前后端分离的方式
关键用法:@ResponseBody要求返回业务数据,并且转化为JSON串,程序直接跳过6和7步直接将数据返回给用户
springMVC参数接收用法
入门案例:
简单数值传参:
package com.jt.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
public class UserController {
/*
URL:http://localhost:8080/user/findUser?id=100&name=tomcat
类型:get请求
返回值:String id:name
*/
@RequestMapping("/user/findUser")
@ResponseBody //响应数据,返回JSON串,如果是字符串,返回字符串本身
public String findUser(HttpServletRequest request, HttpServletResponse response) {
//servlet方法的取值方式
String id = request.getParameter("id");
int intId = Integer.parseInt(id);
String name = request.getParameter("name");
//response.getWriter().write(id);
return intId+":"+name;
}
/*
URL:http://localhost:8080/user/findUser?id=100&name=tomcat
类型:get请求
规则:springMVC中的参数名称,必须与传递参数名称一致
返回值:String id:name
*/
@RequestMapping("/user/findUser2")
@ResponseBody //响应数据,返回JSON串,如果是字符串,返回字符串本身
public String findUser2(Integer id, String name) {
//用spring框架的方式取值
return id+":"+name;
}
}
使用对象接收参数:
package com.jt.controller;
import com