Spring MVC框架下的第一個Hello World程序

       本程序是一個maven程序,使用maven方便管理jar包和程序,簡化了操做步驟。本程序的目的是經過一個簡單的程序,瞭解Spring MVC框架的基本工做流程,由簡入繁的學習Spring MVC框架,而不是直白無聊的理論知識堆積。html

新建maven項目

這裏寫圖片描述

       新建的maven項目通常會報這個錯誤,錯誤的緣由也很簡單,右擊項目–>Properties–>Java Build Path–>Libraries–>Add Library–>Server Runtime 選擇一個服務器便可,點擊Finish。此時項目應該不會報錯,下圖就是正常狀況下的maven項目列表
這裏寫圖片描述java

配置各類xml

        即使是使用註解的方式,xml這種配置文件也是少不了的,本項目中使用到的xml文件有三個:spring-mvc.xml、web.xml、pom.xml。
      (1)spring-mvc.xml
       這個是spring的核心配置文件代碼以下:web

 <?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:p="http://www.springframework.org/schema/p" 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-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自動掃描該包,使SpringMVC認爲包下用了@controller註解的類是控制器,記得換成本身的包名 --> <context:component-scan base-package="com.cn.test.controller" /> <!-- 定義跳轉的文件的先後綴 ,視圖模式配置--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 將action的方法setview()return的字符串加上前綴和後綴,變成一個 可用的url地址 --> <property name="prefix" value="/html/" /> <property name="suffix" value=".html" /> </bean>  </beans> 

    (2)pom.xml文件,這個是maven的配置文件,最主要的做用就是經過相關配置自動引入咱們所須要的jar包,代碼以下:spring

<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.cn.EPhotoAlbum</groupId>
  <artifactId>EPhotoAlbum</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>EPhotoAlbum Maven Webapp</name>
  <url>http://maven.apache.org</url>
   <properties>
        <!-- spring版本號 -->
        <spring.version>4.0.2.RELEASE</spring.version>
        <!-- mybatis版本號 -->
        <mybatis.version>3.2.6</mybatis.version>
        <!-- log4j日誌文件管理包版本 -->
        <slf4j.version>1.7.7</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!-- spring核心包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- mybatis核心包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <!-- mybatis/spring包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>
        <!-- 導入java ee jar 包 -->
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
        </dependency>

        <!-- 導入dbcp的jar包,用來在applicationContext.xml中配置數據庫 -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.2.2</version>
        </dependency>
        <!-- JSTL標籤類 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- 日誌文件管理包 -->
        <!-- log start -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <!-- 映入JSON -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>

    </dependencies>
  <build>
    <finalName>test</finalName>
  </build>
</project>

(3)web.xml數據庫

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

    <!-- 配置DispatchcerServlet -->
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 配置Spring mvc下的配置文件的位置和名稱 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <!-- 編碼過濾器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

建立Controller

        controller文件的一個標誌就是在類的前面有一個@Controller的註解,咱們建立這些類的時候,能夠先建立一個普通的類,而後在類中的類名前面加上@Controller,以下圖所示:apache

這裏寫圖片描述

       此外在SSM框架中的service層和dao層都有它們各自的標誌性註解(固然如今已經不分的那麼清楚了),如service層的@Service,dao層的@Repository,這些註解將會在之後的博文中進行介紹。
從上圖中咱們也能夠看到,緊接着@Controller的是@RequestMapping(value=」/test」),這個註解的做用就是給咱們的類標註一個訪問地址,若是它出如今一個方法的前面,那就是給一個方法添加一個訪問地址(訪問時記得帶上它所在類的訪問地址)。
controller中的方法能夠有三種返回類型ModelAndView、String和void,這幾種方法都是常常使用到的。
  (1)返回ModelAndView
        ModelAndView,裏面包含着model和view(名字起的就是這個直白),他是一個比較複雜的類,可是構造函數就有7個,今天咱們只作hello world 因此就不詳細講解了,不過如今你能夠將它理解爲一個大容器,裏面能夠放許多你想要向前臺傳遞的東西。api

@Controller
@RequestMapping(value="/test")
public class UserController {
    public ModelAndView user(){
        //新建一個ModelAndView 
        ModelAndView mv = new ModelAndView();
        //返回的html頁面的名字,對應配置文件
        mv.setViewName("hello");
        return mv;
    }
}

         上述代碼中,咱們可使用mv.setViewName(「hello」),這個方法指定咱們想要返回的頁面。
(2)返回String瀏覽器

public String userString(){
        //在這裏直接返回咱們想要返回的頁面名稱
        return "hello";
    }

        在return中就能夠直接返回咱們想要返回的頁面。
  (3)返回void
      這個最直接,就是在這個方法執行完以後,什麼都不返回,但咱們任然能夠作一些操做。spring-mvc

public void userVoid(){
        ModelAndView mv = new ModelAndView();
        //返回的html頁面的名字,對應配置文件
        mv.setViewName("hello");
    }

      我寫的上述三個方法的做用都是將頁面轉到一個名叫「hello.html」的頁面。爲了方便之後的學習咱們可使用第一中方法。注意在方法上面追加了一個註解用於訪問時做爲訪問路徑。tomcat

@RequestMapping(value="/user")
    public ModelAndView user(){
    ModelAndView mv = new ModelAndView();
        //返回的html頁面的名字,對應配置文件
        mv.setViewName("hello");
        return mv;
    }

建立html文件

   在上面咱們提到的hello.html文件將會在這裏建立,首先咱們在src–>webapp下面新建一個html文件夾,方便存放html文件,而後在html文件夾下面新建一個名叫hello.html的html文件,代碼以下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>第一個springmvc項目</title>
</head>
<body>
<h1>Hello World!!!</h1>
</body>
</html>

      就是這個簡單,由於是剛剛學習,太複雜的話容易報錯,從而下降咱們的學習熱情。
接下來就是咱們新建項目的時候自動生成的index.jsp文件,它的做用只是點擊以後就會轉向hello頁面,固然是經過controller跳轉的。
     index.jsp代碼

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<body>
<a href="/test/test/user.do">點我就變</a>
</body>
</html>

啓動項目

     至此,一個簡單的hello world程序已經完成,最後上一張項目完成以後的圖片:
這裏寫圖片描述

       啓動項目,點擊pom運行加載jar包,而後啓動tomcat服務器,在瀏覽器中輸入url,首先訪問index.jsp
http://localhost:8090/test/index.jsp

這裏寫圖片描述

         點擊「點我就變」就會跳轉到hello.html頁面,注意地址欄中的變化,這個地址就是咱們的項目名/類的註解訪問地址/方法的註解訪問地址.do(web.xml文件中的配置,能夠自行更改)
這裏寫圖片描述

總結

      到這裏咱們的第一個spring mvc也就完成了,雖然它很簡單,可是做爲一個入門的hello world程序,若是咱們可以認真完成它,對於之後的springmvc 學習也是具備鼓勵做用。若是你們遇到什麼問題,能夠再評論中指出,你們共同窗習探討。

相關文章
相關標籤/搜索