zoukankan      html  css  js  c++  java
  • Java 22-SpringMVC知识

    1.服务器端三层架构

    image

            一般来说,服务器端按照三层进行开发,分别是表现层,业务层和持久层。对于过去mybatis是对应数据库,spring对应是业务层进行调用实现业务逻辑,表现层mvc是对应web层的表现层进行接收浏览器请求参数和响应结果的封装。浏览器一定会发布一个http请求,这个请求一定经过springmvc表现层。表现层获取请求参数交给spring业务层,之后去持久层mybatis,之后返回层层封装数据返回给客户端web;称之为一次交互。

    1.1.MVC设计模型

    image

    image

            MVC设计模型的意思或者说本质就是体现或者代表了表现层的设计内含,模型(model--java bean封装模型)→视图(view--jsp html技术)→控制器(controller--servlet 可以接受请求);其实是 c→m→v ,我们springmvc也是基于mvc设计模型进行设计运行的,所以需要了解mvc模型

    1.1.1 springmvc简单介绍

    image

          实现mvc设计模型意思是只要是基于mvc模型就能获取http数据进行封装,也能封装转给jsp,进而展示。

         springmvc通过注解,让简单的java类成为处理请求的控制器,而无需实现任何借口,通俗的说就是前期servlet编写时候,需要继承实现httpServlet接口(规范),而springmvc就可以让一个普通的类就可以处理http请求。

    1.1.2 springmvc标准流程位置

    image

    流程是自左向右再向左

    1.1.3.springmvc的优势

    image

           清晰:角色划分其实就是模块化的组件化的各类器的合作。比方说前端来一个http请求,到前端控制器,再到请求到处理器映射等等。每个器都进行不同的事。例如每个请求最后到哪里处理是视图解析器进行处理。

    image

            离不开servetApi意思是底层一定有request和response对象。springmvc核心控制器是servlet,而struts2核心控制器是一个过滤器。入口的差异也是如此。springmvc是单例的,struts2是多例的,也就造成struts2基于类创建对象,执行方法。而springmvc直接执行方法。自然快些。

    --------------------------------------------------------------------------------

    1.2 springmvc的入门案例分析与需求整理

    image

    第一步:我们创建完毕后,可以看到main并不完整,我们需要自己创建main下面的java和resources文件夹,并右键mark directory as如下:分别类目录和资源目录

    image1615776579(1)image

    第二步:引入依赖

    web.xml要求

    image

    pom要求

      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring.version>5.0.2.RELEASE</spring.version>
    
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>javax.servlet.jsp</groupId>
          <artifactId>jsp-api</artifactId>
          <version>2.0</version>
          <scope>provided</scope>
        </dependency>

               在resources文件夹下创建springmvc的配置文件,右键新建 xml configuration file;选择spring配置,命名为springmvc.xml即可,至此环境配置完毕.

    2. 入门案例

    <%--
      Created by IntelliJ IDEA.
      User: Administrator
      Date: 2021/3/15 0015
      Time: 11:35
      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>
    <h2>入门程序</h2>
    <a href="hello">入门程序</a>
    <a href="requestMappingTest">入门程序</a>
    </body>
    </html>
    
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h3>入门程序</h3>
    </body>
    </html>
    


    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    /**
     * 控制器的类,springmvc中一般叫法,接受请求
     */
    @Controller("helloController")
    public class HelloController {
    
        /**
         * 我们要想跳转给它就执行sayhello方法,需要把helloController变成一个对象,
         * 此时可以用spring IOC容器管理,需要用ioc配置文件,进行注解扫描,需要context的空间
         * @return
         */
        @RequestMapping(path = "/hello")
        public String sayHello(){
            System.out.println("hello springmvc的seyHello方法执行了");
            return "success";
        }
        @RequestMapping(path = "/requestMappingTest")
        public String requestMappingTest(){
            System.out.println("requestMappingTest方法执行了");
            return "success";
        }
    }
    
    <!DOCTYPE web-app PUBLIC
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >
    
    <web-app>
      <display-name>Archetype Created Web Application</display-name>
      <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 配置Servlet的初始化参数,读取springmvc的配置文件,创建spring容器 -->
        <init-param>
    <!--      3. 编写springmvc.xml的配置文件-->
    <!--      4. 编写index.jsp和HelloController控制器类-->
    <!--      1. index.jsp-->
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!-- 配置servlet启动时加载对象 -->
        <load-on-startup>1</load-on-startup>
    
      </servlet>
      <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    </web-app>
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           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
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
    <!--    开启注解扫描,加上包cn.itcast,这样helloController就可以由ioc扫描到,接着去类加注解 @controller-->
        <context:component-scan base-package="cn.itcast"></context:component-scan>
    <!--视图解析器对象 对象名字比较固定 InternalResourceViewResolver-->
        <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/pages/"></property>
            <property name="suffix" value=".jsp"></property>
    
        </bean>
    <!--    开启springmvc框架注解支持-->
        <mvc:annotation-driven></mvc:annotation-driven>
    </beans>
    

    2.1 入门案例分析

           其中返回的success字符串,springmvc默认将它视为jsp文件名,因此我们要单独创建success.jsp文件,一般在web-inf下面pages里面创建。


    2.2. RequestMapping注解分析

    源码:
    @Target({ElementType.METHOD, ElementType.TYPE})--源注解 方法或类上
    @Retention(RetentionPolicy.RUNTIME)--运行期期间
    @Documented
    @Mapping
    public @interface RequestMapping {
    }
    
    • 作用:用于建立请求 URL 和处理请求方法之间的对应关系
    • 出现位置:

    1.)类上:

         请求 URL 的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以按照模块化管理:

    例如:账户模块: /account/add /account/update /account/delete ...

             订单模块: /order/add /order/update /order/delete

    红色的部分就是把 RequsetMappding 写在类上,使我们的 URL 更加精细。

    2.)方法上:请求 URL 的第二级访问目录。

    3)属性:

         value:用于指定请求的 URL。它和 path 属性的作用是一样的。

         method:用于指定请求的方式。

         params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和配置的一模一样。

    例如: params = {"accountName"},表示请求参数必须有 accountName

               params = {"moeny!100"},表示请求参数中 money 不能是 100。

         headers:用于指定限制请求消息头的条件。注意:以上四个属性只要出现 2 个或以上时,他们的关系是与的关系。












  • 相关阅读:
    ios swift 判断uiviewcontroller时push present 进来的 还是pop进来的
    vue wangeditor3封装
    ios uiimagepickercontroller 选择相册或者拍照上传
    ios 监控键盘状态
    ios 真机使用相机闪退问题
    swift bannerview 广告轮播图
    ios avplayer 监控播放进度
    【C++】智能指针
    [LeetCode] Word Break
    【海量数据处理】100亿个整数,内存足够,如何找到中位数?内存不足,如何找到中位数?
  • 原文地址:https://www.cnblogs.com/rango0550/p/14536064.html
Copyright © 2011-2022 走看看