SpringMVC框架详细笔记

SpringMVC的概述

 SpringMVC的入门案列

1.创建WEB项目,引入开发的jar包(引入依赖)

 <packaging>war</packaging>
    <!--版本锁定-->
    <properties>
        <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>

        <!--SpringMVC依赖包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!--ServletAPI依赖包-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

2.配置核心配置的控制器

<?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_3_1.xsd"
         version="3.1">

    <!-- SpringMVC的核心控制器 -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 配置Servlet的初始化参数,读取springmvc的配置文件,创建spring容器 -->
        <init-param>
            <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>

3.编写springmvc.xml的配置文件

<?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">

    <!-- 配置spring创建容器时要扫描的包 -->
    <context:component-scan base-package="com.itheima"></context:component-scan>

    <!-- 配置spring开启注解mvc的支持-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!-- 配置视图解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

4.编写index.jsp和HelloController控制器

4.1success.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
SpringMVC入门案例!
</body>
</html>

 5.HelloController控制器

package com.itheima.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/****
 * @Author:itheima
 * @Description:
 *****/
@Controller
public class HelloController {

    /******
     * 请求地址 http://localhost:18081/hello
     * @RequestMapping(path = "/hello"):用户请求/hello的时候,由该注解所在的方法处理
     * method:过滤了用户请求提交的方式
     * method = RequestMethod.POST:用户以POST条,才能被该方法拦截处理\
     *
     *
     * params用的比较少,这里不做要求掌握。
     *      param1: 表示请求必须包含名为 param1 的请求参数
     *      !param1: 表示请求不能包含名为 param1 的请求参数
     *      param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
     *      {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参数的值必须为 value1
     *      params = {"name"}:用户请求提交,必须要传入一个name参数
     *
     *
     * headers用的比较少,这里不做要求掌握。
     *          param1: 表示请求头必须包含名为 param1 的请求头信息
     *          !param1: 表示请求头不能包含名为 param1 的请求头信息
     *          param1 != value1: 表示请求头包含名为 param1 的请求头信息,但其值不能为 value1
     *          {“param1=value1”, “param2”}: 请求必头须包含头信息 param1 和param2的两个请求头信息 ,且 param1 的值必须为 value1
     */
    @RequestMapping(path = "/hello")
    public String sayHello(){
        System.out.println("SpringMVC hello!");
        //只需要写页面的名字即可(不用写全路径,不用写后缀)
        return "success";
        //ViewResolver
        //prefix+[返回的页面名字]+suffix
    }
}

 

入门案列的执行流程

组件解析:

1.前端控制器(DispathcherServlet)

2.处理映射器(HandlerMapping)

3.处理器(Handler)

4.处理器适配器(HandlAdapter

5.视图解析器(Viem Resolver

6.视图(View)

RequestMapping注解

源码

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
    String name() default "";

    @AliasFor("path")
    String[] value() default {};

    @AliasFor("value")
    String[] path() default {};

    RequestMethod[] method() default {};

    String[] params() default {};

    String[] headers() default {};

    String[] consumes() default {};

    String[] produces() default {};
}

RequestMapping注解的作用是建立请求URL和处理的方法之间的对应的关系

出现位置:

类上:

请求 URL 的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头

他出现的目的是为了使我们的URL可以按照模块化管理:

列如:

账户模块:                                  订单模块:

/account/add                             /order/add

/account/update/                      /order/update

/account/delete                         /order/delete

.........

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

访问上:请求URL的第二级访问目录。

RequestMapping注解可以作用在方法和类上

作用在类上:第一级的访问目录

作用在方法上:第二级的访问目录

细节:路径可以不编写 / 表示应用的根目录开始

细节:${ pageContext.request.contextPath }也可以省略不写

案列:

	案例:处理的请求路径是   http://localhost:8085/hello/say
	@Controller
	@RequestMapping(value = "/hello")
	public class HelloController {
	    /**
	     * 接收请求
	     * @return
	     */
	    @RequestMapping(value = "/say")
	    public String sayHello() {
	        System.out.println("Hello SpringMVC!!");
	        return "success";
	    }
	}

RequestMapping的属性

path:路径指定的请求的路径url

列如: 在HelloController方法上加了@RequestMapping(path="/hello"),而sayHello方法上加了@RequestMapping(path="/say"),此时用户可以直接访问 http://localhost:8085/hello/say 来访问该方法.

  @Controller
  @RequestMapping(path = "/hello")
  public class HelloController {
      /**
       * 此时用户访问此方法路径为 http://localhost:8085/hello/say
       * @return
       */
      @RequestMapping(value = "/say")
      public String sayHello() {
          System.out.println("Hello SpringMVC!!");
          return "success";
      }
  }

value属性和path属性是一样的

method:指定该请求的方式

我们这里写了sayHello()和sayYourName()2个方法,但他们请求路径相同,而method属性的值不一样,如果是RequestMethod.GET,则只能以方式请求,如果是RequestMethod.POST则只能以POST方式请求。

@Controller
@RequestMapping(value = "/hello")
public class HelloController {
    /**
     * 加了method = RequestMethod.GET
     * 此时此方法只接收 http://localhost:8085/hello/say 的GET提交方式请求
     * @return
     */
    @RequestMapping(value = "/say",method = RequestMethod.GET)
    public String sayHello() {
        System.out.println("Hello SpringMVC!!调用了GET方法");
        return "success";
    }

    /**
     * 加了method = RequestMethod.POST
     * 此时此方法只接收 http://localhost:8085/hello/say 的POST提交方式请求
     * @return
     */
    @RequestMapping(value = "/say",method = RequestMethod.POST)
    public String sayYourName() {
        System.out.println("Hello SpringMVC!!调用了POST方法");
        return "success";
    }
}

params:指定限制请求的参数的条件

params用的比较少,这里不做要求掌握。
param1: 表示请求必须包含名为 param1 的请求参数
!param1: 表示请求不能包含名为 param1 的请求参数
param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
{“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参数的值必须为 value1

 列如:

/**
 * headers参数:
 *      "Accept":表示请求头必须包含Accept头信息
 *      "!Date":表示请求头中不能包含Date的头信息
 *      "Accept-Encoding!=zh-CN":表示请求头中Accept-Encoding头信息的值不能为zh-CN
 *      "Host=localhost:18081":表示请求头中Host的值必须为localhost:18081
 *
 * @return
 */
@RequestMapping(headers = {"Accept","!Date","Accept-Encoding!=zh-CN","Host=localhost:18081"},
                value = "/say",method = RequestMethod.GET)
public String sayHello() {
    System.out.println("Hello SpringMVC!!调用了GET方法");
    return "success";
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值