SpringMVC環境搭建(一)
Spring MVC為展現層提供的基於MVC設計理念的優秀Web框架,是目前最主流的MVC框架之一。
Spring 3.0之後完全超越Struts2,稱為最優秀的MVC框架。學完SpringMVC之後,瞬時間就能讓你感到Struts2帶給你的殘酷。
Spring MVC通過一套MVC註解,讓POJO稱為處理請求的控制器,無需實現任何介面,耦合度低。
並且Spring MVC對rest風格很好的支援。。
利用了鬆散的耦合可拔插元件結構,比其他MVC框架更具擴充套件性和靈活性。
搭建Spring MVC環境
1)基於介面方式搭建MVC環境。實現Controller介面實現MVC
2)基於註解方式,在Spring3.0以後的版本中,使用註解極大的簡化了傳統的MVC配置,靈活性與可維護性得到了大大的提高哦。
實現SpringMVC步驟,第一個肯定是要到入對應jar包啦
然後就是和Struts2一樣在Web.xml配置一個核心控制器。用於攔截請求。
<!-- 配置SpringMVC的請求的Servlet --> <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:applicationContext.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>
看到這裡是不是感到很熟悉,只不過比Struts2多了幾行而已。init-param是初始化要載入的spring檔案,如果有多個可以使用逗號隔開
load-on-startup 在啟動的時候立馬載入。 <url-pattern>/</url-pattern>攔截所有的請求。(同時css,js也會被攔截);
然後我們寫個Controller
package com.miya.spring.mvc.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/Miya") public class MiyaHelloController { @RequestMapping("/hello") public String hello(){ System.out.println("hello Miya"); return "/hello"; } }
@Controller這個註解不用多說吧,宣告一個控制器。
@RequestMapping定義在類上面是宣告一個空間。在方法上面是宣告一個請求路徑
返回一個字串你要訪問的路徑這個路徑在哪裡呢?
<context:component-scan base-package="com.miya.spring.mvc"/> <!-- 檢視解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 字首 --> <property name="prefix" value="/WEB-INF/views"/> <!-- 字尾 --> <property name="suffix" value=".jsp"/> </bean>
在我們Spring XML的配置中,我們首先掃描所有的註解,然後配置了一個試圖解析器。
當我們返回那個hello的時候,它是 prefix + result(hello) +suffix 去訪問我們的檢視。
現在我們在index.jsp直接跑一個試試。
<% response.sendRedirect(request.getContextPath() + "/Miya/hello"); %>
request.getContextPath()拿到的是你的web專案的根路徑,就是webContent(MyEclipse中是webRoot)。然後現在可以看到我們的名稱空間Miya後面跟裡面定義的方法請求路徑
hello。我們最終訪問後的地址http://localhost:8080/SpringMvcDemo1/Miya/hello 訪問到的是WEB-INF/views/hello.jsp這個檔案。而且這個請求還是個rest風格請求。
到了這裡會發現比Struts2方便的多,Struts2每次配置請求都要去Struts2中配置action啊什麼什麼的一大堆,並且有的時候sturts檔案中幾千行,老眼昏花找個請求都要找半個小時。
我們還有一個實現方式就是實現Spring提供的Controller介面重寫接口裡面的方法。
package com.miya.spring.mvc.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class MiyaWordController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("/hello"); return modelAndView; } }
ModelAndView中可以設定檢視,我設定的還是hello這個,然後我們需要在spring XML中配置一個bean,name是請求路徑,class是指定控制器類
<bean name="/Miya/word" class="com.miya.spring.mvc.controller.MiyaWordController"></bean>
注意:我們在專案中攔截了所有的請求,會導致圖片,樣式,JS都報404,我們可以在spring XML中引入外部資原始檔,而且這種實現介面的方式造成耦合度太高,而且每一個功能都需要寫上一個類,導致我們程式碼的臃腫,所以還是推薦使用註解方式,註解目前是非常流行,並且很多框架都支援註解方式,並且語法簡單,方便使程式碼簡潔。
<!-- 引入外部樣式 --> <mvc:resources location="/css/" mapping="/css/**"></mvc:resources>