Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架,即便用了MVC架構模式的思想,將web層進行職責解耦,基於請求驅動指的就是使用請求-響應模型,框架的目的就是幫助咱們簡化開發,Spring Web MVC也是要簡化咱們平常Web開發的 Servlet進行Web開發。css
Servlet的弊端: 一、Servlet的編碼問題 請求-響應(內置編碼過濾器)前端
二、沒法自動封裝參數。(3種參數傳遞,類型的自動轉換+封裝)web
三、doXXX方法,oper=(根據自身須要任意聲明函數)spring
四、切換WEB工程的版本,Servlet配置複雜。編程
支持XML和註解 2.5 以上。設計模式
MVC 是一種著名的設計模式,特別是在 Web 應用程序領域。模式全都是關於將包含業務數據的模塊與顯示模塊的視圖解耦的。這是怎樣發生的?視圖(例如,JSP 頁面)怎樣可以與其模型(例如,包含數據的 JavaBean)解耦?記得這句格言麼?一個層次的重定向幾乎能夠解決計算機業中的全部問題。確實,在模型和視圖之間引入重定向層能夠解決問題。此重定向層是控制器。控制器將接收請求,執行更新模型的操做,而後通知視圖關於模型更改的消息。依賴於模型的狀態而且依賴於請求的控制器能夠決定要顯示哪一個視圖。spring-mvc
一、清晰的角色劃分:前端控制器(DispatcherServlet)、請求處處理器映射(HandlerMapping)、處理器適配器(HandlerAdapter)、視圖解析器(ViewResolver)、處理器或頁面控制器(Controller)、驗證器( Validator)、表單對象(Form Object 提供給表單展現和提交到的對象就叫表單對象)。架構
2、因爲命令對象就是一個POJO,無需繼承框架特定API,可使用命令對象直接做爲業務對象;mvc
3、和Spring 其餘框架無縫集成,是其它Web框架所不具有的;app
4、可適配,經過HandlerAdapter能夠支持任意的類做爲處理器;
5、可定製性,HandlerMapping、ViewResolver等可以很是簡單的定製;
6、功能強大的數據驗證、格式化、綁定機制;
7、利用Spring提供的Mock對象可以很是簡單的進行Web層單元測試;
8、本地化、主題的解析的支持,使咱們更容易進行國際化和主題的切換。
9、RESTful風格的支持、簡單的文件上傳、約定優於配置的契約式編程支持、基於註解的零配置支持等等。
MVC (Model-View-Controller):
public class XmlController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { ModelAndView mv=new ModelAndView(); mv.addObject("name","張三"); mv.setViewName("/index"); return mv; } }
<servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--讀取spring-mvc.xml文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
<bean id="/xmlController" class="com.springmvc.controller.XmlController"></bean>
<body> <H1>Hell SpringMVC</H1> </body>
@Controller //標識該類爲一個控制器 public class HelloWorldController{ @Autowired InvoicingService invoicingService; //RequestMapping設置處理器方法與用戶請求的URL直接的映射關係 @WebServlet @RequestMapping("/hello") public String toIndex(){ return "index"; } }
<servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--讀取spring-mvc.xml文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!--spring和MyBatis整合的核心配置--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:application-*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
<!--推薦使用註解方式--> <!--配置視圖解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="jsp/"></property> <!--return "index"======>/jsp/index.jsp--> <property name="suffix" value=".jsp"></property> </bean> <!--開啓MVC的註解配置--> <mvc:annotation-driven/> <!--包掃描器:掃描 MVC中的註解--> <context:component-scan base-package="com.springmvc"/> <bean id="/xmlController" class="com.springmvc.controller.XmlController"></bean> </beans>
<body> ${name} <H1>Hell SpringMVC</H1> </body>
<!--利用DefaultServlet放行資源-->
<mvc:default-servlet-handler/>
<!--從spring3.0.4版本提供資源放行方式--> <mvc:resources mapping="/**" location="/img"/>
<!--基於DefaultServlet:默認訪問前會執行DefaultServlet--> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping>