本程序是一個maven程序,使用maven方便管理jar包和程序,簡化了操做步驟。本程序的目的是經過一個簡單的程序,瞭解Spring MVC框架的基本工做流程,由簡入繁的學習Spring MVC框架,而不是直白無聊的理論知識堆積。html
新建的maven項目通常會報這個錯誤,錯誤的緣由也很簡單,右擊項目–>Properties–>Java Build Path–>Libraries–>Add Library–>Server Runtime 選擇一個服務器便可,點擊Finish。此時項目應該不會報錯,下圖就是正常狀況下的maven項目列表
java
即使是使用註解的方式,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,以下圖所示: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;
}
在上面咱們提到的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 學習也是具備鼓勵做用。若是你們遇到什麼問題,能夠再評論中指出,你們共同窗習探討。