✅作者简介:Java-小白后端开发者 公认外号:球场上的黑曼巴
个人主页:不会飞的小飞侠24
个人信条:谨 · 信
当前专栏:高级内容
本文内容: SpringMVC框架
更多内容点击
小飞侠的博客>>>>欢迎大家!!!
MVC 设计模式一般指 MVC 框架,M(Model)指数据模型层,业务模型层,V(View)指视图层,C(Controller)指控制层。使用 MVC 的目的是将 M 和 V 的实现代码分离,使同一个程序可以有不同的表现形式。
MVC 属于架构模式的一种,所谓架构就是如何设计一个程序的结构。MVC 将程序结构划分为三层,每一层都对外提供了可供上层调用的接口,既能维系三层之间的联系,也能保持相对的独立性。
这种将业务逻辑、数据和界面分离的代码组织形式,降低了模块间的耦合度,有利于日后的维护与扩展。
springmvc是基于spring Framwork衍生出来的一个mvc框架,主要解决原有mvc架构中,控制器(Controller)的问题,常见的控制器有servlet,struts2等,控制器的核心功能是根据用户的请求调用对应业务功能,然后依据业务处理的结果,控制程序的运行流程。
servlet实现控制器存在的问题:
1.接收客户端请求参数时,存在代码的冗余
2.只能接收字符串类型的数据,其它数据类型需要手动的转换
3.无法接收对象类型的参数
4.调用业务对象存在耦合 (new)
5.流程跳转存在耦合(路径耦合,视图耦合)
1.传统的开发方式
通过作用域(request,session)实现数据的传递
通过视图技术进行视图的渲染(jsp thymleaf freeMarker)
2.前后端分离开发方式
多种新的访问方式(get 、post 、put、 delete)
Restful风格的访问
Spring MVC 框架是高度可配置的,包含多种视图技术,例如 JSP、FreeMarke和 POI。Spring MVC 框架并不关心使用的视图技术,也不会强迫开发者只使用 JSP。
4.1 SpringMVC 的执行流程如下:
Spring MVC 涉及到的组件有 DispatcherServlet(前端控制器)、HandlerMapping(处理器映射器)、HandlerAdapter(处理器适配器)、Handler(处理器)、ViewResolver(视图解析器)和 View(视图)。下面对各个组件的功能说明如下。
1)DispatcherServlet
DispatcherServlet 是前端控制器,从图 1 可以看出,Spring MVC 的所有请求都要经过 DispatcherServlet 来统一分发。DispatcherServlet 相当于一个转发器或中央处理器,控制整个流程的执行,对各个组件进行统一调度,以降低组件之间的耦合性,有利于组件之间的拓展。
2)HandlerMapping
HandlerMapping 是处理器映射器,其作用是根据请求的 URL 路径,通过注解或者 XML 配置,寻找匹配的处理器(Handler)信息。
3)HandlerAdapter
HandlerAdapter 是处理器适配器,其作用是根据映射器找到的处理器(Handler)信息,按照特定规则执行相关的处理器(Handler)。
4)Handler
Handler 是处理器,和 Java Servlet 扮演的角色一致。其作用是执行相关的请求处理逻辑,并返回相应的数据和视图信息,将其封装至 ModelAndView 对象中。
5)View Resolver
View Resolver 是视图解析器,其作用是进行解析操作,通过 ModelAndView 对象中的 View 信息将逻辑视图名解析成真正的视图 View(如通过一个 JSP 路径返回一个真正的 JSP 页面)
6)View
View 是视图,其本身是一个接口,实现类支持不同的 View 类型(JSP、FreeMarker、Excel 等)。
以上组件中,需要开发人员进行开发的是处理器(Handler,常称Controller)和视图(View)。通俗的说,要开发处理该请求的具体代码逻辑,以及最终展示给用户的界面
搭建步骤如下:
创建 Web 应用并引入 JAR 包
spring-webmvc
Spring MVC 配置:在 web.xml 中配置 Servlet,创建 Spring MVC 的配置文件
<servlet>
<servlet-name>springmvcservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springmvc-config.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>springmvcservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
6.1 springmvc配置文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="cn.kgc.spring" />
<mvc:annotation-driven />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<property name="prefix" value="/view/" />
<property name="suffix" value=".jsp" />
bean>
beans>
** 6.2 创建 Controller(处理请求的控制器)**
@Controller
@RequestMapping("/Hello")
public class HelloWorld {
@RequestMapping("/Say.do")
public String SayHi(Model model) {
return "index";
}
}
6.3 创建 View(使用 JSP 作为视图)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
hello springmvc
6.4部署运行
@RequestMapping详解
1.一个方法匹配多个路径
@RequestMapping(value={"hello1.do","hello2.do"})
public String test01(){
System.out.println("hello");
//跳转路径 默认使用转发 会经过视图解析器
return "index";
}
2.指定方法接收的请求方式
@RequestMapping(value = "hello1.do",method = RequestMethod.GET)
public String test01(){
System.out.println("hello GET");
//跳转路径 默认使用转发 会经过视图解析器
return "index";
}
@RequestMapping(value = "hello1.do",method = {RequestMethod.GET,RequestMethod.POST})
public String test01(){
System.out.println("hello GET OR POST");
//跳转路径 默认使用转发 会经过视图解析器
return "index";
}