Spring MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架 ,是Spring系開源項目中的一個,和IoC配合使用。經過策略接口,Spring框架是高度可配置的,並且支持多種視圖技術。Spring分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓他們更容易進行定製。Spring MVC解決的問題以下:html
經過下面這樣圖能夠看到Spring MVC在Spring全家桶中的位置:前端
如今總結一下搭建一個完整SpringMVC的步驟,期間遇到了不少坑,404的問題坑了很久,先來記錄一下成功的搭建步驟,後面附上源碼。本文使用eclipse(Version: Photon Release (4.8.0))搭建SpringMVC。java
新建一個maven project。git
新建好的工程結構應該是這樣的:github
│ .classpath │ .project │ pom.xml │ ├─.settings │ .jsdtscope │ org.eclipse.jdt.core.prefs │ org.eclipse.m2e.core.prefs │ org.eclipse.wst.common.component │ org.eclipse.wst.common.project.facet.core.xml │ org.eclipse.wst.jsdt.ui.superType.container │ org.eclipse.wst.jsdt.ui.superType.name │ org.eclipse.wst.validation.prefs │ ├─src │ └─main │ ├─resources │ └─webapp │ │ index.jsp │ │ │ └─WEB-INF │ web.xml │ └─target ├─classes ├─m2e-wtp │ └─web-resources │ └─META-INF │ │ MANIFEST.MF │ │ │ └─maven │ └─com.wangjun │ └─learnSpringMVC │ pom.properties │ pom.xml │ └─test-classes
既然是SpringMVC工程,確定要添加SpringMVC的包,能夠去http://mvnrepository.com/查找,除了SpringMVC還須要添加javax.servlet的包。搞不懂爲何網上不少教程都添加了spring的bean,aop,core這些基礎包,這些基礎包已經被springmvc依賴了,已經包含進來了,就不用再pom文件手動依賴了。web
pom.xmlspring
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wangjun</groupId> <artifactId>spring1</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>spring1 Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.18.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0-b01</version> <scope>provided</scope> </dependency> </dependencies> <build> <finalName>spring1</finalName> </build> </project>
在web.xml中須要添加使用的servlet和映射規則。數據庫
web.xmlapache
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <!-- DispatcherServlet是SpringMVC框架的核心,它的做用就是講請求分發給不一樣的後端處理器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 須要和上面的servlet-name保持一致 --> <url-pattern>/</url-pattern> <!-- url的匹配規則,/ 就是匹配全部 --> </servlet-mapping> </web-app>
在web.xml同級目錄下新建springmvc-servlet.xml文件(就是在web.xml配置的servletName+servlet)。這裏面負責配置映射類和視圖適配器等。後端
springmvc-servlet.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:tx="http://www.springframework.org/schema/tx" 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 http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 註冊HandlerMapper、HandlerAdapter兩個映射類(不寫會致使404問題) --> <mvc:annotation-driven/> <!-- 下面是配置掃描包的位置,包名爲com.learnspringmvc,也就是說咱們的視圖解析器應該放在com.learnspringmvc包下 --> <context:component-scan base-package="com.learnspringmvc" /> <mvc:default-servlet-handler/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前綴,咱們的視圖文件應該放到/WEB-INF/jsp/目錄下,這裏咱們須要在WEB-INF下面建立jsp文件夾 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 設置後綴爲.jsp --> <property name="suffix" value=".jsp" /> </bean> </beans>
在WEB-INF下新建jsp文件夾,而後在jsp下新建demo.jsp
demo.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Insert title here</title> </head> <body> Hello springMVC! </body> </html>
在main文件夾下新建java文件夾,在新建HelloController.java文件,包名爲com.learnspringmvc.controllers。
package com.learnspringmvc.controllers; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; //控制器註解 @Controller @RequestMapping("/hello") public class HelloController { @RequestMapping("/showdemo") public String getString() { // 必須在配置的view路徑下存在demo.jsp,不然返回404 return "demo"; } }
進入到項目的根目錄下(pom.xml存在的文件夾),打開doc,執行mvc install
,出現BUILD SUCCESS
表示打包成功,在target文件夾下生成learnSpringMVC.war
,將此war包移動到tomcat的webapps下面,重啓服務器,訪問http://localhost:8080/learnSpringMVC/hello/showdemo:(注意:8080:後面緊跟的不是在web.xml中配置的servlet-name,而是在pom.xml中build的finalName屬性)
在搭建工程的時候,訪問頁面顯示404,困擾了好久,也在網上搜了不少答案,這是一篇質量比較高的:https://blog.csdn.net/baidu_15275441/article/details/73930961。404問題很難排查,由於並無報錯和堆棧信息,只能一個一個的排查可能的問題,寫這邊博客的時候又發現了一個致使404的緣由,就是上面2.7寫到的:8080:後面緊跟的不是在web.xml中配置的servlet-name,而是在pom.xml中build的finalName屬性。可見404問題無處不見,因爲本身對SpringMVC框架只是個小白,只能搜索加嘗試。但願後面能成爲大神級別的。這種問題都是小case。
SSH(Spring,Struts,Hibernate)和SSM(Spring,SpringMVC,MyBatis)的區別其實就是SpringMVC和Struts,Hibernate和MyBatis的區別。
SSH很笨重,如今除了一些老系統,不多有人使用SSH了,SSM則是如今的主流,當前還有SpringBoot,SpringCloud微服務這些。
參考:
http://www.javashuo.com/article/p-mkpxyeeu-gd.html
https://blog.csdn.net/horero/article/details/54236833
SpringMVC映射的前端後臺數據交互總結:https://blog.csdn.net/xiansky2015/article/details/79050772
基於註解的入門實例:http://www.javashuo.com/article/p-ekzwjudb-ea.html