springmvc(一)原理分析及配置前端控制器,处理器映射器,处理器适配器

springmvc是spring的一部分,是一个基于mvc设计模式的前端框架

工作流程

前端控制器(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,它的作用和这里的前端控制器类似。

那首先我们得配置springmvc的运行环境,就是导入所需要的jar包

主要多了两个包

 

 (1)配置servlet的名字和类

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

 

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

  • *.do  根据后缀来找
  • / 所有url都会让这个前端控制器解析
  • /*do有错误,不能这样配置
  
  	springmvc
  	org.springframework.web.servlet.DispatcherServlet
  	
  	
  		contextConfigLocation
  		classpath:springmvc.xml
  	
  
  
  	springmvc
  	*.action
  

配置处理器适配器

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

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

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

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

 springmvc(一)原理分析及配置前端控制器,处理器映射器,处理器适配器_第1张图片

编写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 itemsList=new ArrayList();
		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

配置视图解析器

配置视图解析器,发现默认使用jstl视图标签,所以要有jstl的jar包

springmvc(一)原理分析及配置前端控制器,处理器映射器,处理器适配器_第2张图片

显示结果
springmvc(一)原理分析及配置前端控制器,处理器映射器,处理器适配器_第3张图片 

你可能感兴趣的:(spring)