Spring MVC使用篇(二)—— 環境搭建
文章目錄
1、依賴的jar包
將所有所需的jar包統一放置的路徑為:web/WEB-INF/lib。具體jar包如下圖所示:
然後在專案中設定專案依賴。
2、在web.xml中配置前端控制器
由於使用了Spring MVC,請求就要交由Spring MVC來管理。我們知道,在一般的JSP/Servlet開發模式中,請求會被對映到web.xml中,然後匹配到對應的Servlet配置上,進而呼叫相應的Servlet類處理請求並反饋結果。那麼當使用Spring MVC框架開發時,就需要將所有符合條件的請求攔截到Spring MVC的專有Servlet上,讓Spring MVC框架進行下一步的處理。這裡,需要在web/WEB-INF/web.xml檔案中新增Spring MVC的前端控制器(DispatcherServlet),用於攔截額符合配置的url請求。具體配置如下:
<?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>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
- servlet-mapping標籤對
其中定義了當url符合“.action”的形式(也即任何字元後面跟“.action”的形式)時,對映一個名為“springmvc”的Servlet配置。 - servlet標籤對
其中定義了一個名為“springmvc”的Servlet配置,其中實現類為DispatcherServlet,即Spring MVC的前端控制器類。然後在下面的“init-param”標籤對中放置了DispatcherServlet需要的初始化引數,配置的是contextConfigLocation上下文引數變數,其載入的配置檔案為編譯目錄下的“web/WEB-INF/config/springmvc.xml”。
3、編寫核心配置檔案springmvc.xml
由於在日常開發中,基於註解的開發方式是最為常用的,因此在筆記中僅對基於註解的開發方式作出記錄。springmvc.xml配置檔案放置的路徑為:web/WEB-INF/config/springmvc.xml。
3.1 配置處理器對映器與處理器介面卡
<!--配置基於註解的處理器介面卡與處理器對映器-->
<mvc:annotation-driven/>
3.2 配置處理器
<!--使用掃描配置,對某一個包下面的所有類進行掃描,
找出所有使用@Controller註解的Handler控制器類-->
<context:component-scan base-package="com.ccff.controller"/>
3.3 配置檢視解析器
<!--配置檢視解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置檢視解析器的字首名稱-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--配置檢視解析器的字尾名稱-->
<property name="suffix" value=".jsp"/>
</bean>
3.4 整體springmvc.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!--配置基於註解的處理器介面卡與處理器對映器-->
<mvc:annotation-driven/>
<!--使用掃描配置,對某一個包下面的所有類進行掃描,
找出所有使用@Controller註解的Handler控制器類-->
<context:component-scan base-package="com.ccff.controller"/>
<!--配置檢視解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
4、編寫Model模型
其原始檔路徑為:/com/ccff/model/。
建立一個Fruits類,作為水果商城中水果模型。程式碼如下:
package com.ccff.model;
public class Fruits {
private int id; //水果編號
private String name; //水果名
private double price; //水果價格
private String producing_area; //水果產地
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getProducing_area() {
return producing_area;
}
public void setProducing_area(String producing_area) {
this.producing_area = producing_area;
}
}
5、編寫Handler處理器
Handler處理器即為MVC設計模式中的控制器(Controller)。其原始檔路徑為:/com/ccff/controller/。
建立一個FruitsController類,用於載入一個水果商城的水果列表資訊。程式碼如下:
package com.ccff.controller;
import com.ccff.model.Fruits;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("/query")
public class FruitsController {
private FruitsService fruitsService = new FruitsService();
@RequestMapping("/allFruits.action")
public String queryAllFruits(Model model){
//模擬service獲取水果商品列表
List<Fruits> fruitsList = fruitsService.queryFruitsList();
//將結果放到model中傳到顯示頁面中
model.addAttribute("fruitsList",fruitsList);
return "fruits/fruitsList";
}
}
class FruitsService{
public List<Fruits> queryFruitsList(){
List<Fruits> fruitsList = new ArrayList<Fruits>();
Fruits apple = new Fruits();
apple.setId(1);
apple.setName("紅富士蘋果");
apple.setPrice(2.3);
apple.setProducing_area("山東");
Fruits banana = new Fruits();
banana.setId(2);
banana.setName("香蕉");
banana.setPrice(1.5);
banana.setProducing_area("上海");
fruitsList.add(apple);
fruitsList.add(banana);
return fruitsList;
}
}
6、編寫檢視
使用jsp頁面,獲取model中傳遞到前臺的fruitsList集合,並使用JSTL標籤顯示。程式碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>水果列表</title>
</head>
<body>
<h3>水果列表</h3>
<table width="300px;" border=1>
<tr>
<td>編號</td>
<td>名稱</td>
<td>價格</td>
<td>產地</td>
</tr>
<c:if test="${fruitsList==null}">
<b>水果商品資訊為空!</b>
</c:if>
<c:forEach items="${fruitsList}" var="fruit">
<tr>
<td>${fruit.id }</td>
<td>${fruit.name }</td>
<td>${fruit.price }</td>
<td>${fruit.producing_area }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
7、最後顯示結果
部署在Tomcat伺服器上後的訪問路徑為:http://localhost:8080/query/allFruits.action,顯示結果如下: