SSM:Spring+SpringMVC+Mybatis、SpringMVC的web开发

 一、各部分负责的功能

        spring 负责整合整个工程框架,统一创建和管理整个工程的对象

        mybatis 负责管理数据库相关的操作

        spring MVC 负责管理web开发中servlet相关操作 获得请求相应请求等

二、SpringMVC

(一)概述

    1、springMVC就是一个spring框架,只是专门用于web开发

    2、SpringMVC和web开发的关系

(1)SpringMVC是基于Spring的一个框架,实际是Spring的一个模块,专门用来做web开发的

(2)web开发底层是servlet,SpringMVC实质是servlet的一个升级,是在其基础上加一些功能,使web开发更方便

(3)SpringMVC中有一个对象是servlet

 3、SpringMVC和Spring关系

    SpringMVC就是一个Spring容器,能够通过ioc管理对象,使用<bean>标签、注解:@component、@Repository、@Service、@Controller创建对象,放到Spring和SpringMVC容器中统一管理,其中控制器对象放在SpringMVC容器中

   @Controller创建的控制器对象是普通类对象,不是一个Servlet,SpringMVC赋予了控制器对象一些额外的功能,SpringMVC中有一个对象时Servlet:

   中央调度器 DispatcherServlet---用来接收请求,调度其他各种器最终来响应请求

   处理映射器 HandlerMapping---用来获得controller对象

   处理适配器 hadleradptor---利用controller对象调用方法

   视图解析器 ViewResoler---处理来自controller方法的返回结果ModelAndView对象,得到view对象,用来在视图显示

   (二)springMVC执行流程

   

 【具体流程】

用户发起请求--->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   

<servlet>
   <!--1创建servlet对象,自定义对象名-->
  <servlet-name>myweb</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <!--2读取自定义springmvc配置文件的位置-->
  <init-param>
   <param-name>contextConfigLocation </param-name><!--自定义springmvc配置文件名-->
   <param-value>contextConfigLocation </param-name><!--自定义springmvc配置文件位置-->
  </init-param>
    <!--3设置Servlet对象创建时间,>=0的整数,数值越小,创建时间越早-->
  <load-on-startup> 1</load-on-startup>
       
 </servlet>

  <!--4配置响应请求信息-->
 <servlet-mapping>
   <servlet-name>myweb</servlet-name>
   <url-pattern>*.do </url-pattern> 
 <!--凡是请求名是xx.do形式的,都用该servlet调用相应的控制层方法响应-->
 </servlet-mapping>

   4、配置SpringMVC.xml

       将controller文件配置到SpringMVC.xml中,将利用注解方式创建的对象扫描到springMVC框架中统一管理

<beans>

     <context:componet-scan base-package="控制层类所在文件夹的路径"/>

</beans>

(二)处理接收前端请求参数

    1、三大对象 

  •  HttpServletRequest--- 获取请求参数,地址栏访问时参数 ?属性=属性值
  •  HttpServletResponse--获取响应参数
  •  HttpSession--获取会话参数

    2、使用方式

   以方法参数形式存在,对前端数据进行接收,根据前端传送参数的方式,参数存储的作用域,选择不同对象来接收参数

@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)逐个接收

//前端传参
 <from action="receive.do" method="post">
  id:<input type="text" name="id"><br/>
  name:<input type="text" name="name"><br/>
  <input type="submit" value="提交参数"><br/>
 </from>

//后台接收 
 @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;

}

//前端展示
<body>
  <h3>myid:${myid}</h3><br/>
  <h3>myname:${myname}</h3>
<body>

 (2)多个参数封装成对象接收

//前端传参
 <from action="receive.do" method="post">
  id:<input type="text" name="id"><br/>
  name:<input type="text" name="name"><br/>
  <input type="submit" value="提交参数"><br/>
 </from>

//后台接收 
//(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;

}

//前端展示
<body>
  <h3>myid:${myid}</h3><br/>
  <h3>myname:${myname}</h3>
<body>

4、方法的返回值类型

