一、新建項目
1、打開idea工具,選擇新建項目file-> new -> project。選擇maven,選擇項目jdk的版本,我這里使用的是1.8(截圖是1.7),在右邊的選擇框勾選create from archetype,并選擇相應的選項,如下圖,選擇好后next:

2、這里需要填寫GroupId和ArtifactId還有Version,這三個屬性目的是標識你的項目的唯一性,比如Jetty的GroupId是org.eclipse.jetty,即它是eclipse組織的項目,ArtifactId是jetty-server,項目名為jetty-server,而我當前使用的Version是9.4.0.v20161208。這些只在發(fā)布時有用,在此可以隨便填寫,填好后點Next:
3、 打開Maven home directory,可以發(fā)現(xiàn)IntelliJ IDEA已經(jīng)集成了Maven 2和Maven 3兩個版本,也會顯示本地的maven版本,這里我們選擇自己安裝的maven版本,點擊Next。
4、填寫項目名稱以及項目保存路徑,點finish完成項目創(chuàng)建。
5、finish后,maven會在后臺生成web項目,這需要等待一定的時間,視網(wǎng)絡環(huán)境而定,經(jīng)驗發(fā)現(xiàn)用較新版本的maven項目生成更快,使用IDEA集成的maven可能會等待很長一段實踐。
下圖就是一個項目的初始架構(gòu)(正在初始化中),紅框1是項目的文件架構(gòu),因為正在初始化所以文件架構(gòu)還不完整;紅框2是控制臺,根據(jù)顯示的信息可以知道此時正在創(chuàng)建maven項目;紅框3是一個maven編譯選項,選擇Enable-Auto-Import的話之后每次修改maven的配置文件pop.xml項目都會自動導入jar包(不會再次詢問),有些同學可能選了這項之后以后可能會出現(xiàn)項目比較卡頓的情況,所以現(xiàn)在暫時先建議選擇第一個,導入更改項,這個就是每次修改完pop.xml文件項目會詢問是否導入jar包。只要修改了pop.xml文件就會出現(xiàn)這個提示,所以這里可以隨便選一個。
maven項目生成完畢后,整個的項目架構(gòu)如下圖。稍微了解一點web項目的同學就會知道每個文件夾的作用啦,在這我就不做講解。
此時可能有同學會有疑問了,怎么和以前的項目不一樣呀,沒有Java這個文件夾了。是的,現(xiàn)在是沒有存放Java源代碼的文件夾,所以我們需要手動創(chuàng)建一個:
按ctrl+alt+shift+s,或者File->Project Structure查看一下項目結(jié)構(gòu),檢查是否設(shè)置正確。
確認沒問題后選擇modules,在main文件夾上右鍵選擇新建文件夾,命名為Java(這個命名隨意)
現(xiàn)在創(chuàng)建的Java文件還只是一個普通的文件夾,需要把他設(shè)置成源文件夾,選中Java文件夾,再選擇上方的source即可,設(shè)置完畢后右邊的項目架構(gòu)也會隨著改變
至此,一個web應用的初始化工作以及完成!
二、Maven自動導入jar包
基于maven管理的項目現(xiàn)在我們已經(jīng)創(chuàng)建完畢,現(xiàn)在需要通過maven導入項目所需的jar包。Maven的好處在于我們不需要再去網(wǎng)絡上一個一個找jar包,只需要把需要用的jar包名稱以及版本號在配置中標注,Maven就會自動從他的jar包倉庫中下載,相關(guān)的配置在里面也有demo,只要把對應jar包的demo復制到項目的pop.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>org.yuanxin</groupId>
<artifactId>InfoSpringMVC</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>InfoSpringMVC Maven Webapp</name>
<url>http://maven.apache.org</url>
<!--設(shè)定jar包版本-->
<properties>
<spring.version>4.3.2.RELEASE</spring.version>
<mybatis.version>3.3.0</mybatis.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!--springMVC需要的jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!--mybatis所需jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--數(shù)據(jù)庫jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
<build>
<finalName>InfoSpringMVC</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!--jetty插件-->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<stopPort>9988</stopPort>
<stopKey>foo</stopKey>
<scanIntervalSeconds>5</scanIntervalSeconds>
<connectors>
<!--<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">-->
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8088</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
<webAppConfig>
<contextPath>/</contextPath>
<defaultsDescriptor></defaultsDescriptor>
</webAppConfig>
</configuration>
</plugin>
</plugins>
</build>
</project>
配置完成后,左下角會彈出一個信息,是否導入pop.xml更改項;如果沒有彈出,也可以點擊右邊的maven更新,這樣maven就會導入jar包:
jar包導入完成后,在左邊的文件架構(gòu)中可以查看:
至此,項目所需的jar包也就全部導入進來了。此時可以檢查一下右邊的項目架構(gòu)中,插件(Plugins)中是否有jetty插件,如果有則可以使用jetty。
三、配置SpringMVC框架環(huán)境
1、配置spring-xxxx.xml(名字任取) 在項目resources文件夾下新建一個xml文件,命名為spring-springmvcConfig.xml,這個文件名稱可以任取。新建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: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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
</beans>
spring mvc框架從名稱上就可以知道,他和其他的MVC框架結(jié)構(gòu)類似。由三部分組成:model、views、controller,model一般就是一些基本的Javabean,views部分就是頁面部分,controller用于處理一些請求。在xml配置中,我們可以配置指定controller所處的包,讓系統(tǒng)自動掃描該包下的所有controller,
<!--指明 controller 所在包,并掃描其中的注解-->
<context:component-scan base-package="com.promonkey.controller"/>
如果我們使用注解實現(xiàn)的話還需要開啟注解配置:
<!--開啟注解-->
<mvc:annotation-driven/>
配置完controller后開始配置views層,下面配置視圖解析器:
<!--關(guān)于controller如何找到視圖文件,這里需要詳細的說明。在 controller 的一個方法中,返回的字符串定義了所需訪問的jsp的名字(如上面的index)。在jspViewResolver中,有兩個屬性,一個是prefix,定義了所需訪問的文件路徑前綴,另一是suffix,表示要訪問的文件的后綴,這里為 .jsp。那么,如果返回字符串是 xxx ,SpringMVC就會找到 /WEB-INF/pages/xxx.jsp 文件。-->
<!--ViewResolver 視圖解析器-->
<!--用于支持Servlet、JSP視圖解析-->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
在web項目中我們需要經(jīng)常訪問一些靜態(tài)文件,例如js、img、css等,
<!-- 靜態(tài)資源(js、image等)的訪問 -->
<mvc:default-servlet-handler/>
完整配置如下:
<?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: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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="org.jason.controller"/>
<mvc:annotation-driven/>
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".html"/>
</bean>
<mvc:default-servlet-handler/>
</beans>
2、配置web.xml 做過web項目的童鞋都知道,web項目有一個祖宗,必須要進行配置,那就是web.xml。打開項目中src\webapp\WEB/INF\web.xml,web.xml的版本可自行更新:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
</web-app>
在web.xml文件中先導入我們之前寫好的配置文件,不然系統(tǒng)會找不到springmvc的框架配置文件:
<!--Loads Spring Security config file-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-springmvcConfig.xml</param-value>
</context-param>
配置一個監(jiān)聽器:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
配置servlet并指定配置文件,用于攔截請求,這里用的/,意思是攔截所有請求,將攔截下來的請求交給controller處理(這一步在上面配置spring-springmvc.xml時已經(jīng)配置了,請求攔截下來后如何處理):
<!-- Spring MVC -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-springmvcConfig.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
很多同學會遇到一個情況,那就是中文亂碼。所以這里再配置一個編碼過濾器,避免處理一些請求時出現(xiàn)中文亂碼:
<!--配置字符編碼過濾器-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value> </init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
現(xiàn)在我們所有的配置都已經(jīng)完成了,接下來就是實現(xiàn)一些業(yè)務邏輯代碼
四、Controller-控制器
在src/main/Java目錄下建立包目錄com.promonkey.controller(這里的路徑要和spring-xxxx.xml文件中掃描controller指定的路徑一致)。創(chuàng)建完包目錄就新建一個Java文件,命名為MainController。
package com.promonkey.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Created by Promonkeyon 2017/1/16.
* * @Controller注解:采用注解的方式,可以明確地定義該類為處理請求的Controller類;
*/
@Controller
public class MainController {
/**
* @return 處理完該請求后返回的頁面,此請求返回 index.jsp頁面
* @RequestMapping()注解:用于定義一個請求映射,value為請求的url,值為 /
說明,該請求首頁請求,method用以指定該請求類型,一般為get和post;
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
return "index";
}
}
關(guān)于一些注解的說明:
(1)@Controller注解:采用注解的方式,可以明確地定義該類為處理請求的Controller類;
(2)@RequestMapping()注解:用于定義一個請求映射,value為請求的url,值為 / 說明,該請求首頁請求,method用以指定該請求類型,一般為get和post;
(3)return "index":處理完該請求后返回的頁面,此請求返回 index.jsp頁面。這里返回index,結(jié)合上面配置spring-xxxx.xml中的視圖解析器,即可跳轉(zhuǎn)到index.jsp頁面五、運行jetty服務器點開右側(cè)的項目,選擇jetty run 雙擊或者點擊上面的啟動按鈕即可啟動jetty服務器。