**
1、MVC设计思想、设计模式:
**
MVC是一种使用设计创建 Web 应用程序的。
Model(模型)表示应用程序核心(比如数据库记录列表)。
View(视图)显示数据(数据库记录)JSP。
Controller(控制器)处理输入(写入数据库记录)请求数据和转发到视图。
**
2、Spring MVC框架
**
Spring MVC是Spring的一个模块,提供web层解决方案(基于MVC设计架构)。
Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对Struts 2的超越(传统框架SSH)。现在越来越多的开发团队选择了Spring MVC
好处:
Spring3 MVC使用简单,学习成本低。
Spring3 MVC很容易就可以写出性能优秀的程序。
Spring3 MVC的灵活高。
Spring框架图示:
SSM三大框架整合图示:
3、Spring MVC核心类与接口
3.1、Spring MVC流程
1.开始
2.前端控制器:DispatcherServlet(框架提供)
3.处理器映射器:HandlerMappting(框架提供)
4.处理器适配器:HandlerAdapter(框架提供)
5.处理器:Handle(开发人员)
6.视图解析器:ViewResolver(框架提供)
7.视图:View:(开发人员)
8.结束
3.2、Spring MVC接口
3.2、Spring MVC过程
图:
步骤:
第一步:用户发起request请求,请求至DispatcherServlet前端控制器。
第二步:DispatcherServlet前端控制器请求HandlerMapping处理器映射器查找Handler,DispatcherServlet前端控制器,相当于中央调度器,各各组件都和前端控制器进行。交互,降低了各各组件之间耦合度。
第三步:HandlerMapping处理器映射器,根据url及一些配置规则(xml配置、注解配置)查找Handler,将Handler返回给DispatcherServlet前端控制器。
第四步:DispatcherServlet前端控制器调用适配器执行Handler,有了适配器通过适配器去扩展对不同Handler执行方式(比如:原始servlet开发,注解开发)。
第五步:适配器执行Handler,Handler是后端控制器,当成模型。
第六步:Handler执行完成返回ModelAndView,ModelAndView:springmvc的一个对象,对Model和view进行封装。
第七步:适配器将ModelAndView返回给DispatcherServlet。
第八步:DispatcherServlet调用视图解析器进行视图解析,解析后生成view,视图解析器根据逻辑视图名解析出真正的视图。View:springmvc视图封装对象。
第九步:ViewResolver视图解析器给前端控制器返回view。
第十步:DispatcherServlet调用view的渲染视图的方法,将模型数据填充到request域。
第十一步:DispatcherServlet向用户响应结果返回JSP页面或者Json数据。
3.3、Spring MVC接口功能
3.3.1、DispatcherServlet
前端控制器(也称总控制器),把请求给转发到具体的控制类。
3.3.2、HandlerMapping
映射处理器,负责映射中央处理器转发给controller时的映射策略,一共三种:
BeanNameUrlHandlerMapping:
按着controller的name来映射寻找。
SimpleUrlHandlerMapping :
按着简单url来映射寻找。
ControllerClassNameHandlerMapping:
控制类的类名控制器,访问时类名首字母需要小写。
3.3.3、Controller
具体处理请求的控制器。
3.3.4、ModelAndView
服务层返回的数据和视图层的封装类。
3.3.5、ViewResolver
视图解析器,解析具体的视图。
3.3.6、Interceptors(根据具体的业务)
拦截器,负责拦截我们定义的请求然后做处理工作。
**
4、Spring MVC框架入门程序
**
4.1、创建动态WEB项目:
项目维护包层次:
4.2、导入需要的jar包:
4.3、在WEB.xml文件中配置前端控制器(分发DispatcherServlet):
<!-- 1、前端控制器 -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载springMVC配置 -->
<init-param>
<!-- 配置文件地址配置 -->
<!-- 如果不配置contextConfigLocation,默认查找的配置文件名称classpath下的:
servlet名称+"-servlvet.xml",即springmvc-servlvet.xml -->
<param-name>contextConfigLocation</param-name>
<param-value>springMVC.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
4.4、创建springmvc.xml文件
<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"
xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
</beans>
4.5、开发Handler编写(控制器)
public class UserController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws Exception {
List<User> userList = new ArrayList<User>();
User user1 = new User();
user1.setName("张三");
user1.setAge("23");
user1.setHobby("篮球");
user1.setLogin_name("zs");
user1.setPassword("111");
user1.setCreate_time(new Date());
User user2 = new User();
user2.setName("李四");
user2.setAge("32");
user2.setHobby("足球");
user2.setLogin_name("ls");
user2.setPassword("111");
user2.setCreate_time(new Date());
userList.add(user1);
userList.add(user2);
// 转发
ModelAndView modelAndView = new ModelAndView();
// //以前
// request.setAttribute("userList", userList);
modelAndView.addObject("userList", userList);
modelAndView.setViewName("/view/system/user/userList");
return modelAndView;
}
}
4.6、在springmvc.xml文件中配置:处理器映射器
所有处理器映射器都实现HandlerMapping接口:
<!-- 1.配置处理映射器 -->
<!-- 配置处理器映射器 springmvc框架根据HandlerMapping接口判断是否是处理器映射器 -->
<!-- 根据bean的name进行查找Handler 将action的url配置在bean的name中 -->
**4.7、配置Handler纳入springmvc框架管理**
<!-- 2.配置Handler 由于使用了BeanNameUrlHandlerMapping处理映射器,name配置为url -->
<bean id="userController" name="/userList.do" class="com.hqyj.taoTaoMall.system.controller.UserController" />
4.8、在springmvc.xml文件中配置:处理器适配器
<!-- 3.处理器适配器 -->
<!--简单url映射 集中配置bean的id对应 的url -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/userList.do">userController</prop>
</props>
</property>
</bean>
4.9、配置视图解析器
<!-- 4.配置视图解析器 -->
<!-- 配置视图解析器 要求将jstl的包加到classpath -->
<!-- ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
**
5、其它非注解处理器映射器和适配器
**
5.1、BeanNameUrlHandlerMapping(映射器)(讲课)
根据请求url(XXXX.do)匹配spring容器bean的 name
找到对应的bean(程序编写的Handler(控制器))
5.2、SimpleUrlHandlerMapping(映射器)(讲课)
注意:在springmvc.xml配置了多个处理器映射器,多个处理器映射器可以共存。
5.3、SimpleControllerHandlerAdapter(适配器)(略)
要求程序编写的Handler(Controller)需要实现 Controller接口。
5.4、HttpRequestHandlerAdapter(适配器)(略)
在springmvc.xml配置:HttpRequestHandlerAdapter
要求Handler 实现 HttpRequestHandler接口
**
6、注解映射器和适配器
**
6.1、先了解DispatcherServlet.properoties
DispatcherServlet前端控制器加载 DispatcherServlet.properoties 配置文件,从而默认加载各各组件,如果在springmvc.xml中配置了处理器映射器和适配器,以sprintmvc.xml中配置的为准
6.2、注解映射器
Spring MVC 3.1之前默认加载映射器是:
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
Spring MVC 3.1之后要使用:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
在springmvc.xml中配置RequestMappingHandlerMapping:
使用RequestMappingHandlerMapping需要在Handler 中:
使用@controller标识此类是一个控制器,
使用@requestMapping指定Handler方法所对应的url。
6.3、注解适配器
Spring MVC 3.1之前默认加载映射器是:
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
Spring MVC 3.1之后要使用:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
RequestMappingHandlerAdapter,不要求Handler实现任何接口,它需要和RequestMappingHandlerMapping注解映射器配对使用,主要解析Handler方法中的形参。url。
6.4、注解开发Handler编写(控制器)
mport java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.ssm.demo.system.model.User;
@Controller
public class UserController {
@RequestMapping("/list.do")
public ModelAndView list() {
List<User> userList = new ArrayList<User>();
User user1 = new User();
user1.setName("张三");
user1.setAge("23");
user1.setHobby("篮球");
user1.setLogin_name("zs");
user1.setPassword("111");
user1.setCreate_time(new Date());
User user2 = new User();
user2.setName("李四");
user2.setAge("32");
user2.setHobby("足球");
user2.setLogin_name("ls");
user2.setPassword("111");
user2.setCreate_time(new Date());
userList.add(user1);
userList.add(user2);
// 转发
ModelAndView modelAndView = new ModelAndView();
// //以前
// request.setAttribute("userList", userList);
modelAndView.addObject("userList", userList);
modelAndView.setViewName("/system/user/userList");
return modelAndView;
}
}
6.5、在springmvc.xml文件中配置注解开发Handler
<!-- 1.配置注解开发Handler -->
<bean class="com.ssm.demo.system.controller.UserController" />
<!-- 2.注解映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
<!-- 3.注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
<!-- 4.配置视图解析器 -->
<!-- 配置视图解析器 要求将jstl的包加到classpath -->
<!-- ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
6.6、在springmvc.xml文件中优化注解扫描
<!-- 1.配置注解开发Handler -->
<!-- <bean class="com.ssm.demo.system.controller.UserController" /> -->
<!-- 1+.注解扫描 -->
<!-- 使用spring组件扫描 -->
<context:component-scan base-package="com.hqyj.crm.system.controller" />