SpringMVC:环境搭建与常用注解

1、导入依赖

需要导入spring依赖和web相关依赖

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
  </dependency>
  
  <!--以下三个坐标为获取前端json数据时需要用到的-->
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.0</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.0</version>
  </dependency>
</dependencies>

2、配置web.xml文件

配置该文件用于打通web,最好使用3.1+版本的约束(默认生成的可能是低版本约束)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!-- 配置前端核心控制器 -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 配置加载springmvc.xml文件 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!-- 配置对象创建时机:服务器启动的时候,让DispatcherServlet对象创建 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- 前端参数中文乱码(get方式已解决,post方式未解决)过滤器 -->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!-- 指定编码方式 -->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-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">

    <!--开启注解扫描,表现层的注解扫描由该文件单独控制-->
    <context:component-scan base-package="cao.zhanpeng.control"/>

    <!--配置视图解析器-->
    <bean id="view" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--指定跳转视图所在位置的前缀和后缀-->
        <property name="prefix" value="/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- 在前端页面中引入外部的静态资源时,默认会被核心控制器拦截,
    需要设置静态资源不过滤,静态资源需要放在web路径(webapp)下-->
    <mvc:resources location="/css/" mapping="/css/**" />
    <mvc:resources location="/img/" mapping="/img/**" />
    <mvc:resources location="/js/" mapping="/js/**" />
    <mvc:resources location="/plugins/" mapping="/plugins/**" />

    <!--开启springmvc的注解支持
    会自动加载RequestMappingHandlerMapping(处理映射器)
    和RequestMappingHandlerAdapter(处理适配器 )
    这两个组件用于定位控制器方法并执行,和视图解析器并称SpringMVC三大组件
    只有三大组件齐全,才能执行方法并成功跳转页面-->
    <mvc:annotation-driven/>

</beans>

SpringMVC的执行流程

启动服务器后发生了什么

  • 前端控制器DispatcherServlet对象创建
  • 读取springmvc.xml文件
  • 创建控制器类对象------是根据@Controller注解来创建的

常用注解

@RequestMapping注解

用于指定资源路径及其相关属性,通常作用于方法上,如果作用于方法所在的类上,相当于给资源路径加了个一级目录。

常用属性

  • path和value属性等同,用于指定资源路径
  • method属性,用于指定该方法能接受什么样的请求,比如=RequestMethod.POST,此时如果用GET请求,将报405异常
  • params属性,用于指定请求参数的限制条件,它支持简单的表达式
    • 比如params={“accountName”},表示请求参数中必须要有accountName。
    • 再比如params={"money!100"},表示请求参数中money不能是100
    • 如果不满足限制条件将报400错误
  • headers属性,指定请求消息中必须要有的请求头,用的较少。

@RequestParam注解

当【请求参数名称】和【方法中接收数据的参数名称】不一致时,可以用该注解来将两者对应上。属性name和value通用,用来指定请求参数名称,会将该名称的值传递给方法的参数。

@RequestBody注解

用于POST请求时获取整个请求体内容。

在方法上定义一个字符串参数来接收,并且用@RequestBody来修饰即可

@RequestHeader注解

修饰参数,用于获取请求头的值,value属性用来指定请求头名称。

@CookieValue注解

修饰参数,用于拿到指定cookie名称的值,value用于指定cookie名称。

@SessionAttributes注解

用于多次执行控制器方法间的数据共享。

  • 只能作用于类上
  • 类中方法设置的键值对,可以在类上通过键将键值对存入到session域中,这样其他方法也可以通过对象来获取了。

发布了70 篇原创文章 · 获赞 1 · 访问量 2254

猜你喜欢

转载自blog.csdn.net/caozp913/article/details/103775099