springmvc工作流程

工作流程

前端控制器(DispacherServlet):负责转发请求,接受用户的请求,申请处理后,将响应返回给客户

处理器映射器(HandlerMapping):前端控制器把请求转发给处理器映射器。处理器映射器根据请求中的URL,找到对应的Handler(相当于struts2的Action),返回给前端控制器。

处理器适配器(HandlerAdapter):前端控制器知道要执行哪个Handler,但是它只是把信息转发给处理器适配器,处理器适配器调用程序写好的Handler,Handler执行完,返回一个ModelAndView对象给适配器,处理器适配器再把这个对象返回给前端控制器

处理器(Handler):编写handler按照适配器的规则来编写,比如实现哪个接口,这样适配器才可以正确执行handler

视图解析器(View resolver):前端控制器会把逻辑视图发送给视图解析器请求解析,视图解析器处理后返图物理视图(view)给前端控制器

视图view:前端控制器请求进行视图渲染,把model数据填充到request域,返回视图(jsp、html等)

前端控制器把视图响应返回给用户
配置前端控制器

前端控制器就整个框架最中心的组件,负责组织其他组件正常工作,那既然是一个servlet,就在web.xml文件中配置,我们知道应用程序部署到tomcat上,web.xml是程序执行的入口点,所以我们要在这里配置我们的前端控制器,用来接收用户请求。类似于在学习struts2时,我们在web.xml里配置的filter,它的作用和这里的前端控制器类似。

 

 (1)配置servlet的名字和类

(2)配置inti-param参数,使得前端控制器找到处理器映射器和适配器等。默认会在WEB-INF目录下查找,并且要求配置文件的名字为servlet名字-servlet.xml。所以通过配置可以自己指定配置文件。我们在classpath下面创建config目录,里面新建springmvc.xml.

(3)配置servlet-mapping,通过url找到servlet。

    <url-pattern>*.do</url-pattern>  根据后缀来找
    <url-pattern>/</url-pattern> 所有url都会让这个前端控制器解析
    <url-pattern>/*do</url-pattern>有错误,不能这样配置

      <servlet>
          <servlet-name>springmvc</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <!-- 控制器通过配置文件找到处理器映射器,处理器适配器,这些都配置在springmvc.xml文件中 -->
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:springmvc.xml</param-value>
          </init-param>
      </servlet>
      <servlet-mapping>
          <servlet-name>springmvc</servlet-name>
          <url-pattern>*.action</url-pattern>
      </servlet-mapping>

配置处理器适配器

配置好前端控制器,我们在springmvc.xml中配置处理器映射器。

(1)引入约束,与spring的配置文件约束一致

(2)在springmvc的xml配置适配器,也是以bean的形式配置

我们知道适配器是去执行Handler的,打开SimpleControllerHandlerAdapter源代码,有一个supports()方法,意思只有这个Handler是Controller对象时这个适配器才可以执行这个Handler,那么我们就根据这个规则编写Handler类


编写Handler

 (1)创建controller包,编写controller

(2)实现controller接口,重写public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) 方法

(3)方法返回的是ModelAndView对象,在方法里调用service方法,执行数据库操作,这里模拟静态数据

(4)modelAndView.addObject("itemsList", itemsList);  //request的setAttribut,在jsp页面中通过itemsList取数据,在jsp页面根据itemsList获取数据
        modelAndView.setViewName("itemsList.jsp"); //设置view页面

    package xidian.lili.controller;
     
    import java.util.ArrayList;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
     
    import xidian.lili.po.Items;
     
    public class ItemsController1 implements Controller{
     
        @Override
        public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
            //里面实现servcie方法,相当于在action里调用service
            
            ArrayList<Items> itemsList=new ArrayList<Items>();
            Items items_1 = new Items();
            items_1.setName("联想笔记本");
            items_1.setPrice(6000f);
            items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
            
            Items items_2 = new Items();
            items_2.setName("苹果手机");
            items_2.setPrice(5000f);
            items_2.setDetail("iphone6苹果手机!");
            
            itemsList.add(items_1);
            itemsList.add(items_2);
            //返回modelandview
            ModelAndView modelAndView=new ModelAndView();
            //相当 于request的setAttribut,在jsp页面中通过itemsList取数据
            modelAndView.addObject("itemsList", itemsList);
            modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
     
            return modelAndView;
        }
     
    }

配置处理器映射器

映射器的作用是根据url来找到调用哪个Handler,根据这个映射器的名字,我们可以知道url就是Handler对象的 name 属性,那么顺便配置Handler

配置Handler  

(1)Handler对象的class属性就是编写的controller类,name属性我们可以自己定义,但是最后要以.action结尾,因为我们在web.xml文件中配置前端控制器的时候,servlet-mapping中url-pattern中的配置,前端控制器只能解析.action结尾的url。这才会把url给处理器适配器。

(2)这样当用户请求的url是以/queryItem.action结尾,映射器扫描配置文件中的所有bean的name属性,找到对象的name属性,也就找到了要执行的Handler

配置视图解析器

<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值