首页 > 其他分享 >初识springmvc

初识springmvc

时间:2024-05-14 10:31:59浏览次数:14  
标签:xml springmvc 视图 Controller 初识 DispatcherServlet servlet

  1. 什么是MVC?

    • MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。
  2. 为什么使用mvc?

    • 在于将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。最典型的MVC就是jsp+servlet+javabean模式。
  3. 什么是springmvc

    • SpringMVC就是一个Spring内置的MVC框架。

    • MVC框架,它解决WEB开发中常见的问题(参数接收、文件上传、表单验证、国际化等等),而且使用简单,与Spring无缝集成。支持 RESTful风格的URL请求。

    • 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。

  4. springmvc原理

    • 在没有使用SpringMVC之前我们都是使用Servlet在做Web开发。但是使用Servlet开发在接收请求参数,数据共享,页面跳转等操作相对比较复杂。servlet是java进行web开发的标准,既然springMVC是对servlet的封装,那么很显然SpringMVC底层就是Servlet,SpringMVC就是对Servlet进行深层次的封装。
  5. springmvc执行流程

    • 用户发送出请求被前端控制器DispatcherServlet拦截进行处理。
    • DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
    • HandlerMapping找到具体的处理器(查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。
    • DispatcherServlet调用HandlerAdapter(处理器适配器)。
    • HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。
    • Controller执行完成返回ModelAndView对象。
    • HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
    • DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。
    • ViewReslover解析ModelAndView后返回具体View(视图)给DispatcherServlet。
    • DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
    • DispatcherServlet响应View给用户。
  6. 涉及组件的解读

    • 前端控制器DispatcherServlet(不需要程序员开发)由框架提供,在web.xml中配置。

      • 作用:接收请求,响应结果,相当于转发器,中央处理器。
    • 处理器映射器HandlerMapping(不需要程序员开发)由框架提供。

      • 作用:根据请求的url查找Handler(处理器/Controller),可以通过XML和注解方式来映射。
    • 处理器适配器HandlerAdapter(不需要程序员开发)由框架提供。

      • 作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler中的方法。
    • 处理器Handler(也称之为Controller,需要程序员开发)

      • 注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。
      • 作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。
    • 视图解析器ViewResolver(不需要程序员开发)由框架提供。

      • 作用:进行视图解析,把逻辑视图解析成真正的物理视图。
      • SpringMVC框架支持多种View视图技术,包括:jstlView、freemarkerView、ThymeleafView等。
    • 视图View(需要工程师开发)

      • 作用:把数据展现给用户的页面
      • View是一个接口,实现类支持不同的View技术(jsp、freemarker、pdf等)
  7. 用xml配置文件开发springmvc

    • 导入springmvc的依赖:spring-webmvc,servlet-api,jsp-api,jstl

    • 配置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>
    
    • 编写 SpringMVC 的配置文件:springmvc-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">
    
        <!--添加处理映射器-->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
        <!--添加处理适配器-->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
        <!--视图解析器: ViewResolver-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
            <!--前缀-->
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <!--后缀-->
            <property name="suffix" value=".jsp"/>
        </bean>
    
        <!--Handler-->
        <bean id="/hello" class="com.test.controller.HelloController"/>
    </beans>
    
    • 编写操作业务 Controller ;Controller 要么实现 Controller 接口,要么使用 @Controller 注解;
    package com.test.controller;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    // 实现 Controller 接口
    public class HelloController implements Controller {
    
       public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
           // ModelAndView 模型和视图
           ModelAndView mv = new ModelAndView();
    
           // 封装对象, 放在 ModelAndView 中
           mv.addObject("msg", "HelloSpringMVC!");
           // 封装要跳转的视图,放在 ModelAndView 中
           mv.setViewName("hello"); // 根据视图解析器, 自动拼接成 /WEB-INF/jsp/hello.jsp
           return mv;
      }
    }
    
  8. 在实际开发中通常使用注解开发springmvc

    • 由于 Maven 可能存在 资源过滤 的问题,pom.xml 增加如下配置:
    <build>
       <resources>
           <resource>
               <directory>src/main/java</directory>
               <includes>
                   <include>**/*.properties</include>
                   <include>**/*.xml</include>
               </includes>
               <filtering>false</filtering>
           </resource>
           <resource>
               <directory>src/main/resources</directory>
               <includes>
                   <include>**/*.properties</include>
                   <include>**/*.xml</include>
               </includes>
               <filtering>false</filtering>
           </resource>
       </resources>
    </build>
    
    • 配置 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.注册servlet-->
       <servlet>
           <servlet-name>SpringMVC</servlet-name>
           <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
           <!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->
           <init-param>
               <param-name>contextConfigLocation</param-name>
               <!-- 关联 SpringMVC 配置文件 -->
               <param-value>classpath:springmvc-servlet.xml</param-value>
           </init-param>
           <!-- 启动顺序,数字越小,启动越早 -->
           <load-on-startup>1</load-on-startup>
       </servlet>
       
       <!--所有请求都会被springmvc拦截 -->
       <servlet-mapping>
           <servlet-name>SpringMVC</servlet-name>
           <url-pattern>/</url-pattern>
       </servlet-mapping>
    </web-app>
    
    • 编写 SpringMVC 的配置文件:springmvc-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"
          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不处理静态资源: HTML、JS、CSS、图片、视频 .....-->
       <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>
    
    • 编写操作业务 Controller
    package com.test.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";
    	}
    }
    

