SpringMVC框架:它多厲害的簡介&&永恆的HelloWorld

簡介

先看它多厲害,不然沒興趣學

  1. Spring 爲展現層提供的基於 MVC 設計理念的優秀的 Web 框架,是目前最主流的MVC 框架之一
  2. Spring3.0 後全面超越 Struts2,成爲最優秀的 MVC 框架。
  3. Spring MVC 通過一套 MVC 註解,讓 POJO 成爲處理請求的控制器,而無須實現任何接口。
  4. 支持 REST 風格的 URL 請求。 Restful
  5. 採用了鬆散耦合可插拔組件結構,比其他 MVC 框架更具擴展性和靈活性。

結構

  1. 一種輕量級的、基於MVC的Web層應用框架。偏前端而不是基於業務邏輯層。Spring框架的一個後續產品。
  2. Spring框架結構圖(新版本):
    在這裏插入圖片描述

作用

  1. 天生與Spring框架集成,如:(IOC,AOP)
  2. 支持Restful風格
  3. 進行更簡潔的Web層開發
  4. 支持靈活的URL到頁面控制器的映射
  5. 非常容易與其他視圖技術集成,如:Velocity、FreeMarker等等
  6. 因爲模型數據不存放在特定的API裏,而是放在一個Model裏(Map數據結構實現,因此很容易被其他框架使用)
  7. 非常靈活的數據驗證、格式化和數據綁定機制、能使用任何對象進行數據綁定,不必實現特定框架的API
  8. 更加簡單、強大的異常處理
  9. 對靜態資源的支持
  10. 支持靈活的本地化、主題等解析

常用的組件

  1. 將Web層進行了職責解耦,基於請求-響應模型
  2. 常用主要組件
    ① DispatcherServlet:前端控制器
    ② Controller:處理器/頁面控制器,做的是MVC中的C的事情,但控制邏輯轉移到前端控制器了,用於對請求進行處理
    ③ HandlerMapping :請求映射到處理器,找誰來處理,如果映射成功返回一個HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象、多個HandlerInterceptor攔截器對象)
    ④ View Resolver : 視圖解析器,找誰來處理返回的頁面。把邏輯視圖解析爲具體的View,進行這種策略模式,很容易更換其他視圖技術;
    如InternalResourceViewResolver將邏輯視圖名映射爲JSP視圖
    ⑤ LocalResolver:本地化、國際化
    ⑥ MultipartResolver:文件上傳解析器
    ⑦ HandlerExceptionResolver:異常處理器

永恆的HelloWord

導入的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
commons-logging-1.1.3.jar

spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar

配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>SpringMVC</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  		<servlet-name>springMVC</servlet-name>
  		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  		<servlet-name>springMVC</servlet-name>
  		<!-- 這裏的url模型就寫一個/,代表的是處理請求,而將訪問頁面的過濾掉
  			如果你寫了/*,代表這個工程下的所有的內容都要被這個核心控制器來處理
  			但是訪問靜態頁面的不需要核心控制器來處理,所以就要寫成/*
  		 -->
  		<url-pattern>/</url-pattern>
  </servlet-mapping>
  
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

	<!-- 掃描組件,將加上了@Controller註解的類作爲springMVC的控制層 -->
	<context:component-scan base-package="test"></context:component-scan>
	
	<!-- 配置視圖解析器
		作用:將prefix+視圖名稱+suffix確定爲最終要跳轉的頁面
		視圖名稱就是POJO調用的方法返回的string
		/WEB-INF/view/success.jsp
	 -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
</beans>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<a href="test?username=admin&password=1234">test</a>
</body>
</html>
package test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/*
	 * 在web.xml中配置SpringMVC的核心(前端控制器)DispatcherServlet
	 * 		作用是:加載springMVC的配置文件,在下方的配置方式下,
	 * 				DispatcherServlet自動加載配置文件,此時的配置文件有默認的位置和名稱
	 * 		默認位置:WEB-INF下,默認的名稱是<servlet-name>-servlet.xml
	 * 		例如下面配置就是springMVC-servlet.xml
	 * 		當加載了配置文件,SpringMVC就會根據它掃描組件找到控制層
	 * 		  <servlet>
			  		<servlet-name>springMVC</servlet-name>
			  		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
			  </servlet>
			  <servlet-mapping>
			  		<servlet-name>springMVC</servlet-name>
			  		<url-pattern>/</url-pattern>
			  </servlet-mapping>
			  
			 寫上SpringMVC的配置文件
	 *		 創建一個POJO,在此類上加上@Controller註解,springMVC就會將此類作爲控制層加載
	 *					讓它來處理請求響應
	 *		
	 *		在控制層需要在方法寫上@RequestMapping(value="")
	 *			springMVC就是通過此註解將請求路徑與控制層中的方法進行匹配
	 *					此時對應的的請求路徑是localhost:8080/projectName/xxx
	 *		 
	 *		處理請求的方法會返回一個字符串,就是視圖名稱,
	 *				最終會通過配置文件中配置的視圖解析器實現頁面跳轉
	 *				方式:prefix+視圖名稱+suffix,此爲最終跳轉的頁面路徑
	 */
