初识Springmvc

目录

1、回顾MVC

1.1、什么是MVC

MVC框架要做哪些事情

2、什么是SpringMVC

2.1、中心控制器

SpringMVC执行原理

简要分析执行流程

HelloSpring

配置springmvc

注解版实现springmvc

配置文件

创建Controller

小结


1、回顾MVC

1.1、什么是MVC

MVC 是模型 (Model) 、视图 (View) 、控制器 (Controller) 的简写,是一种软件设计规范。
是将业务逻辑、数据、显示分离的方法来组织代码。
MVC 主要作用是 降低了视图与业务逻辑间的双向偶合
MVC 不是一种设计模式, MVC 是一种架构模式 。当然不同的 MVC 存在差异。
Model (模型): 数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或
JavaBean 组件(包含数据和行为),不过现在一般都分离开来: Value Object (数据 Dao ) 和 服务层 (行为Service )。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
View (视图): 负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
Controller (控制器): 接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型 数据返回给视图,由视图负责展示。 也就是说控制器做了个调度员的工作。
最典型的 MVC 就是 JSP + servlet + javabean 的模式。
职责分析:
Controller :控制器
1. 取得表单数据
2. 调用业务逻辑
3. 转向指定的页面
Model :模型
1. 业务逻辑
2. 保存数据的状态
View :视图
1. 显示页面

MVC框架要做哪些事情

1. url 映射到 java 类或 java 类的方法 .
2. 封装用户提交的数据 .
3. 处理请求 -- 调用相关的业务处理 -- 封装响应数据 .
4. 将响应的数据进行渲染 . jsp / html 等表示层数据 .

 

2、什么是SpringMVC

Spring MVC Spring Framework 的一部分,是基于 Java 实现 MVC 的轻量级 Web 框架
Spring MVC 的特点:
1. 轻量级,简单易学
2. 高效 , 基于请求响应的 MVC 框架
3. Spring 兼容性好,无缝结合
4. 约定优于配置
5. 功能强大: RESTful 、数据验证、格式化、本地化、主题等
6. 简洁灵活
Spring web 框架围绕 DispatcherServlet [ 调度 Servlet ] 设计。

2.1、中心控制器

Spring web 框架围绕 DispatcherServlet 设计。 DispatcherServlet 的作用是将请求分发到不同的处
理器。从 Spring 2.5 开始,使用 Java 5 或者以上版本的用户可以采用基于注解的 controller 声明方式。 Spring MVC框架像许多其他 MVC 框架一样 , 以请求为驱动 , 围绕一个中心 Servlet 分派请求及提供其他 功能 DispatcherServlet 是一个实际的 Servlet ( 它继承自 HttpServlet 基类 )
SpringMVC 的原理如下图所示:
当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制
器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者

 

 

SpringMVC执行原理

 

图为 SpringMVC 的一个较完整的流程图,实线表示 SpringMVC 框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。

简要分析执行流程

1. DispatcherServlet 表示前置控制器,是整个 SpringMVC 的控制中心。用户发出请求DispatcherServlet接收请求并拦截请求。
我们假设请求的 url : http://localhost:8080/SpringMVC/hello
如上 url 拆分成三部分:
http://localhost:8080 服务器域名
SpringMVC 部署在服务器上的 web 站点
hello 表示控制器
通过分析,如上 url 表示为:请求位于服务器 localhost:8080 上的 SpringMVC 站点的 hello 控制器。
2. HandlerMapping 为处理器映射。 DispatcherServlet 调用 HandlerMapping,HandlerMapping 根据
请求 url 查找 Handler
3. HandlerExecution 表示具体的 Handler, 其主要作用是根据 url 查找控制器,如上 url 被查找控制器
为: hello
4. HandlerExecution 将解析后的信息传递给 DispatcherServlet, 如解析控制器映射等。
5. HandlerAdapter 表示处理器适配器,其按照特定的规则去执行 Handler
6. Handler 让具体的 Controller 执行。
7. Controller 将具体的执行信息返回给 HandlerAdapter, ModelAndView
8. HandlerAdapter 将视图逻辑名或模型传递给 DispatcherServlet
9. DispatcherServlet 调用视图解析器 (ViewResolver) 来解析 HandlerAdapter 传递的逻辑视图名。
10. 视图解析器将解析的逻辑视图名传给 DispatcherServlet
11. DispatcherServlet 根据视图解析器解析的视图结果,调用具体的视图。
12. 最终视图呈现给用户。

