Spring基础知识(11)- Spring MVC (一)
Spring MVC 简介、创建 Maven Webapp 项目、配置 Spring MVC
1. Spring MVC 简介
Spring MVC(模型-视图-控制)框架是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet。Spring MVC 围绕 DispatcherServlet 设计的,DispatcherServlet 用来处理所有的 HTTP 请求和响应。
Spring MVC 是结构最清晰的 Servlet + JSP + JavaBean 的实现,是一个典型的教科书式的 MVC 构架,不像 Struts 等其它框架都是变种或者不是完全基于 MVC 系统的框架。 Spring MVC 采用松耦合可插拔的组件结构,具有高度可配置性,比起其它 MVC 框架更具有扩展性和灵活性。
在 Spring MVC 框架中,Controller 替换 Servlet 来担负控制器的职责,用于接收请求,调用相应的 Model 进行处理,处理器完成业务处理后返回处理结果。Controller 调用相应的 View 并对处理结果进行视图渲染,最终客户端得到响应信息。
Spring MVC 本身就是 Spring 框架的一部分,所以可以说与 Spring 框架是无缝集成,性能方面具有先天的优越性,对于开发者来说,开发效率也高于其它的 Web 框架,在企业中的应用越来越广泛,成为主流的 MVC 框架。
一个好的框架要减轻开发者处理复杂问题的负担,内部有良好的扩展,并且有一个支持它的强大用户群体,恰恰 Spring MVC 都做到了。
2. 创建 Maven Webapp 项目
本文将在 Windows 下使用 IntelliJ IDEA 和 Apache Maven 创建一个简单的 Maven Webapp 程序。在开始之前,确保已经正确搭建了 Spring 开发环境,参考 “ Spring基础知识(1)- Spring简介、Spring体系结构和开发环境配置 ”。
Windows版本 : Windows 10 Home (20H2)
IntelliJ IDEA:Community Edition for Windows 2020.1.4
Apache Maven:3.8.1
1) 在 IDEA上创建 Maven Webapp 项目
(1) 运行 IDEA
点击菜单 New 创建 Project:
New Project -> Project Type: Maven -> Project SDK: 1.8 -> Check "Create from archtype" -> select "org.apache.maven.archtypes:maven-archtype-webapp" -> Next
Name: SpringmvcBasic
GroupId: com.example
ArtifactId: SpringmvcBasic
-> Finish
(2) 生成的项目目录结构和文件
|-- src
| |-- main
| |-- webapp
| |-- WEB-INF
| | |-- web.xml
| |-- index.jsp
|
|-- pom.xml
(3) index.jsp 代码
Hello World!
(4) web.xml 代码
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
(5) pom.xml 代码
1 <?xml version="1.0" encoding="UTF-8"?> 2"http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 4.0.0 5 6com.example 7SpringmvcBasic 81.0-SNAPSHOT 9war 10 11SpringmvcBasic Maven Webapp 12 13http://www.example.com 14 1516 20 21UTF-8 171.7 181.7 1922 29 3023 28junit 24junit 254.11 26test 2731 40SpringmvcBasic 3233 3934 35 ... 36 37 38
2) 使用 tomcat7-maven-plugin, 将 tomcat 内嵌运行
(1) 修改 pom.xml
12 3 164 155 14org.apache.tomcat.maven 6tomcat7-maven-plugin 72.2 89 13/ 109090 11UTF-8 12
*注: path 是项目访问路径, 如果配置为/aa,则访问路径为 http://localhost:9090/aa 。
(2) 配置运行
Run -> Edit configurations -> Click "+" -> Select "Maven"
Command line: clean tomcat7:run
Name: SpringmvcBasic [clean,tomcat7:run]
Before Launch:
Click "+", select "Launch Web Browser"
Browser: default
Url: http://localhost:9090
-> OK
Run -> Run "SpringmvcBasic [clean,tomcat7:run]"
(3) 打包 War 后运行
Run -> Edit configurations -> Click "+" -> Select "Maven"
Command line: clean tomcat7:run-war
Name: SpringmvcBasic [clean,tomcat7:run-war]
Before Launch:
Click "+", select "Launch Web Browser"
Browser: default
Url: http://localhost:9090
-> OK
Run -> Run "SpringmvcBasic [clean,tomcat7:run-war]"
在 target 目录下会生成 SpringmvcBasic.war
(4) 打包 War (方式二)
View -> Tool Windows -> Maven -> SpringmvcBasic -> Lifecycle -> Clean | Package
在 target 目录下会生成 SpringmvcBasic.war
3. 配置 Spring MVC
1) 导入 servlet-api, springmvc 相关依赖包
访问 http://www.mvnrepository.com/,查询 servlet, springmvc
修改 pom.xml:
12 ... 3 4 5 6 ... 7 8 9 44 45 ... 46 4710 15 16 17javax.servlet 11javax.servlet-api 124.0.1 13provided 1418 22 23org.springframework 19spring-web 204.3.9.RELEASE 2124 28 29org.springframework 25spring-webmvc 264.3.9.RELEASE 2730 34 35org.springframework 31spring-jdbc 324.3.9.RELEASE 3336 40 41 ... 42 43org.springframework 37spring-orm 384.3.9.RELEASE 39
在IDE中项目列表 -> SrpingmvcBasic -> 点击鼠标右键 -> Maven -> Reload Project
本文选择了 springmvc 4.3.9.RELEASE 相关依赖包,servlet-api、spring-web 和 spring-webmvc 是必选项,spring-jdbc 和 spring-orm 是可选项,后期数据库操作时需要。
2) 创建 springmvc-beans.xml
在 src/main/resources (需要手动创建该目录,下同)目录下,创建 springmvc-beans.xml 文件。
1 <?xml version="1.0" encoding="UTF-8"?> 2"http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:mvc="http://www.springframework.org/schema/mvc" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 8 http://www.springframework.org/schema/mvc 9 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd 10 http://www.springframework.org/schema/context 11 http://www.springframework.org/schema/context/spring-context-4.0.xsd"> 12 13
3) 修改 web.xml
1 app PUBLIC 2 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 3 "http://java.sun.com/dtd/web-app_2_3.dtd" > 4 56 Springmvc Basic 7 8 910 18springMVC 11class>org.springframework.web.servlet.DispatcherServlet class> 1213 16contextConfigLocation 14classpath:springmvc-beans.xml 151 1719 22springMVC 20/ 21
4) 创建 View
View 是指 JSP 文件,JSP文件一般都在 webapp 目录或子目录下,这里配置的路径是 src/main/webapp/WEB-INF/jsp/,中间路径如果不存在,自行创建(下同)。
创建 src/main/webapp/WEB-INF/jsp/demo.jsp 文件,代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %> 2 3 4 "Content-Type" content="text/html; charset=UTF-8"> 5Demo 6 7 8Demo Page
910
Message: ${message}
11 12
5) 创建 Controller
Controller 是指 Controller 类文件,这里的路径是 src/main/java/com/example/controller,中间路径如果不存在,自行创建(下同)。
(1) 创建 src/main/java/com/example/controller/TestController.java 文件,代码如下:
1 package com.example.controller; 2 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse; 5 import org.springframework.ui.ModelMap; 6 import org.springframework.web.servlet.ModelAndView; 7 import org.springframework.web.servlet.mvc.Controller; 8 9 public class TestController implements Controller { 10 public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) { 11 ModelMap modelMap = new ModelMap(); 12 modelMap.addAttribute("message", "Spring MVC Demo Page"); 13 return new ModelAndView("/WEB-INF/jsp/demo.jsp", modelMap); 14 } 15 }
这里的 Controller 接口仅仅定义了一个方法 handleRequest()用于负责处理客户请求,并返回适当的模型和视图,即一个 action 对应于一个 Controller。
Spring 有一个多 action 控制器 MultiActionController,可以将多个 action 聚合在同一个控制器之内,实现功能集成,放在后期的文章里讲解。
(2) 把 Controller 配置到 springmvc-beans.xml
修改 src/main/resources/springmvc-beans.xml
12 ... 3 4 5 "/demo" class="com.example.controller.TestController"/> 6 7 ... 8
6) 运行
跳转到第 2 步的 “使用 tomcat7-maven-plugin, 将 tomcat 内嵌运行”,运行程序。
访问 http://localhost:9090/demo ,页面输出:
Demo Page
Message: Spring MVC Demo Page