SpringMVC支持使用註解方式配置,比配置文件方式更加的靈活易用,是SpringMVC使用的主流模式。
傳統的servlet是單例,如果業務複雜,存在很多的servlet,就會創建很多對象,造成內存浪費等一系列問題,SpringMVC就很好的解決了這些問題。
1.項目創建文件目錄結構及導包
A.創建項目
新建立的項目在WEB-INF目錄下沒有lib包和classes包的話,手動創建一下。
WEB-INF 文件夾下的文件是被保護的,不能被外部訪問,所以編譯好的class文件,jar包web.xml放到這裏比較安全(web.xml這種配置文件很重要肯定不能暴露出去,讓用戶訪問到)。
B.在WEB-INF目錄下創建lib包、classes包
C.導入相關的jar包
注意:此時導入的jar包不能採用之前javase項目添加jar包的方式Add as Library,因爲這是web項目,到時編譯發佈的都是WEB-INF下的,將jar包添加到項目中是沒有用的,到時發佈到tomcat中會導致不能正常運行
D.配置classes和lib目錄
在右上角1位置點擊按鈕進入到Project Structure
然後選擇位置2的Paths
然後選擇位置3的Use module compile output path
在位置4選擇剛剛創建的classes文件目錄,用來保存編譯好的class文件
最後在5位置先選擇apply,此時不要點擊OK
選擇Dependencies,然後點擊”+”,在彈出框中選擇到剛剛創建的lib包然後OK
此時可以看到lib包已經添加成功,點擊Apply---OK 完成jar包的導入
此時可以看到之前創建的classes文件夾已經變爲了橙色,lib文件夾中的jar包已經可以展開,說明WEB項目創建成功
web項目的結構層級關係
|--靜態web資源,html,css,js,圖片,音頻。視頻,動畫等
|--WEB-INF
|--classes //動態web資源class文件
|--lib //動態web資源依賴的jar包
|--web.xml //web應用的核心配置文件
|--xxxxx //其他不希望外界直接訪問的文件
2.創建SpringMVC項目
方式一:
A.在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">
<!--前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--/* 範圍太大:*.do ,*.action 都行,可以自己自由命名-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
B.創建SpringMVC核心配置文件
因爲SpringMVC默認會自動在web應用的WEB-INF目錄下去尋找[前端控制器ServletName]-servlet.xml作爲當前SpringMVC的核心配置文件,所以就在WEB-INF目錄下創建文件。
關於文件名:
上面web.xml中配置的前端控制器的<servlet-name>是springmvc,所以按照要求正確的文件名應該是(springmvc-servlet.xml)
創建springmvc-servlet.xml這個文件,這個文件本身其實就是Spring的配置文件,所以導入Spring相關的約束信息,包括 beans、context、mvc
創建如下:
目錄結構如下
在springmvc-servlet.xml中配置,配置註解方式MVC開關時主要選擇後綴爲mvc的
springmvc-servlet.xml中具體配置如下:
視圖解析器中prefix爲前綴,suffix爲後綴
<?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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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 http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--配置包掃描-->
<context:component-scan base-package="cn.wyy.web"/>
<!--配置註解方式MVC開關-->
<mvc:annotation-driven/>
<!--配置視圖解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--配置視圖解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
C. 在src目錄下創建控制器類MyController,並返回視圖test01
D.根據前綴中配置的路徑及控制器中返回的視圖名稱,創建如下目錄及文件
在test01.jsp中通過EL表達式獲取Controller中設置的值
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
控制器中設置的值爲:<br/>
${k1}<br/>
${k2}<br/>
</body>
</html>
E. 部署運行程序
根據@RequestMapping中的配置可知,訪問的地址爲
http://localhost/springmvctest01_war_exploded/web01/test01.action
訪問驗證成功
方式二
對於上面的步驟B,
SpringMVC默認會自動在web應用的WEB-INF目錄下去尋找[前端控制器ServletName]-servlet.xml作爲當前SpringMVC的核心配置文件,也可以在servlet的配置中自己指定核心配置文件位置,這樣就可以改變這個核心配置文件的路徑及名稱了。
具體的操作:在web.xml中的servlet標籤中加入<init-param>標籤實現,一般習慣於將該配置文件放置在src根目錄下
修改後的web.xml內容如下,可以自由命名:如:springmvc-my.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">
<!--前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-my.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--/* 範圍太大:*.do ,*.action 都行,可以自己自由命名-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
修改後的目錄結構如下:
其他與方式一保持一致,部署項目,測試如下,訪問成功