SoingMVC

我们为什么要学习SpringMVC呢?

Spring MVC的特点:

        1. 轻量级,简单易学

        2. 高效 , 基于请求响应的MVC框架

        3. 与Spring兼容性好,无缝结合

        4. 约定优于配置

        5. 功能强大:RESTful、数据验证、格式化、本地化、主题等

        6.简洁灵活

        Spring的web框架围绕DispatcherServlet [ 调度Servlet ] 设计。

         DispatcherServlet的作用是将请求分发到不同的处理器。

        从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于 注解形式进行开发,十分简洁。

        正因为SpringMVC好 , 简单 , 便捷 , 易学 , 天生和Spring无缝集成(使 用SpringIoC和Aop) , 使用约定优于配置, 能够进行简单的junit测 试,支持Restful风格,异常处理 , 本地化 , 国际化 , 数据验证 , 类型 转换 , 拦截器 等等 所以我们要学习 。

中心控制器

        Spring的web框架围绕DispatcherServlet设计。

        DispatcherServlet的作用是将请求分发到不同的处理器。

        从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注 解的controller声明方式。         Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一 个中心Servlet分派请求及提供其他功能,DispatcherServlet是一 个实际的Servlet (它继承自HttpServlet 基类)。

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.最终视图呈现给用户。

配置版springMVC

1,新建模块、导入jar包、在项目中新建lib,导入jar包

2,配置web.xml

<?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">
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spingMVC-config.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

3,配置springMVC-config.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: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">

    <!--配置处理映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!--配置处理适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="viewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--    给hellocontroller配置一个访问资源路径-->
    <bean id="/hello" class="com.web.controller.HellloController"/>

</beans>

4,写操作业务的Controller,可以通过实现接口,或者加上注解的方式。

        需要返回一个ModelAndView,用来装数据

package com.web.controller;

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

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

public class HellloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //创建一个ModelAndView
        ModelAndView modelAndView = new ModelAndView();
        //存入对象
        modelAndView.addObject("message","hello,这是一个SpringMVC的开始");
        //返回数据到页面
        modelAndView.setViewName("hello");

        return modelAndView;
    }
}

5,配置bean

6、写要跳转的JSP页面

<%--
  Created by IntelliJ IDEA.
  User: Daisy
  Date: 2023/10/31
  Time: 14:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
${message}
</body>
</html>

7,访问

注解版的SpringMVC

1,新建一个模块,添加lib包、pom.xml中添加相关依赖

2,配置web.xml

3、springmvc配置文件

4、配置Controller

5、配置JSP页面

6、访问成功

总结步骤

1,新建web项目 2,导入jar包 3,配置web.xml,注册dispatcherServlet 4,配置SpringMVC配置文件 5,创建对应的控制类,Controller 6,完成前端视图和controller之间的对应 7,测试

SpringMVC必须配置的三大件

处理器映射器 handlerMapping 处理器适配器 handlerAdapter 视图解析器 ViewResolver

控制器controller

控制器负责提供访问应用程序的行为,通常通过定义接口或者注解 定义两种方式实现 控制器负责解析用户的请求,并将其转为一个模型。 springMVC中,一个控制器可以包含多个方法 springMVC中,对于controller的配置方式也有很多

1,实现controller接口方式

上面的配置案例就是使用的接口方式

2,注解实现controller 使用@Controller

@controller注解类型用于声明Spring类的实例是一个控制器。 spring可以使用扫描机制,找到应用程序中所有基于注解的控制类

写了两个测试方法,请求地址不同,返回的页面相同。 可以发现,两个请求都是指向一个页面,但是页面的结果不一样。 所以,视图在这里是被复用的,控制器和视图之间是弱耦合

RequestMapping 作用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值