SpringMVC学习 --------- 1、原理解析和入门程序

1、MVC在B/S模式下的数据流

在这里插入图片描述

2、springMVC的数据流

在这里插入图片描述
包含了以下组建,需要程序员开发的,为4、6。

  • 1、前端控制器DispatcherServlet :接受请求,响应结果,相当于转发器。
  • 2、处理器映射器HandlerMapping:根据请求的url来找到Handler(通过xml或者注解)
  • 3、处理器适配器HandlerAdapter:根据规则去执行handler
  • 4、处理器Handler:根据HandlerAdapter的规则去编写,用于执行Handler
  • 5、视图解析器View resolver:根据逻辑视图名,得到真正的视图
  • 6、视图View:View是一个接口,实现类支持不同的View类型(jsp、freemark、pdf…)

3、需求

和mybatis一样的商城订单系统

4、环境 需要jar包的朋友可以留言

在这里插入图片描述

5、入门程序

5.1 前端控制器

在web.xml中指定处理request的servlet(前端控制器)

 <!-- springmvc前端控制器 -->
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- contextConfigLocation配置springmvc加载的配置文件
  	如果不指定的话,它默认加载/WEB-INF/springmvc-servler.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>
  	<!-- 1、*.action ,访问任何.action都交给DispatcherServlet进行解析
  		 2、/,任何路径都给它解析
  	 -->
  	<url-pattern>*.action</url-pattern>
  </servlet-mapping>
下面的配置都是在web.xml指定的配置文件(classpath:springmvc.xml)中进行配置的

5.2 处理器映射器

前端控制器的通过url得到handler

   	  <!-- 处理器映射器 -->
	  <!-- 根据bean的name进行查找Handler 将action的url配置在bean的name中
	   返回Handler给前端控制器 -->
	  <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

5.3 配置处理器适配器

前端控制器传入handler给适配器,适配器处理handler,最后响应返回一个modelAndView

<!-- handlerAdapter处理器适配器
      	执行handler,把Handler返回的ModelAndView 传递给前端控制器
       -->
      <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">
      </bean>

观察源代码看出,Adapter支持的类型,是继承了Controller接口的类。换句话说,这就是handler的编写规范,换句话说,Handler需要继承controller接口。
在这里插入图片描述
在这里插入图片描述

5.4 开发Handler

由5.3可知Handler需要实现controler接口。

5.4.1 controller的java代码编写
package cn.iot.ssm.controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import com.iot.ssm.po.Items;

public class ItemsController implements Controller{

	@Override
	public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
		//调用service
		List<Items> itemsList = new ArrayList<Items>();
		//向list填充静态数据
		Items items = new Items();
		items.setName("联想笔记本");
		items.setPrice(6000f);
		items.setDetail("非常好用");
		
		Items items2 = new Items();
		items2.setName("苹果笔记本");
		items2.setPrice(6002f);
		items2.setDetail("mac book");
		
		itemsList.add(items);
		itemsList.add(items2);
		
		// 返回ModelAndView
		ModelAndView modelAndView = new ModelAndView();
		// 相当于request的setAttribut,在jsp页面中通过key:itemsList获取数据
		modelAndView.addObject("itemsList",itemsList);
	
		// 指定视图
		modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
		return modelAndView;
	}
}

5.4.1 controller在xml中的配置
  <!-- 配置Handler -->
      <bean name="/queryItems.action" class="cn.iot.ssm.controller.ItemsController"></bean>   

5.6 视图解析器

前端控制器在得到ModelAndView之后,就把渲染视图的工作交给它。

前端控制器 -----逻辑视图名字---> 视图解析器 ---响应的视图--> 前端控制器
在xml中进行配置
 <!-- 视图解析器
     	 根据视图的逻辑名字,解析得到view
      	-->
	  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	  </bean>

6 小结

搞清楚数据的流向,理解每一个控件接受什么数据,返回什么数据。
入门案例到此结束。

springmvc.xml的完整文件
<?xml version="1.0" encoding="UTF-8"?>
<beans 
      xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      xsi:schemaLocation="
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
      ">
      
      <!-- 配置Handler -->
      <bean name="/queryItems.action" class="cn.iot.ssm.controller.ItemsController"></bean>
      
      
   	  <!-- 处理器映射器 -->
	  <!-- 根据bean的name进行查找Handler 将action的url配置在bean的name中
	   返回Handler给前端控制器 -->
	  <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
      
      <!-- handlerAdapter处理器适配器
      	执行handler,把Handler返回的ModelAndView 传递给前端控制器
       -->
      <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">
      </bean>
      
      <!-- 视图解析器
     	 根据视图的逻辑名字,解析得到view
      	-->
	  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	  </bean>
</beans>

猜你喜欢

转载自blog.csdn.net/qq_37591656/article/details/86544434