SpringMVC:HelloWorld
一、概述
1、什么是SpringMVC
Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet。
Spring MVC 是结构最清晰的 Servlet+JSP+JavaBean 的实现,是一个典型的教科书式的 MVC 构架,不像 Struts 等其它框架都是变种或者不是完全基于 MVC 系统的框架。
Spring MVC 角色划分清晰,分工明细,并且和 Spring 框架无缝结合。Spring MVC 是当今业界最主流的 Web 开发框架,以及最热门的开发技能。
在 Spring MVC 框架中,Controller 替换 Servlet 来担负控制器的职责,用于接收请求,调用相应的 Model 进行处理,处理器完成业务处理后返回处理结果。Controller 调用相应的 View 并对处理结果进行视图渲染,最终客户端得到响应信息。
Spring MVC 框架采用松耦合可插拔的组件结构,具有高度可配置性,比起其它 MVC 框架更具有扩展性和灵活性。
此外,Spring MVC 的注解驱动和对 REST 风格的支持,也是它最具特色的功能。无论是在框架设计,还是扩展性、灵活性等方面都全面超越了 Struts2 等 MVC 框架。并且由于 Spring MVC 本身就是 Spring 框架的一部分,所以可以说与 Spring 框架是无缝集成,性能方面具有先天的优越性,对于开发者来说,开发效率也高于其它的 Web 框架,在企业中的应用越来越广泛,成为主流的 MVC 框架。
2、SpringMVC的优点
- 可以支持各种视图技术,而不仅仅局限于JSP;
- 与Spring框架集成(如IOC容器、AOP等);
- 清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。
- 支持各种请求资源的映射策略。
二、初体验HelloWorld
1、创建一个maven项目,添加web依赖。
2、在pom.xml文件中引入依赖
<!-- SpringMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.1</version>
</dependency>
<!-- ServletAPI -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring5 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.14.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.9</version>
</dependency>
3、在web.xml文件中配置springmvc的Dispatcher前端过滤器,设置springmvc配置文件的名称和位置
Spring MVC 初始化时将在应用程序的 WEB-INF 目录下查找配置文件,该配置文件的命名规则是“servletName-servlet.xml”,例如 DispatcherServlet-servlet.xml。也可以将 Spring MVC 的配置文件存放在应用程序
目录中的任何地方,但需要使用 servlet 的 init-param 元素加载配置文件,通过 contextConfigLocation
参数来指定 Spring MVC 配置文件的位置。
<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>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!--/ 过滤所有请求,不包括jsp文件
/*过滤所有请求,包括jsp文件
-->
<url-pattern>/*</url-pattern>
</servlet-mapping>
4、配置springmvc.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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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 http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--springmvc的三大核心是处理器映射器,处理器适配器,视图解析器-->
<!--开启注解扫描-->
<context:component-scan base-package="com.kw.mvc"></context:component-scan>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".html"></property>
</bean>
<!--让springmvc不去处理静态资源,如.css .js .html等-->
<mvc:default-servlet-handler/>
<!--开启mvc注解驱动,
在springmvc中一般采用@RequestMapping注解来完成映射关系,
要想使@RequestMapping注解生效,需要向上下文注册处理器映射器(DefaultAnnoationHandlerMapping),
处理器适配器(AnnotationMethodHandlerAdapter),
annotation-driven这个配置就相当于自动配置了springmvc的处理器适配器和处理器映射器-->
<mvc:annotation-driven/>
</beans>
5、创建一个Controller类,编写跳转逻辑。
@Controller
public class HelloController {
@RequestMapping("/hello")
private String hello(){
return "success";
}
}
6、测试
通过在html页面发送请求,访问Controller方法,通过视图解析器解析返回页面。
在html页面的路径中,/默认代表访问localhost:8080,例如:
<a href="/target">访问target页面</a>
访问路径为http://localhost:8080/target
,
注意:
1、如果web程序在部署时设置上下文路径不是/,此时访问路径就需要额外增加上下文路径,例如上下文路径为
此时访问路径就需要增加上下文路径:http://localhost:8080/SpringMVC/target
2、由于上下文路径会发生变化,所以我们一般建议进行如下设置,例如:
Tyemeleaf:<a th:href="@{/target}">访问target页面</a>
JSP:<a href="${pageContext.request.contextPath}//target">测试</a>
通过这种方式,在检索到路径为相对路径时就会自动增加上下文路径