(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请求

(三)SpringMVC核心技术

1、请求重定向和转发

(1)forward  转发---用户发送一次请求

     forward用法:

  mv.setViewName(forward:页面完整路径)

  可以转发项目中任意文件(可以转发到视图解析器以外的视图页面)

  mv.setViewName(show)

  只能转发web-inf下 view文件夹下的文件

(2)redirect  重定向---用户发送两次请求

  • 数据放在request作用域中,两次request请求不同不同,取数据只能用取参数形式取
  • 两种方式取:(1)${}EL表达式   (2)java代码输出

mv.setViewName(redirect:/xx.jsp)

不能访问web-inf下的文件(受保护,用户不能直接访问)

2、异常处理  

(1)以往处理异常---每个方法上try  catch  

         现在集中处理--- AOP思想,解耦合,将异常代码与业务代码分离,单独统一处理

(2)实现

     <1>自定义异常类---继承Exception类

    <2>控制层处理类抛出异常---throws 自定义异常类

     <3>创建普通类统一处理异常

  •   类上加@ContrillerAdvice---用来表明是异常处理类,被springMVC扫描知晓
  •  方法上加@ExceptionHandler(value=自定义异常类名.class)

     <4>配置文件  springMVC.xml

 <beans>     

      <context:component-scan base-package="异常处理类所在的文件夹路径"

       <mvc:annotation-driven/>

 </beans>

3、拦截器

  (1)功能

  • 拦截用户的请求,对请求做判断处理
  • 拦截器是全局的,可以对多个Controller做拦截
  • 一个项目中可以有0或多个拦截器,一起拦截用户的请求
  • 拦截器常用在:用户登录处理,权限检查,记录日志

(2)执行时间

  •  在请求处理之前,即controller类中方法执行之前
  • 控制器方法执行之后也会执行拦截器
  • 请求处理完成后也会执行拦截器

(3)实现步骤

  •   自定义一个类实现HandlerInterceptor接口--implement  HandlerInterceptor
  • 在springmvc配置文件中声明拦截器,让框架知道拦截器的存在

   springmvc配置文件:

<mvc:interceptors>
   <mvc:interceptor>
     <mvc:mapping path="/user/**"><!--指定拦截的url请求地址,凡是和user有关的请求都将被拦截-->
     <bean class="自定义拦截器类的路径">
   </mvc:interceptor>
</mvc:interceptors>

(4)拦截器和过滤器区别和联系

  • 拦截器用来验证请求的,能截断请求;
  • 过滤器用来过滤请求参数、属性的(request、response),侧重对数据的过滤,设置字符编码等
  • 拦截器侧重拦截对Controller的对象,若请求不能被DispatcherServlet接收,则不会执行拦截器
  • 过滤器可以处理jsp,js,html等
  • 拦截器是框架中的对象;过滤器是servlet中对象
  • 拦截器实现HandlerInterceptor接口;过滤器实现Filter接口
  • 拦截器拦截在普通方法执行;过滤器过滤servlet请求响应
  • 拦截器是springmvc容器中创建对象;过滤器是tomcat服务器创建对象
  • 过滤器先于拦截器之前执行,过滤器一个执行时间点,拦截器有三个

四、整合SSM

(一)概述

1、这个框架中有两个容器

(1)Spring容器:管理service Dao 工具类的对象

(2)springMVC容器:管理web相关的 Controller对象

2、两个容器的连接

   SpringMVC容器是spring容器的子容器,子容器可以访问父容器中内容,类似java中继承

  即SpringMVC容器中的controller对象可以访问spring容器中的service对象

 (二)整合

1、实体类

  •    封装 set get

  • 有参无参构造函数
  • toString()

2、dao层

  • xxdao接口
  • xxDao.xml

      具体见Mybatis:Mybatis--增强的JDBC、SSM_@snow'的博客-CSDN博客

3、service层

  •  接口
  • 接口实现类  --类上加@service
  • 注入dao层对象

    @Resource

     private  xxDao xxdao;

4、controller层

  • 类上---@Controller

       方法上---@RequestMapping(" /请求名")

  • 注入service层对象

    @Resource

     private  xxService xxservice;

  • 响应ajxa---方法上除了@RequestMapping(" /请求名")

                       还有 @ResponseBody   

5、webl配置文件:web.xml

  • 中央调度器

   (1) 用来导入SpringMVC的配置文件(dispatcherServlet.xml)创建springMVC容器对象,继而创建并管理controller对象

   (2)创建一个叫myweb的servlet对象

          指定他处理.do类型请求,创建时间第1个

  • 注册Spring监听器

   用来扫描spring配置文件applicationContext.xml文件,创建spring对象,进而创建service dao对象

  • 注册字符集过滤器

    一次性设置所以文件(/*表示)的编码格式为utf-8 防止pos请求方式中文乱码问题

6、SpringMVC的配置文件:dispathcherServlet.xml

    1、扫描controller包,利用注解声明controller及其他web相关的对象

    2、注解驱动

7、mybatis配置文件 mybatis.xml

(1)setting输出日志(可省去)

(2)设置包别名,配置dao.xml时,返回的实体类可以直接写类名

(3)配置sql mapper文件  xxDao.xml

8、 spring配置文件:applicationContext.xml 

  1、连接数据库: 利用属性文件 jdbc.properties

  2、配置mybatis配置文件,获得sqlSession对象,用来调用dao代理对象

  3、service dao对象,通过注解声明,xml中无需用bean注入

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值