springmvc的基本使用(基于xml)

一、搭建工程

这里使用的springmvc版本是5.3.13,新建一个web工程,导入springmvc的依赖,因为springmvc依赖了spring,所以不需要单独导入spring的依赖。

需要使用tomcat插件来启动web工程,所以要引入maven对应的插件,最终pom文件的内容如下

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.lyy</groupId>
    <artifactId>springmvc-003</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.13</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>80</port>
                    <path>/</path>
                    <uriEncoding>UTF-8</uriEncoding>
                    <server>tomcat7</server>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

最终工程的目录如下

src
--main
----java
----resources
----webapp
------WEB-INF
--------web.xml

二、基于xml配置springmvc

配置springmvc,实际上就是配置springmvc的四大核心组件:前端控制器,处理器映射器,处理器适配器,还有视图解析器

2.1 配置前端控制器

springmvc的前端控制器DispatcherServlet本质上是也一个servlet,用来接收用户的请求,进行处理,然后进行响应,是springmvc处理用户请求的入口。

因为它是一个servlet,所以需要配置在web工程的web.xml中。

	<servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

2.2 配置其他组件(处理器映射器,处理器适配器,视图解析器)

springmvc的几个核心组件中,除了前端控制器外其余的都要配置在springmvc的容器中,作为容器中的bean。

所以需要创建springmvc的配置文件,并把配置文件的路径作为前端控制器的初始化参数。

2.2.1 自动配置处理器映射器,处理器适配器,视图解析器

(1) springmvc提供了一个mvc:annotation-driven标签,在配置文件中配置了这个标签,就会自动配置处理器映射器和处理器适配器

(2) 视图解析器,springmvc默认的视图时jsp,所以需要把InternalResourceViewResolver这个视图解析器配置到容器中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.lyy.controller"></context:component-scan>

    <!--  这个标签会自动给容器中配置 处理器映射器,处理器适配器  -->
    <mvc:annotation-driven/>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

这样,只需要再定义Controller来处理请求并返回对应的视图

@Controller
@RequestMapping("/hello")
public class HelloController {

    @GetMapping("/sayHello")
    public String hello(){
        return "success";
    }
}

2.2.2 手动配置 处理器映射器,处理器适配器,视图解析器

以上这三个组件,被mvc:annotation-driven标签自动配置了。当有需要时也可以不使用这个标签,自己在spring容器中手动配置

(1)处理器映射器的顶层接口是 HandlerMapping, 处理Requestmapping注解这种映射关系的是RequestMappingHandlerMapping,所以可以在容器中配置这个

( 2) 处理器适配器的顶层接口是HandlerAdapter,处理Requestmapping注解这种映射关系的是

RequestMappingHandlerAdapter

所以可以在springmvc的配置文件中注释掉mvc:annotation-driven,配置这两个bean,也是可以的,这种通常用于需要对这两个组件进行定制化处理时使用

<!--  手动配置处理器映射器  -->
    <bean id="requestMappingHandlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
    <!--  手动配置处理器适配器  -->
    <bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />