前言
Idea在開發的時候,的確比Eclipse智能,但是沒有Eclipse方便,好多在Eclipse中沒問題的源代碼跑到idea裏面就會因爲結構而遇到各種各樣的坑
工欲善其事,必先利其器
idea新建一個SpringMVC項目
第一步,打開Idea,create a new project,注意我圖中的打√的地方,然後一路next,Finsh
就這?就這?就這?Too young too single
第二步,先看看咱們的項目結構,src就是源碼
修改web.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_4_0.xsd"
version="4.0">
<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>
<!-- Springmvc的前端控制器 / 核心控制器: DispatcherServlet -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 給DispatcherServlet配置初始化參數:
指定Springmvc的核心配置文件
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringMVC.xml</param-value>
</init-param>
<!--
load-on-startup: 設置DispatcherServlet在服務器啓動時加載。
Servlet的創建時機:
1. 請求到達以後創建
2. 服務器啓動即創建
-->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 指定請求的匹配 -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
直接在src下新建SpingMVC.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 https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 1. 組件掃描 -->
<context:component-scan base-package="main.SpringMVC"></context:component-scan>
<!-- 2. 視圖解析器
工作機制: prefix + 請求處理方法的返回值 + suffix = 物理視圖路徑.
/WEB-INF/views/success.jsp
WEB-INF: 是服務器內部路徑。 不能直接從瀏覽器端訪問該路徑下的資源. 但是可以內部轉發進行訪問
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
第三步,打開Project Structure(敲黑板了)
第四步,編寫HelloWorld
index.jsp
請求方法
/**
* 爲什麼只能用Controller
* 註冊爲組件
* 請求處理器 / 控制器
*/
@Controller
public class test {
/**
* 處理客戶端的請求: http://localhost:8888/Springmvc01/hello
*
* @RequestMapping: 完成請求 與 請求處理方法的映射.
*
*/
@RequestMapping(value="/hello")
public String handleHello() {
System.out.println("Hello SpringMVC ");
return "success"; // 通過視圖解析器解析得到具體的視圖, 再轉發去往該視圖.
}
}
第五步,添加Tomcat並執行
運行結果:
原理剖析
Springmvc的HelloWorld:
1. 創建web工程, 導入核心的jar包.
2. 在web.xml中配置SpringMVC的前端控制器: DispatcherServlet
3. 配置SpringMVC的核心配置文件: springmvc.xml
4. 編寫請求處理器
5. 瀏覽器端發送請求, 請求處理器中處理請求
6. 測試
Springmvc HelloWorld 執行流程:
1. 啓動Tomcat服務器, 會加載DispatcherServlet, 然後就會讀取springmvc.xml,進而創建好的Springmvc容器對象.
創建Springmvc容器對象: 組件掃描會 掃描到請求處理器, 以及請求處理中@RequestMapping註解,
能得到具體的請求與請求處理器 中方法的映射。
2. 客戶端發送請求: http://localhost:8888/Springmvc01/hello
3. 請求到達web.xml中與<url-pattern>進行匹配, 匹配成功,就將請求交給DispatcherServlet
4. DispatcherServlet根據請求 與 請求處理方法的映射, 將請求交給具體的請求處理器中的請求處理方法來進行處理
5. 請求處理方法處理完請求, 最終方法會返回一個字符串
6. 視圖解析器根據請求處理方法返回的結果, prefix + returnValue + suffix, 解析生成具體的物理視圖路徑,
再通過轉發的方式去往視圖。 ·