springmvc IDEA,springmvcidea
回顧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",最後會跳轉到如下介面,到此整個工程結束。
參考資料
1、Spring MVC從入門到精通視頻教程