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