@Controller
//@RequestMapping("test")
public class Test
{
	/*
	 * 現在假設請求是:localhost:8080/SpringMVC/test
	 * return "success";返回的是視圖名稱
	 * test(String name,String password)裏面的參數還可以根據請求是的參數進行自動設置
	 * 就是據變量的名字進行自動封裝的
	 */
	/*
	 * @RequestMapping:設置請求映射,把請求和控制層中的方法設置映射關係
	 * 當請求路徑和@RequestMapping的value屬性一致的時候,
	 * 		該註解所標記的方法就是處理請求的方法
	 * 
	 * method:用來設置請求方式,只有客戶端發送請求的方式和method的值一樣的時候蔡處理請求
	 * 			常用的請求方式有:get(查詢) post(添加) put(修改) delete(刪除)
	 * 
	 * params:設置客戶端傳到服務器的數據,支持表達式的,比如
	 * 						username :只處理參數中有username參數的
	 * 						!username:沒有username參數的
	 * 						username!=admin:username不等於admin的
	 * 
	 * headers:設置請求頭信息,所發送的請求的請求頭信息一定要和headers屬性所設置的一致
	 * 
	 * @RequestMapping可以加在類上,也可以在加方法上
	 * 		加在類上的時候,瀏覽器訪問的路徑url就得寫多一層,就是多了類上的@RequestMapping的value值
	 * 		所以是一層一層地訪問,先訪問類再訪問方法上
	 */
	@RequestMapping(value = "test1",method = RequestMethod.GET,params = {"!age"},headers = {"Accept-Language=zh-CN,zh;q=0.9"})
	public String test1(String name,String password)
	{
		System.out.println(name+"==="+password);
		return "success";
	}
	
	/*
	 * springMVC支持Ant方式的請求路徑
	 * Ant的三種匹配符:*(任意字符)  ?任意一個字符  **任意多層目錄
	 */
	@RequestMapping(value = "/*/abc??/**/test")
	public String test2(String name,String password)
	{
		System.out.println(name+"==="+password);
		return "success";
	}
	/*
	 * springMVC支持佔位符方式的路徑
	 * 以前:localhost:8080/SpringMVC/test?id=100&username=admin
	 * 現在使用REST的風格
	 * 現在:localhost:8080/SpringMVC/test/100/admin
	 * 請求路徑裏面有id和username的佔位符,
	 * @PathVariable註解就是取出裏面的值賦值給參數的
	 */
	@RequestMapping(value = "test/{id}/{username}")
	public String test3(@PathVariable("id")Integer id,@PathVariable("username")String username)
	{
		System.out.println(id+"==="+username);
		return "success";
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章