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 个或以上时,他们的关系是与的关系。












posted @ 2021-03-15 10:22  芒果侠  阅读(191)  评论(0编辑  收藏  举报