SpringMVC 配置讲解

前言

最近一直在接触springmvc,所以抽个空给大家总计一下,给我的感觉就是真的是好方便啊,首先呢我们不慌,一步步的去讲解,从最基础的开始


什么是SpringMvc

SpringMvc 全名叫做:Spring Web MVC 他是基于java实现的Web MVC框架,使用了请求驱动类型的轻量级web框架,什么是请求驱动类型:表示我们通过请求和响应来实现开发

SpringMvc 是我们spring框架中其中一个子架构,我们来看看架构图SpringMVC 配置讲解_第1张图片


为什么用SpringMvc

首先给大家说一个套路只有是问框架问题基本上都是这么回事:使用者只关心核心业务的开发,框架帮助你屏蔽了于技术无关的开发问题。


SpringMvc从哪里来

SpringMVC会经常与Struts2进行对比,为什么他们两个会经常对比呢,是因为他们干的是同样的事情,但是实现的方式是不一样的,并且效果和效率也是不一样的,SpringMvc的源头是Servlet


Springmvc 与Struts2的区别

??????????这个得留一段时间,因为springmvc还不是特别的深入


配置名称

首先说一下Springmvc都有什么内容
1 前端控制器DispatchServlet:主要起到的作用是转发
2处理器映射器HandlerAdapter:主要的作用是找到Handler
3处理器适配器HandlerAdapter:主要是执行handler
4Handler处理器:指的是Controller
5视图解析器:把逻辑视图转换为物理视图,目前认为就是把页面路径找到页面


配置步骤

第一步:发起请求到前端控制器,使用的是前端控制器(despatchServlet)

第二步:前端控制器请求HandlerMapping查找Handler
查找的时候可以根据xml配置,或者是使用注解进行查找

第三步:处理器映射器HandlerMapping向前端控制器返回Handler

第四步:前端控制器调用处理器适配器去执行Handler(ps:为什么前端控制器不直接执行,却让处理器适配器执行,原因就是我们为了项目的可扩展性或者说可以不让前端控制器的压力过大所以多出来一个处理器适配器专门执行Handler)

第五步:处理器适配器调用Handler处理器,Handler处理器去执行Handler

第六步:Handler处理器向处理器适配器返回modelAndview

第七步:处理器适配器向前端控制器返回modelAndview
modelAndview:是springmvc框架的一个底层对象,他包括Model和view,就是返回页面和页面中的数据

第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成为真正的视图(jsp)

第九步:视图解析器向前端控制器返回view

第10步:前端控制器进行视图渲染

第11步:前端控制器向用户响应结果


流程图

SpringMVC 配置讲解_第2张图片


配置xml

首先我们先配置web.xml
步骤1:得到前端控制器类
2:根据配置找到spring.xml
3.处理映射器

 
  <servlet>
      <servlet-name>springmvcservlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>


 
  
  
  <init-param>
      <param-name>contextConfigLocationparam-name>
      
      <param-value>classpath:springmvc.xmlparam-value>
  init-param>
  servlet>

  
 <servlet-mapping>
   <servlet-name>springmvcservlet-name>
   
   <url-pattern>*.actionurl-pattern>
 servlet-mapping>

springmvc.xml配置


<bean name="/queryItems.action" class="cn.itcast.ssm.controller.ItemsController1">bean>


<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">bean>




<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">bean>


<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">bean>

beans>

具体执行的类handler

/**
 * 实现Controller接口的适配器
 * @author 雪芬芬
 *
 */
public class ItemsController1 implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        //调用serveice查找数据库,查询商品列表,这是使用的是静态数据模拟
        List itemsList=new ArrayList();
        //向list填充静态数据
        。。。。。。。。。
        //因为我们最后返回ModelAndView,所以我们必须制定数据和视图,用于返回
        ModelAndView modeAndView= new ModelAndView();

        //把"数据"放到ModelAndView中,这样我们就可以在前台取出来了
        modeAndView.addObject("itemsList", itemsList);
        //把"视图"找到,制定视图的路径
        modeAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");

        return modeAndView;
    }

出错

下面是我们可能出现的错误,根据错误我们也可以分析我们他的理论

一、如果是报404错误,则说明找不到页面,出现的问题应该是在处理器映射器,为什么是在处理器映射器,原因是因为处理器映射器跟具url去找handler,说明url错误
SpringMVC 配置讲解_第3张图片

二、处理器映射器根据url找到了地址,但是转发的jsp页面报错了,说明你写的jsp页面地址有问题
SpringMVC 配置讲解_第4张图片


使用注解实现前面的功能

对于前面我们使用的是非注解形式的,下面我们主要使用注解方式的,首先把非注解的列出来看看


非注解的映射器

第一种方式很简单,直接使用:org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
第二种方式使用简单的url映射,我们必须有handler的id哦,否则他是找不到的,也就是url和id非常重要的哦

 <bean id="itemsController1" name="/queryItems.action" class="cn.itcast.ssm.controller.ItemsController1">bean>
<bean id="itemsController2"  class="cn.itcast.ssm.controller.ItemsController2">bean>

 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
     <property name="mappins">
        <props>
         
        <prop key="/queryItems1.action">ItemsController1prop>
        <prop key="/queryItems2.action">ItemsController1prop>   
     props>  
   property>
 bean>

非注解的处理器适配器

第一种org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
要求编写的handler必须实现controller接口

第二种org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
要求编写的handler必须实现HttpRequestHandler接口

由于实现的接口不一样所以方法也不一样,HttpRequestHandler主要是使用的servlet的方式,例如

//设置模型数据
        request.setAttribute("itemsList", itemsList);
        //设置转发的视图
        request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response);
    }

注解适配器和映射器

在spring3.1之前使用org.springframework.web.servlet.annotation.DefaultAnnotationHandlerMapping注解映射器
在spring3.1之后使用RequestMappingHandlerMapping注解映射

注解适配器
在spring3.1之前使用org.springframework.web.servlet.annotation.AnnotationMethodHandlerMapping注解映射器
在spring3.1之后使用RequestMappingHandlerAdapter注解映射


目前使用注解

目前使用的注解更为简单主需要一步就可以代替两步哦

<mvc:annotation-driven>mvc:annotation-driven>

在handler方式中我们使用@Controller和@ RequestMapping方法进行映射。在@RequestMapping里面定义映射URl,使用注解的映射器,这时候时候我们不需要添加一句话,为什么呢?因为我们已经把用注解让他找到了,并且以前我的一个类中只能写一个方法,现在我们的类里面可以写多个方法,只需加加上注解和url就可以喽。

 id="itemsController1" name="/queryItems.action" class="cn.itcast.ssm.controller.ItemsController1">

正确写法

@Controller
public class ItemsController3  { 
     //商品查询列表
     //@RequestMapping实现对queryItems方法和url进行映射,一个方法对应一个url
     @RequestMapping("/queryItems")
}

注解的处理器和适配器
注解处理器适配器和注解的处理器映射器是配对使用的,他的意思就是说用了注解器就别用非注解器来进行映射


效果显示

这里写图片描述


总结

在这个过程中没有找别人帮助,都是自己一步步的做,高效的工作。

你可能感兴趣的:(SpringMVC 配置讲解)