springMVC4(1)角色解析與入門配置例項
在一個web專案中,典型的MVC架構將後臺分為Controller、Service、DAO三層,分別實現不同的邏輯功能,下面是一個web請求過程中,我們後臺的處理過程:
springMVC就充當著其中的控制層角色,它和我們的原生servlet所起的作用基本一致,但相對原生Servlet,SpringMVC的Web轉發請求處理功能就強大得多了。
1. 匯入jar包
使用springMVC需匯入相應的jar包,我們使用maven來管理我們的專案:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- spring版本號 -->
<spring.version>4.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency >
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId> slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<!-- 匯入dbcp的jar包,用來在applicationContext.xml中配置資料庫 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- servlet jsp -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
2. 配置web.xml
web.xml檔案用於在web服務啟動時,初始化一些配置資訊,對於一般Web專案來說,web.xml檔案是非必須的。但在springMVC中,我們需要通過web.xml配置servlet攔截特定url來實現控制器的功能,因而也是必須的。
下面先來看一個web.xml的例項配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 定義歡迎頁,當通過跟路徑/訪問專案時,預設跳轉到index.jsp檢視中 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 宣告spring上下文配置檔案所在位置,可以使用萬用字元*等進行模糊匹配,當有多個配置檔案時,可以使用逗號間隔 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml,classpath:spring/spring-*.xml</param-value>
</context-param>
<!-- 審批ringmvc的核心分發器,它會預設自動載入WEB-INF資料夾下的<servlet-names>-servlet.xml檔案,在這裡,我們的servlet-nane為springMVC -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 如果我們的配置檔案不在預設路徑下,我們需要通過<init-param>配置一個contextConfigLocation指定springMVC分發器配置檔案位置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:servlet-context.xml</param-value>
</init-param>
<!-- 設定當前servlet在所有servlet中第一個啟動 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置springMVC控制器的攔截url,預設所有url都被攔截-->
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 配置上下文載入監聽器,它會在web服務啟動時,根據contextConfigLocation中宣告的spring配置檔案位置載入配置資訊
需要注意的是,它不會載入DispatcherServlet已經載入的配置檔案 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 字符集處理過濾器,能夠強制對所有web請求編碼進行utf-8編碼,從而有效避免亂碼產生 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
- 在spring容器之間可配置成父子級關係,父級容器的內容在子容器課件,子容器的內容在父容器不可見。在本例中,父容器applicationContext.xml訪問不到子容器DispatcherServlet對應的spring容器servlet-context.xml中的內容。如果子容器配置了和父容器相同的內容,可能存在一個配置覆蓋的問題,這個會在後面我們分析事務注入的時候再提到
- 一個web.xml可以根據我們的專案需求配置多個DispatcherServlet,通過對應的實現對不同邏輯的請求攔截。
3. 配置springMVC核心檔案servlet-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">
<!-- 掃描com.mvc.controller包下所有的類,使spring註解生效 -->
<context:component-scan base-package="com.mvc.controller"/>
<!-- 定義檢視解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property><!-- 字首,在springMVC控制層處理好的請求後,轉發配置目錄下的檢視檔案 -->
<property name="suffix" value=".jsp"></property><!-- 檔案字尾,表示轉發到的檢視檔案字尾為.jsp -->
</bean>
</beans>
在沒有引入其他配置之前,我們可以先不用配置父容器applicationContext.xml。
4. 配置控制器
接下來,我們需要配置一個從功能上相當於servlet的控制器:獲取前端請求->處理請求->轉發檢視(view)層
package com.mvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller//註解為控制器,通過spring容器掃描,會註冊為一個Bean
@RequestMapping("/user")//一級訪問路徑,對類中所有方法生效
public class UserController {
@RequestMapping("/hello")//二級訪問路徑
public String hello(){
//返回檢視檔名,和servlet-context.xml,會將請求轉發到/WEB-INF/views/hello.jsp檔案中
return "hello";。
}
}
5. 編寫檢視層檔案
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>hello spring mvc</title>
</head>
<body>
Hello
</body>
</html>
6. 測試配置
至此配置已基本完成,我們可以將當前應用部署到伺服器中,然後訪問相應路徑,這裡我們的專案名為springMVC,使用tomcat伺服器監控本地8080埠,於是我們的請求url是http://localhost:8080/springMVC/user/hello
。訪問後,遊覽器挑轉到我們的jsp頁面
相關推薦
springMVC4(1)角色解析與入門配置例項
在一個web專案中,典型的MVC架構將後臺分為Controller、Service、DAO三層,分別實現不同的邏輯功能,下面是一個web請求過程中,我們後臺的處理過程: Created with Raphaël 2.1.0客戶端客戶端controllerc
RocketMQ 菜鳥筆記 (二) RocketMQ 4.1.0 安裝與入門例項
一、安裝 環境: Linux version 2.6.32-573.el6.x86_64 RocketMQ 4.1.0 java 1.8 maven 3.3.9 步驟: 1.下載原始碼並編譯 git clone https://gith
Hadoop學習筆記—1.基本介紹與環境配置
一、Hadoop的發展歷史 說到Hadoop的起源,不得不說到一個傳奇的IT公司—全球IT技術的引領者Google。Google(自稱)為雲端計算概念的提出者,在自身多年的搜尋引擎業務中構建了突破性的GFS(Google File System),從此檔案系統進入分散式時代。除此之外,Google在
hibernate5(2)初入門配置例項
入門例項:向資料庫插入一個物件 1. 第一步需要引入我們的jar包,推薦使用maven管理專案,直接在pom.xml中新增 <properties> <project.build.sourceEncoding>UTF-
Flume1.8安裝配置與入門例項
一 下載Flume 1.1 下載並且安裝 下載地址 選擇下載 當然大家也可以使用稍微老一點的版本1.7版本 把flume安裝包上傳到叢集並且進行解壓操作 資料夾改名 mv apache-flume-1.7.0-bin/ flume1.7.
從零開始學習 ASP.NET MVC 1.0 (五) ViewEngine 深入解析與應用例項
《從零開始學習ASP.NET MVC 1.0》 文章導航 一.摘要 本文講解ViewEngine的作用, 並且深入解析了實現ViewEngine相關的所有介面和類, 最後演示瞭如何開發一個自定義的ViewEngine. 本系列文章已經全部更新為ASP.NET MVC 1.0版本.希望大家多多支援!
從零開始學習 ASP.NET MVC 1.0 (三) Controller/Action 深入解析與應用例項
《從零開始學習ASP.NET MVC 1.0》 文章導航 一.摘要 一個Url請求經過了Routing處理後會呼叫Controller的Action方法. 中間的過程是怎樣的? Action方法中返回ActionResult物件後,如何到達View的? 本文將講解Controller的基本用法,
配置DNS的正反向解析與主從同步
dns配置DNS的正反向解析與主從同步準備:本實驗基於兩臺centos6.5其內核版本號為2.6.32-431.el6.x86_64配置時間同步# echo "#update system date by jiajie at 20170506" >>/var/spool/cron/root #
《實體解析與信息質量》 - 2.2.1 復習題
div str 維度 策略 質量 詳細 一個 查找 周期 1. 從財務的角度上怎樣定義“資產”?信息在哪些角度符合這種定義?又在哪些角度不符合? 2. 信息質量的度量單位是什麽? 3. 舉例來說明這樣一種情況:同一條信息在它的當中一個應用中
Nordic nRF52832 學習筆記(1) 介紹,入門,與準備工作
例程 盜版 path pdf 規範 準備 但是 依然 可能 近來,物聯網已成為大勢所趨,VR與AR正方興未艾,各種手環、遙控、智能家居也在粉墨登場。技術前沿的領航者們已經快馬加鞭,各種意誌與暗示也在上傳下達。物聯網,無線通訊,移動互聯,將成為新的目標與寵兒。最近開的電賽
用java實現一個簡易編譯器1-詞法解析入門
new 概念 自加 我們 sta 數字 獲得 () 操作系統 本文對應代碼下載地址為: http://download.csdn.net/detail/tyler_download/9435103 視頻地址: http://v.youku.com/v_show/id_XMT
ExtJS配置與入門項目創建
hid marker api 技術分享 分享 6.5 jre scroll ext Sencha Cmd下載:http://cdn.sencha.com/cmd/6.5.2/jre/SenchaCmd-6.5.2-windows-64bit.zip ExtJS-6.2.
DNS解析與Bind的使用(7)——子域授權、轉發及訪問控制列表配置
訪問控制 子域授權 轉發 十四、Bind軟件的子域授權全球網絡的DNS服務器都是由多級所構成的,每一臺主機通過域名服務找到所要訪問的主機IP地址都是通過一層層DNS服務器找到的。而這樣的結構就決定了,上級域名服務器必須具備找到子域的能力,例如tianxia.com.這個域名,在頂級域com.下就必
1、軟件源配置與學習建議
rem entos ping ont IT ans yun height line 默認使用centos6.8默認aliyun的源備份mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
elasticsearch技術解析與實戰(一) 入門和索引
ilog reat date str last dice elastics replicas nod GET _cat/nodes GET _cat/health GET _cat/shards GET http://10.37.84.124:9200/secislan
nginx1-dns域名解析|nginx入門|win下搭建|配置檔案解析
DNS域名解析器 DNS,域名系統,是網際網路上作為域名和IP地址相互對映的一個分散式資料庫 目的:將域名轉化成ip 過程 ------------------本機------------------ 1.輸入網址(www.163.com) 2.瀏覽器檢查快取中有沒有這個域名
C&C++入門篇---CodeBlocks的安裝與簡單配置
最近接觸C&C++語言,很多人都在用microsoft visual c++軟體,無奈本人安裝各種版本,由於與電腦不匹配,始終裝不上!有人說道可以通過換系統辦法解決,總不能為了裝這個軟體,而把我其它軟體全部解除安裝。所以就想到了這個軟體,簡單介紹下此軟體。 Code::Bloc
C# SortedList(Tkey,TValue)集合類解析與例項
SortedList<TKey,TValue>類表示鍵/值對的集合,這些鍵值對按鍵排序並可按照鍵和索引訪問。 SortedList<TKey,TValue>和 Dictionary<Tkey,TValue>類很類似,都允許將鍵和值關聯。主要區別
C# Stack<T>集合類解析與例項
本文部分註釋部分來源於書籍和官網網摘。 ///Stack<T>佇列後儘先出原則,numbers.Count值大於10的值就是佇列中最後進入的(numbers.Count最大值——10)個元素;  
C# LinkedList<T>集合類解析與例項
本文部分註釋部分來源於書籍和官網網摘。 LinkedList<T> 是一個通用的連結的列表。 它支援列舉器和實現ICollection介面,與.NET Framework 中的其他集合類保持一致。 LinkedList<T> 提供型別的單獨節