Spring MVC入门案例
一)在IDEA中新建Spring MVC项目。

二)按照图片创建如下目录,并设置目录的属性。

三)在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.company</groupId> <artifactId>SpringMVC01</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>SpringMVC01 Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <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> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.0.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> </dependencies> <build> <finalName>SpringMVC01</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build> </project>
四)controller目录下新建HelloController类,实现Controller接口。
public class HelloController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { ModelAndView modelAndView=new ModelAndView(); modelAndView.setViewName("/WEB-INF/page/result.jsp"); modelAndView.addObject("message","welcome to spring MVC"); return modelAndView; } }
五)resources目录下,新建Spring Config文件applicationContext.xml。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 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"> <!--设置url路径与控制器的映射关系--> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hello">helloController</prop> </props> </property> </bean> <bean id="helloController" class="com.company.controller.HelloController"></bean> </beans>
六)将WEB-INF目录下的web.xml(格式不对)删除掉,新建一个web.xml,并设置DispatcherServlet。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <!--配置Spring MVC的核心控制器--> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--配置初始化参数 用于读取SpringMVC的配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <!--配置servlet对象的创建时间点:应用加载时创建。 取值只能是非0正整数,表示启动顺序--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
七)设置index.jsp和result.jsp
webapp目录下index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>spring mvc</h1> <a href="${pageContext.request.contextPath}/hello">test</a> </body> </html>
在WEB-INF目录下,新建page目录,新建result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>${message}</h1> </body> </html>
八)部署Tomcat及相关环境

<url-pattern>/</url-pattern>和<url-pattern>/*</url-pattern>的区别
- <url-pattern>/</url-pattern>:会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url。即*.jsp不会进入spring的DispatcherServlet类。
- <url-pattern>/*</url-pattern>:会匹配所有url:路径型url和后缀型url(包括/login,*.jsp,*.js和*.html等)。会出现返回jsp视图时再次进入spring的DispatcherServlet类,导致找不到对应的Controller,报404错误。
使用注解配置Spring MVC
HelloController类加注解
@Controller public class HelloController { @RequestMapping("/hello") public ModelAndView getResult(){ ModelAndView modelAndView=new ModelAndView(); modelAndView.addObject("message","welcome to springMVC!"); modelAndView.setViewName("/WEB-INF/page/result.jsp"); return modelAndView; } }
applicationContext.xml注释
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- <!–设置url路径与控制器的映射关系–> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hello">helloController</prop> </props> </property> </bean> <bean id="helloController" class="com.company.controller.HelloController"></bean>--> <context:component-scan base-package="com.company.controller"/> </beans>
重启服务器,还是可以访问页面。
在此基础上,添加视图解析器ViewResolver。
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- <!–设置url路径与控制器的映射关系–> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hello">helloController</prop> </props> </property> </bean> <bean id="helloController" class="com.company.controller.HelloController"></bean>--> <context:component-scan base-package="com.company.controller"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/page/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
HelloController控制器
@Controller public class HelloController { @RequestMapping("/hello") public ModelAndView getResult(){ ModelAndView modelAndView=new ModelAndView(); modelAndView.addObject("message","welcome to springMVC!"); modelAndView.setViewName("result"); return modelAndView; } }
案例的执行过程

Spring MVC的请求流程

入门案例中涉及的组件
- DispatcherServlet(前端控制器):它的任务就是拦截请求发送给Spring MVC控制器。
- HandlerMapping(处理器控制器):HandlerMapping负责根据用户请求找到Handler即处理器,SpringMVC提供了不同的映射器实现不同映射方式,如:配置文件方式,实现接口方式,注解方式等。
- Handler(处理器):它就是开发中要编写的具体业务控制器。由DispatcherServlet把用户请求转发到Handler。由Handler对具体的用户请求进行处理。
- HandlerAdapter(处理器适配器):通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器执行。
- ViewResolver(视图解析器):View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
- View(视图):SpringMVC框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。
<mvc:annotation-driver>说明
在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器称为SpringMVC的三大组件。使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping(处理器映射器)和RequestMappingHandlerAdapter(处理器适配器),可用在SpringMVC.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。
RequestMapping注解
使用说明:
@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { }
作用:用于建立请求URL和处理器请求方法之间的对应关系。
使用:
- 类上:请求URL的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使URL可以按照模块化管理。
- 方法上:请求URL的第二级访问目录。
属性:
- value:用于指定请求的URL。它和path属性的作用是一样的。
- method:用于指定请求的方式。
- params:用于指定限制请求参数的条件。它支持简单的表达式,要求请求参数的key和value必须和配置的一模一样。如:params={"accountName"},表示请求参数必须有accountName
- headers:用于指定限制请求消息头的条件。
以上属性出现2个及以上,其之间是与关系。
posted on
浙公网安备 33010602011771号