1. 程式人生 > >springMVC4(1)角色解析與入門配置例項

springMVC4(1)角色解析與入門配置例項

在一個web專案中,典型的MVC架構將後臺分為Controller、Service、DAO三層,分別實現不同的邏輯功能,下面是一個web請求過程中,我們後臺的處理過程:

Created with Raphaël 2.1.0客戶端客戶端controllercontrollerserviceserviceDAO/資料庫DAO/資料庫傳送請求進行業務邏輯處理呼叫DAO層API訪問資料庫進行資料處理返回資料封裝返回相應業務邏輯處理結果傳送響應。

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>
  1. 在spring容器之間可配置成父子級關係,父級容器的內容在子容器課件,子容器的內容在父容器不可見。在本例中,父容器applicationContext.xml訪問不到子容器DispatcherServlet對應的spring容器servlet-context.xml中的內容。如果子容器配置了和父容器相同的內容,可能存在一個配置覆蓋的問題,這個會在後面我們分析事務注入的時候再提到
  2. 一個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> 提供型別的單獨節