回顧Java平臺上Web開發歷程來看,從Servlet出現開始,到JSP繁盛一時,然後是Servlet+JSP時代,最後演化為現在Web開發框架盛行的時代。一般接觸到一個新的Web框架,都會想問這個框架優勢在哪?或者比其他框架好在哪裡?如果沒有使用Spring MVC框架,而是使用其他框架並且能夠很 ...
回顧Java平臺上Web開發歷程來看,從Servlet出現開始,到JSP繁盛一時,然後是Servlet+JSP時代,最後演化為現在Web開發框架盛行的時代。一般接觸到一個新的Web框架,都會想問這個框架優勢在哪?或者比其他框架好在哪裡?如果沒有使用Spring MVC框架,而是使用其他框架並且能夠很好地滿足要求,這樣轉換框架或許不是一個好主意。如果像我這樣首次接觸Web開發框架,Spring MVC還是值得優先考慮的。
- Web層,更確切說是在框架處理器方面,Spring MVC對請求處理期間涉及的各種關註點進行了合理而完全的分離,並明確設置了響應的角色用於建模並處理整個聲明周期中的各個關註點。其中包括:HandlerMapping用於處理Web請求與具體請求處理控制器的映射關係;LocaleResolver用於國際化處理;ViewResolver用於靈活的視圖選擇。
- 從表現層來看,Spring MVC用了邏輯命名視圖策略,通過引入ViewResolver和View,清晰分離了視圖策略的選擇和渲染與具體控制器之間的耦合,適合各種視圖技術很容易集成到Spring MVC中,不管是JSP/JSTL作為視圖技術,還是Velocity/FreeMarker,甚至是PDF/Excel等二進位格式視圖形式,使用它們,只需要簡單的配置。
- Spring MVC還有另一個特色,就是“師出名門”,作為Spring大家族中的一員,很容易得到家族中其他兄弟的支持,從IoC到AOP的支持,以及數據訪問層、事務管理層的支持等。Spring MVC屬於請求驅動的Web框架,將單一Servlet作為整個應用的Front Controller,該Servlet收到具體的Web請求後,會參考設置的映射關係,將待處理的Web請求轉發給次一級的控制器來處理。
建立Spring MVC工程
LZ的開發環境是IDEA,這幾天使用IDEA的感覺來看,IDEA整體界面比eclipse清爽,打開和關閉速度要快好多,但是好多功能還不知道在哪裡,嗚嗚嗚…
1 打開IDEA,新建工程
2 工程選擇如下所示
當然,新建工程時也可以選擇Spring – Spring MVC(這裡把Web Application也要選擇上)
3 工程命名為mvcdemo,如下所示,然後點擊finash
4 新建工程完成後,需要手動添加關聯的jar包(LZ沒有使用maven,為什麼呢,因為現在還不會…),滑鼠移動工程名處右鍵點擊Open Module Settings,添加對應的Jar包
5 最後工程整體如下所示,為了方便,把spring所有的jar包都給添加上了,還有commons-logging包。
6 配置web.xml文件和mvcdemo-servlet.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"> <display-name>Spring MVC</display-name> <servlet> <servlet-name>mvcdemo</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvcdemo</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
以上是web.xml文件,DispatcherServlet作為整個應用的Front Controller,其用來處理所有請求,而不能像“一個Web請求對應一個Servlet”那樣獲取Web容器對URL映射匹配的支持,而只好自己處理具體的Web請求和具體的處理類之間的映射關係了,也就是需要藉助於ControllerBeanNameHandlerMapping了。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- HandlerMapping 根據benaname找到對應的controller --> <bean class="org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping"/> <!-- controller 配置處理器 --> <bean name="/hello" class="com.luoxn28.hello.HelloController"/> <!-- ViewResolver 視圖解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 首碼 和 尾碼 --> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
ControllerBeanNameHandlerMapping用來處理具體的Web請求和具體的處理類之間的映射關係,而Controller(HelloController是Controller的實現類)也就是一個具體的處理類。InternalResourceViewResolver配置的是視圖解析相關信息。
7 在src文件夾下新建com.luoxn28.hello包,然後在包下新建HelloController類。
package com.luoxn28.hello; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) { String hello = request.getParameter("hello"); System.out.println("HelloController: " + hello); ModelAndView mav = new ModelAndView("hello"); mav.addObject("hello", hello); return mav; } }
8 在WEB-INF文件夾下新建hello.jsp文件,內容如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>springmvc</title> </head> <body> Spring MVC<br/> ${hello} </body> </html>
9 更改index.jsp文件如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <form action="hello" method="post"> hello:<input type="text" name="hello"/> <input type="submit" value="提交"/> </form> </body> </html>
10 至此,整個工程建立完畢,現在的工程視圖如下:
然後滑鼠移動工程名處右鍵點擊Open Module Settings,進行配置,在Modules下添加Spring,選擇Spring Application Context為WEB-INF下的mvc-demo-servlet.xml,如下圖所示:
點擊Artifacts,下麵有提示信息,點擊Fix...按鈕,如下所示:
一切設置完畢後,點擊啟動按鈕,顯示畫面如下所示:
隨便輸入一串字元串後點擊提交,比如輸入"luoxn28",最後會跳轉到如下界面,到此整個工程結束。
參考資料