二、SpringMVC (一)概述 1、springMVC就是一个spring框架,只是专门用于web开发 2、SpringMVC和web开发的关系spring 负责整合整个工程框架,统一创建和管理整个工程的对象
mybatis 负责管理数据库相关的操作
spring MVC 负责管理web开发中servlet相关操作 获得请求相应请求等
(1)SpringMVC是基于Spring的一个框架,实际是Spring的一个模块,专门用来做web开发的
(2)web开发底层是servlet,SpringMVC实质是servlet的一个升级,是在其基础上加一些功能,使web开发更方便
(3)SpringMVC中有一个对象是servlet
3、SpringMVC和Spring关系 SpringMVC就是一个Spring容器,能够通过ioc管理对象,使用
@Controller创建的控制器对象是普通类对象,不是一个Servlet,SpringMVC赋予了控制器对象一些额外的功能,SpringMVC中有一个对象时Servlet:
(二)springMVC执行流程中央调度器 DispatcherServlet---用来接收请求,调度其他各种器最终来响应请求
处理映射器 HandlerMapping---用来获得controller对象
处理适配器 hadleradptor---利用controller对象调用方法
视图解析器 ViewResoler---处理来自controller方法的返回结果ModelAndView对象,得到view对象,用来在视图显示
【具体流程】
用户发起请求--->DispatcherServlet接收请求 ,并将请求交给处理器映射器--->处理器映射器获取controller层处理器对象,并将其放在处理器执行链
--->DispatcherServlet将处理器对象交给处理器适配器对象--->处理器适配器对象利用处理器对象调用控制层方法---->得到ModelAndView
---->DispatcherServlet将ModelAndView交给视图解析器对象--->视图解析器对象创建View接口对象,使用View对象和其实现类表示视图,jsp的完整路径
---->DispatcherServlet获取View对象,调用View类的方法,将model数据存到request作用域
----->执行对象视图的forward,展示结果的jsp页面
【简化】
请求--->DispatcherServlet--->控制层对象--->调用对应方法--->ModelAndView
[注] 处理器执行链保存的对象:处理器对象、拦截器
三、 SpringMVC进行web开发 (一)开发过程 1、实现步骤- 新建web maven工程
- 工程配置文件中加依赖:spring-webmvc(间接将spring的依赖都加入项目)、jsp、servlet
- 在web.xml配置文件中注册springmvc框架的核心对象DispatcherServlet
DispatcherServlet ---中央控制器,是一个servlet,父类继承HttpServlet
负责接收用户请求,调用控制器对象,并把请求的处理结果显示给用户
DispatcherServlet页---前端控制器,front controller
2、 控制层--控制器类:处理请求(1)加@Controller注解
(2)定义处理请求的方法
@RequestMapping:用来指定前端请求名和后端对应的处理方法, vlaue是前端请求名
当指定一个方法处理多个或多种类型请求时,形式如下:
@RequestMapping(value={“/请求名1”,“/请求名2”,...},method=RequestMethod.POST/GET)
【注】能处理请求的都是控制器(处理器),myController就是后端处理器
@Controller
public class MyController{
//处理some.do请求的方法
@RequestMapping(value="/some.do")
public ModelAndView doSome(){
ModelAndView mv=new ModelAndView ();
mv.addObject("msg","执行的是doSome方法");//前端接收变量名为msg,后面为变量值,key value形式
mv.setViewName("/show.jsp");//跳转展示的页面
return mv;//框架会将mv对象的数据加入request对象中,框架自动进行页面跳转
}
}
3、配置web.xml文件
(1)声明注册springMVC核心对象DispacherSercvlet 指定web文件 servlet全限定名称 (创建servlet对象)
在服务器Tomcat启动时就创建,原理同监听器,在全局控制对象中创建spring容器对象,只创建一次,需要使用时在servletContext对象中获取
(2)读取springMVC配置文件 springMVC.xml
(3)指定本servlet创建时间,当有多个servlet对象创建时,依照这个数组进行依次创建
(4)servlet mapping :什么样的请求给哪个servlet
4、配置SpringMVC.xmlmyweb org.springframework.web.servlet.DispatcherServlet contextConfigLocation contextConfigLocation 1 myweb *.do
将controller文件配置到SpringMVC.xml中,将利用注解方式创建的对象扫描到springMVC框架中统一管理
(二)处理接收前端请求参数
1、三大对象- HttpServletRequest--- 获取请求参数,地址栏访问时参数 ?属性=属性值
- HttpServletResponse--获取响应参数
- HttpSession--获取会话参数
以方法参数形式存在,对前端数据进行接收,根据前端传送参数的方式,参数存储的作用域,选择不同对象来接收参数
@Controller
public class MyController{
@RequestMapping(value="/other.do")
public ModelAndView doOther(HttpServletRequest request,HttpServletResponse response,HttpSession session){
ModelAndView mv=new ModelAndView ();
mv.addObject("msg","执行的是doSome方法"+request.getParameter("id"));//前端以?形式传参
mv.setViewName("/show.jsp");
return mv;
}
3、接收用户表单提交的参数
(1)逐个接收
//前端传参id: //后台接收 @RequestMapping(value="/receive.do") public ModelAndView xxx(int id,String name){ ModelAndView mv=new ModelAndView (); mv.addObject("myid",id); mv.addObject("myname",name); mv.setViewName("/show.jsp"); return mv; } //前端展示 myid:${myid}
name:
myname:${myname}
(2)多个参数封装成对象接收
//前端传参4、方法的返回值类型id: //后台接收 //(1)创建一个报讯参数值的普通类,属性名和请求中参数名一致 public class Student{ private Integer id; private String name; //set get封装 } //(2)通过对象接收参数 @RequestMapping(value="/receive.do") public ModelAndView xxx(Student stu){ ModelAndView mv=new ModelAndView (); mv.addObject("myid",stu.getId); mv.addObject("myname",stu.getName); mv.setViewName("/show.jsp"); return mv; } //前端展示 myid:${myid}
name:
myname:${myname}
(1)ModelAndView
- Model---数据,最终放在request作用域中
- View--框架和视图直接的转发操作 forward
- 使用场景:同时用数据和视图
(2)String
- 代表视图部分
- 使用场景:本次请求只是做的页面跳转操作:a.jsp--->b.jsp
当方法上面带@ResponseBody时---表示返回数据
@RequestMapping(value="/xx.do")
@ResponseBody
public String xxx(){return " ";
}
(3) void
- 既不能表示数据 又不能表示视图
- 使用场景:处理ajax,ajax请求服务器返回的是数据,与视图无关
利用响应对象response来输出数据,来响应ajax请求
- 数据的传输形式是json
(4)object【重要】
- 框架利用反射对象 响应ajax 处理json数据
- 表示数据,与视图无关
- 使用场景:响应ajax请求
待更...



