spring mvc工作原理解析

springMVC各个组件间工作路线图:

spring mvc工作原理解析_第1张图片

springmvc实现controller的三种方式:

①实现controller接口

②实现HttpRequestHandler接口

③使用@Controller注解

各个组件解析:

1.前端控制器(DispacterServlet):由spring提供,不需要程序员编写,配置在web.xml文件中,主要用于接受前台的请求、请求查找controller以及向前台作出响应,它是前台请求进入后台和后台响应前台的唯一通道。在web.xml中的配置案例如下:


  	springMvc
  	org.springframework.web.servlet.DispatcherServlet
	  
	      contextConfigLocation
	      classpath:springmvc.xml
	  

  
  	springMvc
  	*.action
  

2.处理器映射器(HandelMapping):它是配置在springMVC-Servlet.xml中的,主要用于接受前端控制器的请求,并通过前端控制器发来的URL进行controller的适配,它的实现有两种,一种是通过xml配置的方式(xml配置方式又分不同种映射器,其映射风格有所不同),另一种是注解的方式,例如:

①xml配置方式:


 
 
 
 
 
 
 
   
	   
	     ItemsController1
	     ItemsController1
	     ItemsController2
	    
   
 
 

②注解方式

@RequestMapping("/delete")
    public String delete(Model model,HttpServletRequest request){
    	int id=Integer.parseInt(request.getParameter("id"));
    	DateFormat mediumDateFormat = DateFormat.getDateTimeInstance
	       		(DateFormat.MEDIUM,DateFormat.MEDIUM); 
		Date date=new Date();
    	GiveBooks giveBooks =new GiveBooks();
    	Books book=new Books();
    	book=bookService.selectById(id);
    	giveBooks.setName(book.getName());
    	giveBooks.setPhoneNum(book.getPhoneNum());
    	giveBooks.setMoney(book.getMoney());
    	giveBooks.setGiveTime(mediumDateFormat.format(date));
    	giveBooks.setType(book.getType());
    	bookService.insertIntoGive(giveBooks);
    	bookService.delete(id);
    	return check(model);
    }

3.处理器适配器(HandlerAdapter):配置在springMVC-Servlet.xml中,用于执行controller,处理器适配器大体分为两种,xml配置型(又可以分为多种类型)和注解型,通常不同的处理器适配器所要求的controller的实现方法是不同的,比如下边的处理器适配器要求相应的controller实现Controller接口,只有满足要求它才能正确执行,例如:

①xml配置型


 

controller:

public class loginController implements Controller{
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		String name=request.getParameter("name");
		String password=request.getParameter("password");
		AbstractApplicationContext context =new ClassPathXmlApplicationContext("application-servicel.xml");
		loginService ps1=(loginService) context.getBean("loginService");
		person pBeans=new person();
		pBeans=ps1.loginPersons(name,password);
		ModelAndView modelAndView =new ModelAndView();
		//相当于setAttribute方法,在jsp中通过itemList进行获取
		modelAndView .setViewName("/WEB-INF/jsp/welcom.jsp");
		return modelAndView;
	}
	
	
}

 

这个类型的适配器需要controller类实现Controller接口

 

②注解型:

@Controller
@RequestMapping("/books")
public class BooksController {
    
    @Resource
   BookService bookService;//没有用new创建对象,是因为是由spring容器管理的
    /*@Autowired是默认按照类型装配的 @Resource默认是按照名称装配的*/
    /*
     * 产品列表与分页Action
     */
    @RequestMapping("/insert")
    public String list(Model model,@ModelAttribute("entity") @Valid Books entity,BindingResult bindingResult) throws IOException{
    	/*1.Valid注解用于校验
    	 *2.@ModelAttribute运用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用*/
    	//System.out.println("++++++"+entity.getWeight());
    	if(entity.getWeight()==null||entity.getWeight().equals("")){
    		entity.setWeight("未填");
    	}
    	System.out.println("+++========");
    	DateFormat mediumDateFormat = DateFormat.getDateTimeInstance
	       		(DateFormat.MEDIUM,DateFormat.MEDIUM); 
		Date date=new Date();
		entity.setDate(mediumDateFormat.format(date));
    	bookService.insert(entity);
    	//response .getWriter().print("");
        return check(model);//必须写成这样,不然访问不到 
    }

4.处理器(Controller):由程序员编写,用于请求的处理,处理器通常会调用Service层进行数据处理与获取。

5.视图解析器:由spring提供,配置在springMVC-Servlet.xml 中,用于视图解析,通常的作用是给URL拼接前缀和后缀,如:


        
        
        
        
        
        
        
        
        
        
    

 

你可能感兴趣的:(spring)