Spring MVC 入門(一)
helloworld
IDEA創建工程:
選擇SpringMVC即可,等待創建
編寫前端控制器
由於SpringMVC需要一個前端控制器(相當於醫院分診臺)來攔截前端請求,並且智能分發。
前端控制器是一個Servlet,所以應該在Web.xml中配置servlet進行攔截
在WEB-INF目錄下的web.xml文件中,有一個叫做dispatcher的東西,內容如下(初始狀態可能沒有< init-param >以及其子模塊)
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>index.jsp</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
接下來是該部分的詳細講解:
<load-on-startup>1</load-on-startup>
load-on-startup 代表服務器啓動時創建對象,其數值代表優先級,數值越小,優先級越高,越先創建對象。不加該標籤則在第一次訪問時創建對象
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>index.jsp</param-value>
</init-param>
該部分指定配置文件位置,因此我們在src 文件下創建一個SpringBean 文件,創建方法如圖:
然後將< param-value >該爲:classpath: springmvc.xml;
如下:
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
將< servlet-mapping >中的對應 < url-pattern> 改爲/
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
<!-- /*與/都是攔截所有請求,但是“/*”會攔截jsp頁面,一旦攔截,jsp頁面將無法顯示
/不會攔截jsp,保證jsp訪問正常
-->
</servlet-mapping>
然後在springmvc.xml< bean>中添加:
xmlns:context="http://www.springframework.org/schema/context"
添加後的結果應該是:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
xmlns:context="http://www.springframework.org/schema/context">
</beans>
添加掃描所有組件:
<context:component-scan base-package="com.tryMvc"></context:component-scan>
其中base-package中寫想要掃描的包
編寫處理器
爲了測試,我選擇在WEB-INF下添加文件,目錄結構如圖:
success.xml文件內容如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Success!</title>
</head>
<body>
<a href="/hello">Hello world</a>
</body>
</html>
然後在src文件下創建Java文件,
在MyFirstController 中添加方法,並且添加@Controller註解
@Controller是用來表示哪個組件是控制器,
代碼如下:
@Controller
public class MyFirstController {
@RequestMapping("/hello")
//處理當前項目下的Hello請求
public String myFirstController(){
System.out.println("Get");
return "/WEB-INF/pages/success.jsp";
}
}
請求處理完返回success頁面
注意:此處由於/WEB_INF/pages/success.jsp請求前綴是/WEB-INF/pages,後綴是.jsp,所以可以在springmvc.xml中配置一個視圖解析器,這樣返回時,可以直接返回網頁文件名。代碼如下:
<!-- 配置一個視圖解析器,能幫助拼接頁面地址 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages"></property>
<property name="suffix" value=".jsp"></property>
</bean>
prefix代表前綴,suffix代表後綴
運行前的準備:
在運行前,需要在IDEA環境中配置Apache服務器步驟如下:
1、
點擊右上角Add Configuration並在左側選擇+
2、
選中TomcatServer
3、
選擇本地Tomcat文件
4、
選擇Deployment,並點擊右側加號,然後點擊Artifact…
配置完成
運行
運行成功!