标签:xml,springmvc,视图,Controller,初识,DispatcherServlet,servlet
From: https://www.cnblogs.com/hytip/p/18190692

相关文章

  • SpringMVC中JSP页面不显示EL表达式的原因
    感谢 https://developer.aliyun.com/article/444366 在SpringMVC的入门项目中,这是最常见的问题。实际上这是因为使用了JSP1.2规范引起的。1.使用JSP1.2定义格式如果您使用了 老旧的JSP1.2描述方式,即使用了DTD定义:web.xml<!DOCTYPEweb-appPUBLIC"-......
  • springmvc+swagger2+struts2
    jar包<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.7</version> </dependency> <dependency> <groupId>com.fasterxml.ja......
  • 初识PostgreSql
    前言PostgreSql常被称为Postgres,简称PG,后文中以PG称呼。是当今非常流行的一种数据库。为什么使用PG在分析这个问题之前,我认为有必要说一说Oracle和MySql这两家数据库。OracleOracle作为占有率最高的数据库,由Oracle公司开发,提供商业支持,其流行的原因在于其强大的性能......
  • 初识vector
    一、定义和初始化vector1、初始化vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型。如vector<int>。1、默认初始化vector<string>s;2、拷贝初始化注意:字面值不能构造vector对象vector<int>i;vecotr<int>i2(i);vector<int>i3=i;vector......
  • Spring SpringMVC——前端控制器初始化过程
     创建完DispatcherServlet对象时,会执行类中的init方法 如果不配置load-on-startup,那么DispatcherServlet将在第一次收到请求时才会被实例化和初始化。这意味着DispatcherServlet不会在服务器启动时立即执行创建和初始化的操作。当第一个请求到达时,Servlet容器(如Tomca......
  • Spring SpringMVC概述
    SpringMVC框架主要用于跟客户端交互,包括请求和响应。  前端控制器的作用就是把一些功能封装,我们在开发时就不用再写一些繁杂的代码了SpringMVC使用DispatcherServlet作为前端控制器,DispatcherServlet本质其实是一个Servlet 原先我们在访问时,客户端发起请求直接找Servlet......
  • Docker 必知必会----初识
    什么是Docker?Docker是一个开源的容器管理引擎。开发者可以通过Docker直接管理应用程序所需要的容器。它的logo如下: 为什么需要Docker使用Docker主要有两个原因,1、屏蔽不同环境的硬件差异,减轻开发人员在不同环境上,为了适配环境差异所需要做的工作。如各项系统配置、环境变量、......
  • SpringMVC(3)-request域和session域的作用和区别
    最近看到项目中用到request域和session域,脑子里一直没有一个明确的区分,结合GPT整理了一份总结。为了理解request和session的作用和区别,可以想象我们正在参加一个大型的科技会议。会议中,每位与会者(用户)都会与会议工作人员(服务器)进行交流。在这个比喻中,request域和session域是用于......
  • apache druid 初识
    一:Apachedruid是一种实时分析数据库,设计用于对大型数据集进行快速分析(OLAP),支持数据的实时摄取,提供低时延的查询性能。二:Apachedruid主要特点(1)列式存储格式,查询时只加载特定查询的列,还根据数据类型优化每一列的存储,加快查询速度。(2)可扩展的分布式系统。典型的Druid部署......
  • SpringMVC(2)-Rest请求风格
    REST:RepresentationalStateTransfer,(资源)表现层状态转化。REST是目前流行的请求方式。在HTTP协议中,有四个基本操作:GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源。REST就是通过get/post/put/delete说明crud的类型。REST的核心过滤器浏览器form表单......