Table of Contents
2):框架自身可能要寫什麼(springmvc的前端控制器的配置)
5.4:consumes:只接受內容類型是哪種的請求,規定請求頭中的Content-Type
5.5:produces:告訴瀏覽器返回的內容類型是什麼,給響應頭中加上Content-Type:text/html;charset=utf-8
一:springMVC簡介
1:是Spring實現web模塊的;簡化web開發的
2:傳統的MVC
3:springMVC下的MVC
二:springMVC的HelloWorld
1:普通web模式下
1.1:選擇spring模塊
1.2:選擇項目位置
1.3:系統自動下載jar包
1.4:加入jar包依賴
1.5:配置tomcat(也可以不配置,一會自己加)
1.6:修改web.XML
1.7:springMVC的配置
在dispatcher-servlet.xml配置spring mvc相關的。如:掃描的基包、頁面訪問位置及後綴。
如果你的取得名字是HelloMVC,那麼與其對應的servlet名字必須是:HelloMVC-servlet.xml。格式是:自定義名稱-servlet.xml
HelloMVC-servlet內容如下:
需要說明的是:先引入context及mvc之後,下面就可以聯想出來了。
1.8:寫一個controller
1.9:部署項目
啓動:
注:如果有的報錯:記得修復Artifacts(目的就是將lib下的jar包,加入web-info下)
2:使用maven工具
2.1:創建項目
2.2:添加依賴
我們打開其中的pom.xml,添加我們的依賴。這裏我把我的依賴全部放出來,複製到你的pom.xml的dependencies標籤之間就可以了,pom文件中也會給你一個示例。
我們今天做最簡單的helloworld,只需要導入webmvc即可
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.6.RELEASE</version> </dependency> </dependencies>
2.3:添加框架支持
配置完pom.xml之後,我們在idea中要添加一下框架的支持。右擊我們的項目文件夾,選擇add framework support
將下圖中的Spring和Spring下的Spring MVC都勾上,之前配置pom.xml文件時,已經自動下載了spring相關文件,所以這裏就直接用之前下載好的就可以了,OK。(注意:點了Add framework support之後,在下圖中有可能會找不到Spring,解決辦法在下圖的下方
如果在Add framework support中找不到Spring,那是因爲項目中可能已經存在Spring相關文件,但不一定是完善的。因此我們要將已經存在的Spring給刪掉,重新添加,方法如下:
點擊File,選擇Project Structure,(快捷鍵ctrl+shift+alt+s)選擇Facets,就會看到有一個Spring啦,右擊它,點刪除就行啦,然後再回到上面第3步重新Add framework support,Spring就會出現啦。
可以看到新增了兩個xml文件,並且我也調整了一下包結構
2.4:修改web.XML
2.5:springMVC的配置
在dispatcher-servlet.xml配置spring mvc相關的。如:掃描的基包、頁面訪問位置及後綴。
如果你的取得名字是HelloMVC,那麼與其對應的servlet名字必須是:HelloMVC-servlet.xml。格式是:自定義名稱-servlet.xml
HelloMVC-servlet內容如下:
需要說明的是:先引入context及mvc之後,下面就可以聯想出來了。
2.6:寫一個controller
2.7:部署項目
啓動:
3:總結springmvc的HelloWord
1:導包:
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
2:寫配置:
1)web.xml可能要寫什麼
配置springmvc的前端控制器,指定springmvc配置文件位置
<?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_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--contextConfigLocation:spring本身的框架配置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--在dispatcher-servlet.xml配置spring mvc相關的。如:掃描的基包、頁面訪問位置及後綴。
如果你的取得名字是HelloMVC,那麼與其對應的servlet名字必須是:HelloMVC-servlet.xml。
格式是:自定義名稱-servlet.xml-->
<!--<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>-->
<!-- servlet啓動加載,servlet原本是第一次訪問創建對象;
load-on-startup:服務器啓動的時候創建對象;值越小優先級越高,越先創建對象;
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<!--
/*和/都是攔截所有請求; /:會攔截所有請求,但是不會攔截*.jsp;能保證jsp訪問正常;
/*的範圍更大;還會攔截到*.jsp這些請求;一但攔截jsp頁面就不能顯示了;
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
去掉註釋就是這樣:
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
2):框架自身可能要寫什麼(springmvc的前端控制器的配置)
在dispatcher-servlet.xml配置spring mvc相關的。如:掃描的基包、頁面訪問位置及後綴。
如果你在web.xml中取得名字是HelloMVC,那麼與其對應的servlet名字必須是:HelloMVC-servlet.xml。 格式是:自定義名稱-servlet.xml,這樣就可以在web.xml中不必顯示性的鞋配置文件的名字
<?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">
<!--掃描包-->
<context:component-scan base-package="com.wkl"></context:component-scan>
<!--指定視圖解析器的前後綴-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
3: 測試
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(){
System.out.println("請求了。。。。。");
return "success";
}
}
4:helloworld原理和細節
4.1:helloword流程
* 1)、客戶端點擊鏈接會發送 http://localhost:8080/hello 請求
* 4)、來看請求地址和@RequestMapping標註的哪個匹配,來找到到底使用那個類的哪個方法來處理
* 5)、前端控制器找到了目標處理器類和目標方法,直接利用返回執行目標方法;
* 6)、方法執行完成以後會有一個返回值;SpringMVC認爲這個返回值就是要去的頁面地址
4.2:一個方法一個請求
5:RequestMapping屬性詳解
5.1:method:限定請求方式、
* 【GET】, HEAD, 【POST】, PUT, PATCH, DELETE, OPTIONS, TRACE
5.2:params:規定請求參數
* param1: 表示請求必須包含名爲 param1 的請求參數
* 發送請求的時候必須帶上一個名爲username的參數;沒帶都會404
* !param1: 表示請求不能包含名爲 param1 的請求參數
* 發送請求的時候必須不攜帶上一個名爲username的參數;帶了都會404
* param1 != value1: 表示請求包含名爲 param1 的請求參數,但其值不能爲 value1
* 發送請求的時候;攜帶的username值必須不是123(不帶username或者username不是123)
* {“param1=value1”, “param2”}: 請求必須包含名爲 param1 和param2 的兩個請求參數,且 param1 參數的值必須爲 value1
5.3:規定請求頭;也和params一樣能寫簡單的表達式
5.4:consumes:只接受內容類型是哪種的請求,規定請求頭中的Content-Type
5.5:produces:告訴瀏覽器返回的內容類型是什麼,給響應頭中加上Content-Type:text/html;charset=utf-8
6:@RequestMapping模糊匹配功能
7:@PathVariable 路徑佔位符
//路徑上可以有佔位符: 佔位符 語法就是可以在任意路徑的地方寫一個{變量名}
// /user/admin /user/leifengyang
// 路徑上的佔位符只能佔一層路徑
@RequestMapping("/user/{id}")
public String pathVariableTest(@PathVariable("id")String id){
System.out.println("路徑上的佔位符的值"+id);
return "success";
}