HelloSpring

配置springmvc

1. 新建一个 Moudle , 添加 web 的支持!
2. 确定导入了 SpringMVC 的依赖!
3. 配置 web.xml , 注册 DispatcherServlet
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--1.注册DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-
class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--启动级别-1-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--/ 匹配所有的请求;(不包括.jsp)-->
<!--/* 匹配所有的请求;(包括.jsp)-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

4. 编写 SpringMVC 的 配置文件!名称: springmvc-servlet.xml : [servletname]-servlet.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

5. 添加 处理映射器
<bean
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
"/>

6. 添加 处理器适配器
<bean
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
"/>

7. 添加 视图解析器
<!--视图解析器:DispatcherServlet给他的ModelAndView-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
springmvc配置文件默认写法
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">



    <!--添加 处理映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
    <!--添加 处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter "/>

    <!-- 添加 视图解析器-->
    <!--视图解析器:DispatcherServlet给他的ModelAndView-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>

    



</beans>

注解版实现springmvc



配置文件

<?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: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
https://www.springframework.org/schema/context/spring-
context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">

<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
<context:component-scan base-package="com.kuang.controller"/>
<!-- 让Spring MVC不处理静态资源 -->
<mvc:default-servlet-handler />
<!--
支持mvc注解驱动
在spring中一般采用@RequestMapping注解来完成映射关系
要想使@RequestMapping注解生效
必须向上下文中注册DefaultAnnotationHandlerMapping
和一个AnnotationMethodHandlerAdapter实例
这两个实例分别在类级别和方法级别处理。
而annotation-driven配置帮助我们自动完成上述两个实例的注入。
-->
<mvc:annotation-driven />
<!-- 视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver
"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>

在视图解析器中我们把所有的视图都存放在 /WEB-INF/ 目录下,这样可以保证视图安全,因为这个
目录下的文件,客户端不能直接访问。
 

创建Controller

编写一个 Java 控制类: com.kuang.controller.HelloController , 注意编码规范
package com.kuang.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/HelloController")
public class HelloController {
//真实访问地址 : 项目名/HelloController/hello
@RequestMapping("/hello")
public String sayHello(Model model){
//向模型中添加属性msg与值,可以在JSP页面中取出并渲染
model.addAttribute("msg","hello,SpringMVC");
//web-inf/jsp/hello.jsp
return "hello";
}
}


@Controller 是为了让 Spring IOC 容器初始化时自动扫描到;
@RequestMapping 是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该
/HelloController/hello
方法中声明 Model 类型的参数是为了把 Action 中的数据带到视图中;
方法返回的结果是视图的名称 hello ,加上配置文件中的前后缀变成 WEB-INF/jsp/ hello .jsp

小结

实现步骤其实非常的简单:
1. 新建一个 web 项目
2. 导入相关 jar
3. 编写 web.xml , 注册 DispatcherServlet
4. 编写 springmvc 配置文件
5. 接下来就是去创建对应的控制类 , controller
6. 最后完善前端视图和 controller 之间的对应
7. 测试运行调试 .
使用 springMVC 必须配置的三大件:
处理器映射器、处理器适配器、视图解析器
通常,我们只需要 手动配置视图解析器 ,而 处理器映射器 处理器适配器 只需要开启 注解驱动 即可,而
省去了大段的 xml 配置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值