Spring MVC框架:第一章:SpringMVC概述及初步體會(huì)SpringMVC使用過(guò)程
第一節(jié) SpringMVC在知識(shí)體系中的坐標(biāo)
在我們學(xué)習(xí)框架知識(shí)以前,JavaSE+JDBC+JavaWeb+SQL這樣的技術(shù)組合已經(jīng)可以實(shí)現(xiàn)任何業(yè)務(wù)邏輯了。為什么還要學(xué)習(xí)SSM這樣的框架呢?
很簡(jiǎn)單,MyBatis是對(duì)JDBC的封裝,而SpringMVC是對(duì)JavaWeb的封裝。
其中JavaWeb和SpringMVC提供了表述層(或稱(chēng)表示層)的解決方案,而JDBC和MyBatis是持久化層的解決方案。那Spring到哪去了?Spring中的IOC容器為我們的整個(gè)項(xiàng)目管理組件,而我們配置的各種bean、切面類(lèi)、事務(wù)通知等等其實(shí)都是在容器中工作的組件,我們開(kāi)發(fā)人員的任務(wù)其實(shí)就兩件事:開(kāi)發(fā)組件、組裝組件。
第二節(jié) 使用SpringMVC前后代碼的對(duì)比
使用原生ServletAPI獲取請(qǐng)求參數(shù):
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName = request.getParameter(“userName”);
System.out.println(“userName=”+userName);
}
使用SpringMVC獲取請(qǐng)求參數(shù):
@RequestMapping("/user/login")
public String login(@RequestParam(“userName”) String userName){
System.out.println(“userName=”+userName);
return “result”;
}
這僅僅是其中一個(gè)例子,使用SpringMVC后確實(shí)大大簡(jiǎn)化了表述層開(kāi)發(fā)。
通過(guò)這個(gè)HelloWorld,大家初步體會(huì)SpringMVC使用過(guò)程中的總體流程。
第一步 創(chuàng)建DynamicWebProject項(xiàng)目
第二步 導(dǎo)入jar包
commons-logging-1.1.3.jar
spring-aop-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
第三步 在web.xml中配置SpringMVC的前端控制器:DispatcherServlet
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<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>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
第四步 在src目錄下創(chuàng)建Spring配置文件spring-mvc.xml并指定自動(dòng)掃描的包
<context:component-scan base-package="com.mvc.controllers"/>
注意:Spring配置文件的文件名必須和web.xml中classpath:后一致,否則將無(wú)法找到。
第五步 在自動(dòng)掃描的包下創(chuàng)建類(lèi)HelloHandler
import org.springframework.stereotype.Controller;
@Controller
public class HelloHandler {
}
第六步 在HelloHandler類(lèi)中聲明一個(gè)方法用來(lái)處理請(qǐng)求
@RequestMapping("/hello")
public String hello() {
System.out.println(“SpringMVC處理了這個(gè)請(qǐng)求!”);
return “/WEB-INF/pages/result.jsp”;
}
第九步 訪問(wèn)測(cè)試
控制臺(tái)輸出:
SpringMVC處理了這個(gè)請(qǐng)求!
看看其它類(lèi)似的項(xiàng)目,相比對(duì)SpringMVC使用過(guò)程中的總體流程有所了解了吧
疑問(wèn) url-pattern中為什么是“/”而不是“/*”?
SpringMVC在url-pattern的配置中支持兩種風(fēng)格
REST風(fēng)格:
/
擴(kuò)展名風(fēng)格:
*.action
以“/”開(kāi)頭的路徑會(huì)被認(rèn)為是REST風(fēng)格,而“/*”的寫(xiě)法是不符合REST風(fēng)格規(guī)范的。只有在SpringMVC這里有映射“/”的情況,其他地方一切照舊。