ssm之springMVC总结

springMVC总结

  • springMVC简介
    • SpringMVC 和 Struts2 对比
    • springMVC的工作流程
    • springmvc配置文件
      • 在此之前,需要导入spring所需jar包:
      • 在我们的web.xml中添加如下配置:
      • 在我们的dispatcherServlet-servlet.xml中添加如下配置:
    • 编写Handler

springMVC简介

1、springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。
2、springmvc是一个基于mvc的web框架。
MVC:MVC是一个设计模式,C控制层,M模块层,V显示层这样的设计理念,而SSM框架里面SPRING MVC本身就是MVC框架,作用是帮助(某种意义上也可以理解为约束)我们要按照MVC这样的设计来开发WEB项目,而另外两个框架spring主要是用作IOC,AOF等其他的一些设计原则,至于mybatis是用来方便操作数据库的,所以他们都在MV里面,至于V指的是展示部分,一般是指JSP,freemarks这种其实,和SSM就没有太大的关系了
mvc在B\S系统下的应用:b/s系统下模型无法将数据填充到视图。

request请求
response响应
用户
C 控制器_controller\接口用户请求\响应
请求模型进行处理
视图渲染,将模型数据填充到request域
处理结果返回
C 控制器_controller\接口用户请求\响应
M 模型_pojo\action\service\dao
V 视图_view

3、pringmvc 表现层:方便前后端数据的传输。
4、SpringMVC相当于SSH框架中struts:Spring MVC 拥有控制器,作用跟Struts类似,接收外部请求,解析参数传给服务层。

SpringMVC 和 Struts2 对比

既然说到SSM框架中的SpringMVC相当于SSH框架中struts,那就顺便提一下SpringMVC 和 Struts2 的对比:
1、SpringMVC 的入口是 Servlet,而Struts2是Filter。
2、SpringMVC会稍微比Struts2快些,SpringMVC是基于方法设计的,而Struts2是基于类设计的,每次发一次请求都会实例一个Action。
3、SpringMVC使用更加简洁,开发效率比Struts2高。支持JSR303,处理ajax的请求更方便。
4、Struts2的OGNL表达式使页面的开发效率相比SpringMVC更高些。

springMVC的工作流程

ssm之springMVC总结_第1张图片
注:
1、Handler也叫controller
2、HandlerInterceptor:拦截器
3、视图:jsp\freemaker\excel\pdf
4、前端控制器请求HandlerMapping查找Handler可以根据xml配置、注解进行查找
5、ModelAndView是springMVC框架的一个底层对象,包括model和view
6、前端控制器请求视图解析器解析视图,根据逻辑视图名解析成真正的视图(jsp)
7、视图渲染:将模型数据(ModelAndView对象中)填充到request域
组件:
1、前端控制器DispatcherServlet:接受请求、响应结果,相当于转发器,有了它,就减少了各模块间的耦合性
2、处理器映射器HandlerMapping:根据请求的url查找Handler
3、处理器适配器HandlerAdapter:按照特定规则(HandlerAdapter要求的规则)去执行Handler,注意编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确地去执行Handler
4、视图解析器View resolver:进行视图解析,根据逻辑视图名解析成真正的视图(View)
5、视图View是一个接口,实现类支持不同的View类型

springmvc配置文件

在此之前,需要导入spring所需jar包:

1、 Spring框架jar包:
为了简单,将spring-framework-3.2.0.RELEASE-with-docs.zip/dist/下的所有jar包拷贝到项目的WEB-INF/lib目录下(一定包括spring-webmvc-3.2.0.RELEASE.jar);
2、 Spring框架依赖的jar包:
需要添加Apache commons logging日志,此处使用的是commons-logging-1.1.1.jar;
需要添加jstl标签库支持,此处使用的是jstl-1.2.jar;

在我们的web.xml中添加如下配置:

1、配置前端控制器(classpath:dispatcherServlet-servlet.xml在classpath路径下)

  
  
  	dispatcherServlet
  	
  	org.springframework.web.servlet.DispatcherServlet
  	
  	
  		contextConfigLocation
  		classpath:dispatcherServlet-servlet.xml
  		
 	
  	1
  	
  
  
  	dispatcherServlet
  	
  	/
  

注意:如果是用maven构建的项目,那么src目录是:src/main/resources

如果用到REST风格URL,还需在web.xml中配置HidddenHttpMethodFilter


  
  	HiddenHttpMethodFilter
  	org.springframework.web.filter.HiddenHttpMethodFilter
  
  
  	HiddenHttpMethodFilter
  	/*
  

在我们的dispatcherServlet-servlet.xml中添加如下配置:


		
	
	
	
	
	
	
	
	
	 

	
	

总结:
处理器适配器:
通过查看SimpleControllerHandlerAdapter源代码,

public class SimpleControllerHandlerAdapter implements HandlerAdapter {
	public boolean supports(Object handler) {
		return (handler instanceof Controller);
	}
	...
}

此适配器能执行实现Controller接口的Handler,查看Controller接口源代码,

public interface Controller {
	/**
	 * Process the request and return a ModelAndView object which the DispatcherServlet
	 * will render. A null return value is not an error: It indicates that
	 * this object completed request processing itself, thus there is no ModelAndView
	 * to render.
	 * @param request current HTTP request
	 * @param response current HTTP response
	 * @return a ModelAndView to render, or null if handled directly
	 * @throws Exception in case of errors
	 */
	ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}

Controller接口返回一个ModelAndView对象。

编写Handler

需要实现controller接口,才能由org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter适配器执行:

package com.jacket.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.jacket.ssm.po.Items;

public class ItemsController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		// 调用service查找数据库,查询商品列表,这里使用静态数据模拟
		List itemsList = new ArrayList();
		//向list填充静态数据
		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;
	}
}

下面是我自己利用springMVC做的项目的截图。
ssm之springMVC总结_第2张图片

你可能感兴趣的:(JavaWeb开发框架)