1. 程式人生 > >SpringMVC入門筆記

SpringMVC入門筆記

ring1 但是 sql efault 數據 比較 prefix scan 答案

SpringMVC入門筆記

1. 簡介

Spring MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架 ,是Spring系開源項目中的一個,和IoC配合使用。通過策略接口,Spring框架是高度可配置的,而且支持多種視圖技術。Spring分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓他們更容易進行定制。Spring MVC解決的問題如下:

  • 將web頁面的請求傳給服務器;
  • 根據不同的請求處理不同的邏輯單元;
  • 返回處理結果數據並跳轉至響應頁面;

通過下面這樣圖可以看到Spring MVC在Spring全家桶中的位置:

技術分享圖片

2. Spring MVC實例

現在總結一下搭建一個完整SpringMVC的步驟,期間遇到了很多坑,404的問題坑了好久,先來記錄一下成功的搭建步驟,後面附上源碼。本文使用eclipse(Version: Photon Release (4.8.0))搭建SpringMVC。

2.1 新建maven工程

新建一個maven project。

技術分享圖片

技術分享圖片

技術分享圖片

新建好的工程結構應該是這樣的:

│  .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

2.2 添加pom依賴

既然是SpringMVC工程,肯定要添加SpringMVC的包,可以去http://mvnrepository.com/查找,除了SpringMVC還需要添加javax.servlet的包。搞不懂為什麽網上很多教程都添加了spring的bean,aop,core這些基礎包,這些基礎包已經被springmvc依賴了,已經包含進來了,就不用再pom文件手動依賴了。

pom.xml

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

2.3 配置web.xml

在web.xml中需要添加使用的servlet和映射規則。

web.xml

<!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>

2.4 新建springmvc-servlet.xml文件

在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>

2.5 新建頁面jsp文件

在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>

2.6 新建controller控制類

在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";
    }

}

2.7 編譯打包

進入到項目的根目錄下(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屬性)

技術分享圖片

2.8 關於404問題的坑

在搭建工程的時候,訪問頁面顯示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。

源碼:https://github.com/WangJun-SCU/LearnSpringMVC

3. SSH個SSM兩個框架的區別

SSH(Spring,Struts,Hibernate)和SSM(Spring,SpringMVC,MyBatis)的區別其實就是SpringMVC和Struts,Hibernate和MyBatis的區別。

3.1 SpringMVC和Struts的區別

  1. Struct和Spring-MVC都是負責取轉發的,但是兩者針對request的請求上面區別很大,Struct是針對一個Action類來進行請求的,即一個Action類對應於一個請求,所以類攔截,請求的數據類共享。而Spring-MVC則是針對於方法級別的請求的,也就是一個方法對應於一個請求,屬於方法攔截,請求的數據方法不共享。
  2. Spring-MVC的配置文件相對來說較為少,容易上手,可以加快軟件開發的速度。
  3. Spring-MVC的入口是Servlet級別的而Struct的級別是Filter級別的。

3.2 Hibernate和MyBatis的區別

  1. Hibernate是一種O/R關系型,即完成數據庫表和持久化類之間的映射,而MyBitas是針對的SQL-Mapping,Hibernate把數據庫給封裝好以後,可以調用相應的數據庫操作語句SQL,而MyBitas則是用的原始的數據庫操作語句。基於此原因,Hibernate優化起來相對MyBitas較難。
  2. MyBitas入門較快,而Hibernate掌握起來相對較難。
  3. 針對高級查詢,Mybatis需要手動編寫SQL語句,以及ResultMap。而Hibernate有良好的映射機制,開發者無需關心SQL的生成與結果映射,可以更專註於業務流程。
  4. Hibernate數據庫移植性很好,MyBatis的數據庫移植性不好,不同的數據庫需要寫不同SQL。

3.3 總結:

SSH很笨重,現在除了一些老系統,很少有人使用SSH了,SSM則是現在的主流,當前還有SpringBoot,SpringCloud微服務這些。

參考:

https://www.cnblogs.com/ysocean/p/7375405.html

https://blog.csdn.net/horero/article/details/54236833

SpringMVC映射的前端後臺數據交互總結:https://blog.csdn.net/xiansky2015/article/details/79050772

基於註解的入門實例:https://www.cnblogs.com/ysocean/p/7400987.html

SpringMVC入門筆記