使用Intellij Idea建立第一個SpringMVC工程
研究生入學跟老師做專案,之前沒有接觸過Spring,在看了近一個月的教學視訊後,發現也就那麼點東西,在這裡總結回顧一下,算是對Spring進行一下鞏固。順便推薦一下使用IDEA進行開發,我之前都是用Eclipse,可是轉到IDEA上之後簡直對它愛不釋手,我反正以後寫Java 都不會再用Eclipse和MyEclipse了
一、Spring MVC 架構
Spring Web MVC和Struts一樣都是表現層的框架,它是Spring的框架的一部分,可以視其為Spring的一個模組。Spring Web MVC的架構如下圖所示:
對上圖中元件的說明:
- DispatcherServlet(前端控制器):DispatcherServlet是整個流程控制的中心,由它呼叫其它元件處理使用者的請求,DispatcherServlet的存在降低了元件之間的耦合性。
- HandlerMapping(處理器對映器):HandlerMapping負責根據使用者請求找到Handler即處理器,springmvc提供了不同的對映器實現不同的對映方式,例如:配置檔案方式,實現介面方式,註解方式等,推薦使用註解開發。
- Handler(處理器):Handler 是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的使用者請求進行處理。由於Handler涉及到具體的使用者業務請求,所以一般情況需要程式設計師根據業務需求開發Handler。
- HandlAdapter(處理器介面卡):通過HandlerAdapter對處理器進行執行,這是介面卡模式的應用,通過擴充套件介面卡可以對更多型別的處理器進行執行。
- ViewResolver(檢視解析器):View Resolver負責將處理結果生成View檢視,View Resolver首先根據邏輯檢視名解析成物理檢視名即具體的頁面地址,再生成View檢視物件,最後對View進行渲染將處理結果通過頁面展示給使用者。
Spring MVC Demo
根據對Spring MVC的架構分析,如果我們想要完成一個應用Spring MVC的專案,就必須要在配置檔案中進行配置,只要完成了配置,開發就相對容易了。
這次要實現的一個Demo只是一個Hello World級別的SpringMVC入門程式,實現表單提交使用者姓名,然後再轉向另一個JSP。
工程目錄結構:
Spring元件的配置:
1.在web.xml中配置前端控制器:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!--
載入Spring容器,不建議直接使用applicationContext.xml,而應根據分類另外建立配置檔案
-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--
配置前端控制器
這裡配置的前端控制器的名字叫dispatcher,SpringMVC預設會載入同目錄下的dispatcher-servlet.xml
這裡為了便於分層管理,不使用dispatcher-servlet.xml,而是自己寫一個springmvc.xml,用contextConfigLocation
指定SpringMVC的載入位置。
要求:spring資料夾的上一層資料夾必須mark為“Resources Root”,同時注意如果一個資料夾一旦配置為“Resources Root”
其下的配置資料夾都是可以直接寫在路徑中的,具體檢測方式看能否直接開啟
springmvc.xml中配置了
1、處理器對映器和處理器介面卡
2、處理器
3、檢視解析器
使用RESTful格式的話,將<url-pattern>標籤中的“*.action”變為“/”
-->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!--配置編碼-->
<filter>
<filter-name>CharacterEncodingFilter</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>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2.Spring預設是在”前端控制器name-servlet.xml”中進行配置,但這裡為了後期便於擴充套件,將其放到springmvc.xml中配置,在該配置檔案中我們會配置對映器,介面卡,處理器和檢視解析器。其中處理器採用註解方式。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!--
配置處理器對映器和處理器介面卡
使用<mvc:annotation-drvier/>配置註解對映器和註解介面卡
-->
<mvc:annotation-driven/>
<!--
配置處理器
使用<context:component-sacn/>元件掃描器自動掃描包中標記為@Controller的註解類,
注意:多個包中間使用半形逗號分隔
要求:base-package對應的包中應該是controller包
-->
<context:component-scan base-package="cn.michael.controller"/>
<!--
配置檢視解析器
要求:
1、配置解析JSP的檢視解析器,預設使用JSTL,因此classpath下需要有JSTL的包
2、根據字首和字尾,在WEB-INF目錄下要有pages目錄,其中存放jsp檔案
-->
<bean 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>
</beans>
3.檢視及Controller的編寫
經過在web.xml和springmvc.xml中的配置,我們已經完成了Spring元件的配置。下面編寫檢視及必要的控制器,因為是入門程式,只有一個控制器(FirstController),兩個JSP:index.jsp和showName.jsp,其資料流動是:index.jsp—> FirstController —> showName.jsp。
index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>SpringMVC_Demo</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/views/showName.action" method="post" >
<input name="username" type="text">
<input type="submit" value="提交">
</form>
</body>
</html>
FirstController:
package cn.michael.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/views")
public class FirstController {
@RequestMapping("/showName")
public ModelAndView showName(String username){
System.out.println (username);
ModelAndView modelAndView = new ModelAndView ();
modelAndView.addObject ("username", username);
modelAndView.setViewName ("showName");
return modelAndView;
}
}
showName.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>使用者姓名</title>
</head>
<body>
<c:choose>
<c:when test="${username != null}">
使用者姓名是:${username}
</c:when>
<c:otherwise>
沒有接收到使用者姓名
</c:otherwise>
</c:choose>
</body>
</html>
## 三、工程原始碼下載及注意 ##
工程原始碼下載:SpringMVCDemo
- 任何一個框架,入門的難點在於配置檔案的配置。
- 多多實踐,一定要學會如何去Debug,會用搜索引擎!!!
- 千萬不要忽視每一個細節。
ps:在學習過程中借鑑了別人的一些學習感悟,僅供參考,望多多指教