SpringMVC-HelloWorld

2.5、Hello World入門

2.5.1、準備開發環境和運行環境:

☆開發工具:eclipse

☆運行環境:tomcat6.0.20

☆工程:動態web工程(springmvc-chapter2

☆spring框架下載:

spring-framework-3.1.1.RELEASE-with-docs.zip

☆依賴jar包:

1、? Spring框架jar包:

為了簡單,將spring-framework-3.1.1.RELEASE-with-docs.zip/dist/下的所有jar包拷貝到項目的WEB-INF/lib目錄下;

2、? Spring框架依賴的jar包:

需要添加Apache commons logging日志,此處使用的是commons.logging-1.1.1.jar;

需要添加jstl標簽庫支持,此處使用的是jstl-1.1.2.jar和standard-1.1.2.jar;

2.5.2、前端控制器的配置

在我們的web.xml中添加如下配置:

<servlet>  <servlet-name>chapter2</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <load-on-startup>1</load-on-startup>  
</servlet>  
<servlet-mapping>  <servlet-name>chapter2</servlet-name>  <url-pattern>/</url-pattern>  
</servlet-mapping>  

load-on-startup表示啟動容器時初始化該Servlet;

url-pattern表示哪些請求交給Spring Web MVC處理, “/” 是用來定義默認servlet映射的。也可以如“*.html”表示攔截所有以html為擴展名的請求。

?

自此請求已交給Spring Web MVC框架處理,因此我們需要配置Spring的配置文件,默認DispatcherServlet會加載WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件。本示例為WEB-INF/ chapter2-servlet.xml。

?

2.5.3、在Spring配置文件中配置HandlerMapping、HandlerAdapter

具體配置在WEB-INF/ chapter2-servlet.xml文件中:

<!-- HandlerMapping -->  
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>  <!-- HandlerAdapter -->  
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>  

BeanNameUrlHandlerMapping:表示將請求的URL和Bean名字映射,如URL為 “上下文/hello”,則Spring配置文件必須有一個名字為“/hello”的Bean,上下文默認忽略。

SimpleControllerHandlerAdapter:表示所有實現了org.springframework.web.servlet.mvc.Controller接口的Bean可以作為Spring Web MVC中的處理器。如果需要其他類型的處理器可以通過實現HadlerAdapter來解決。

2.5.4、在Spring配置文件中配置ViewResolver

具體配置在WEB-INF/ chapter2-servlet.xml文件中:

<!-- ViewResolver -->  
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>  <property name="prefix" value="/WEB-INF/jsp/"/>  <property name="suffix" value=".jsp"/>  
</bean>  

InternalResourceViewResolver:用于支持Servlet、JSP視圖解析;

??? viewClass:JstlView表示JSP模板頁面需要使用JSTL標簽庫,classpath中必須包含jstl的相關jar包;

??? prefix和suffix:查找視圖頁面的前綴和后綴(前綴[邏輯視圖名]后綴),比如傳進來的邏輯視圖名為hello,則該該jsp視圖頁面應該存放在“WEB-INF/jsp/hello.jsp”;

?

2.5.5、開發處理器/頁面控制器

package cn.javass.chapter2.web.controller;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import org.springframework.web.servlet.ModelAndView;  
import org.springframework.web.servlet.mvc.Controller;  
public class HelloWorldController implements Controller {  @Override  public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {  //1、收集參數、驗證參數  //2、綁定參數到命令對象  //3、將命令對象傳入業務對象進行業務處理  //4、選擇下一個頁面  ModelAndView mv = new ModelAndView();  //添加模型數據 可以是任意的POJO對象  mv.addObject("message", "Hello World!");  //設置邏輯視圖名,視圖解析器會根據該名字解析到具體的視圖頁面  mv.setViewName("hello");  return mv;  }  
}  

org.springframework.web.servlet.mvc.Controller:頁面控制器/處理器必須實現Controller接口,注意別選錯了;后邊我們會學習其他的處理器實現方式;

public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) :功能處理方法,實現相應的功能處理,比如收集參數、驗證參數、綁定參數到命令對象、將命令對象傳入業務對象進行業務處理、最后返回ModelAndView對象;

ModelAndView:包含了視圖要實現的模型數據和邏輯視圖名;

“mv.addObject("message", "Hello World!");”表示添加模型數據,此處可以是任意POJO對象;

“mv.setViewName("hello");”表示設置邏輯視圖名為“hello”,視圖解析器會將其解析為具體的視圖,如前邊的視圖解析器InternalResourceViewResolver會將其解析為“WEB-INF/jsp/hello.jsp”。

?

我們需要將其添加到Spring配置文件(WEB-INF/chapter2-servlet.xml),讓其接受Spring IoC容器管理:

<!-- 處理器 -->  
<bean name="/hello" class="cn.javass.chapter2.web.controller.HelloWorldController"/>  

name="/hello":前邊配置的BeanNameUrlHandlerMapping,表示如過請求的URL為 “上下文/hello”,則將會交給該Bean進行處理。?

2.5.6、開發視圖頁面

創建 /WEB-INF/jsp/hello.jsp視圖頁面:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
<!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>Hello World</title>  
</head>  
<body>  
${message}  
</body>  
</html>  

${message}:表示顯示由HelloWorldController處理器傳過來的模型數據。

2.5.6、啟動服務器運行測試

通過請求:http://localhost:9080/springmvc-chapter2/hello,如果頁面輸出“Hello World! ”就表明我們成功了!

?

?

2.5.7、運行流程分析

如圖2-3

圖2-3

運行步驟:

1、? 首先用戶發送請求http://localhost:9080/springmvc-chapter2/hello——>web容器,web容器根據“/hello”路徑映射到DispatcherServlet(url-pattern為/)進行處理;

2、? DispatcherServlet——>BeanNameUrlHandlerMapping進行請求到處理的映射,BeanNameUrlHandlerMapping將“/hello”路徑直接映射到名字為“/hello”的Bean進行處理,即HelloWorldController,BeanNameUrlHandlerMapping將其包裝為HandlerExecutionChain(只包括HelloWorldController處理器,沒有攔截器);

3、? DispatcherServlet——> SimpleControllerHandlerAdapter,SimpleControllerHandlerAdapter將HandlerExecutionChain中的處理器(HelloWorldController)適配為SimpleControllerHandlerAdapter;

4、? SimpleControllerHandlerAdapter——> HelloWorldController處理器功能處理方法的調用,SimpleControllerHandlerAdapter將會調用處理器的handleRequest方法進行功能處理,該處理方法返回一個ModelAndView給DispatcherServlet;

5、? hello(ModelAndView的邏輯視圖名)——>InternalResourceViewResolver, InternalResourceViewResolver使用JstlView,具體視圖頁面在/WEB-INF/jsp/hello.jsp;

6、? JstlView(/WEB-INF/jsp/hello.jsp)——>渲染,將在處理器傳入的模型數據(message=HelloWorld!)在視圖中展示出來;

7、? 返回控制權給DispatcherServlet,由DispatcherServlet返回響應給用戶,到此一個流程結束。

?

到此HelloWorld就完成了,步驟是不是有點多?而且回憶下我們主要進行了如下配置:

?

1、? 前端控制器DispatcherServlet;

2、? HandlerMapping

3、? HandlerAdapter

4、? ViewResolver

5、? 處理器/頁面控制器

6、? 視圖

?

因此,接下來幾章讓我們詳細看看這些配置,先從DispatcherServlet開始吧。

轉載于:https://www.cnblogs.com/ClassNotFoundException/p/5845360.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256437.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSVN備份初體驗

備份方法挺多的&#xff0c;目前我知道有四種 其一&#xff1a; 首先復制舊csvn服務器上repositories下的版本庫文件夾到新csvn服務器repositories文件夾下面&#xff08;做以下修改時最好把csvn服務停掉&#xff09; 然后復制舊csvn的svn_auth_file到新csvn上&#xff08;相當…

機器學習——支持向量機SVM之非線性模型(原問題和對偶問題)

目錄 一、原問題&#xff08;prime problem&#xff09; 二、原問題的對偶問題&#xff08;dual problem&#xff09; 1、定義一個輔助函數 2、定義對偶問題 >>>問題1&#xff1a;上面說到遍歷w&#xff0c;那w的取值范圍和取值步長是怎樣的&#xff1f;即遍歷的…

(轉)Apache?Rewrite?詳解

(轉)Apache Rewrite 詳解參考文檔&#xff1a;http://man.chinaunix.net/newsoft/ApacheManual/mod/mod_rewrite.htmlApache Rewrite 詳解一 入門RewriteEngine onRewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php就這兩行. 然后就完成了URL重寫功能了. 首先服務器是需要支…

python輪廓函數的使用

在圖像的處理中有時候需要對圖像中的目標區域提出出輪廓 讀取圖像 調用OpenCV的庫使用cv.imread()來讀取圖像。 圖像為 灰度化 二值化 提取輪廓時&#xff0c;圖像一般都是二值化后的圖像。在本次程序中選用cv2.THRESH_BINARY的二值化方式。即將大于閾值的部分設定為255&am…

Intent Bundle頁面跳轉信息的傳遞

MainActivity LoginActivity LoginLayout 轉載于:https://www.cnblogs.com/xiaolei121/p/5846644.html

超易懂數據庫范式

那些數據庫的書介紹的數據庫范式&#xff0c;實在是晦澀難懂&#xff0c;我在這里給出一個通俗的描述&#xff1a;1NF&#xff1a;一個table中的列是不可再分的&#xff08;即列的原子性&#xff09;2NF&#xff1a;一個table中的行是可以唯一標示的&#xff0c;&#xff08;即…

機器學習——支持向量機SVM之非線性模型(原問題轉化為對偶問題)

目錄 一、復習&#xff08;原問題、對偶問題、KKT條件、凸函數&#xff09; 二、將最優化問題標準化為原問題&#xff08;嚴格轉化為標準形式&#xff09; 1、原最優化問題 2、標準化后的問題 三、轉化為對偶問題&#xff08;注意變量的對應關系&#xff09; 四、對對偶問…

靜止的單攝像機無法得到像點的三維坐標詳解

我們知道在機器視覺中通常要使用的搭建的視覺測量系統對一個物體的尺寸、形變、以及三維形貌進行測量。一般按照攝像機的個數以及組成部分分為三類測量方法。分別為單目測量、雙目&#xff08;大于2為多目&#xff09;測量、以及結構光測量。 單目測量系統 顧名思義單目就指的…

一個比較笨的全文搜索的例子(分析結構用)-模糊查找

1 2 3 4 --在所有的char類型的列中模糊查找某個值。5 --**注意預先切換到當前的數據庫中。6 DECLARE TABLE_CATALOG NVARCHAR(MAX)--數據庫名7 ,TABLE_SCHEMA NVARCHAR(MAX)--架構名8 ,TABLE_NAME NVARCHAR(MAX)--表名9 ,COLUMN_NAME NVARCHAR(MAX)--列名 10 ,SQL N…

未能加載文件或程序集“Poderosa.Core

https://github.com/poderosaproject/poderosa上下載的一個開源工程&#xff0c;程序是在VS2012上編譯的&#xff0c;然后VS2015轉換后編譯失敗&#xff0c;報“未能加載文件或程序集“Poderosa.Core......”的錯誤 猜測是轉換的時候引用丟失了&#xff0c;于是添加引用 F:\...…

個人閱讀作業Week7

上了大學之后其實就沒有很多時間去讀書了&#xff0c;與其說軟工作業時給我們布置了一些任務&#xff0c;但是也是在另一方面讓我們得到了更多的知識的填補&#xff0c;因為平常能夠接觸的書籍很少&#xff0c;平常自己也是一個很不愛看書的人&#xff0c;所以我覺得這樣的作業…

圖像的像素、分辨率、像元尺寸、大小、清晰度的關系

圖像的像素&#xff1a; 圖像是由像素所組成的&#xff0c;像素的多少表明攝像機所含有的感光元件的多少。像素是指一張圖像中所有的像素數之和。 圖像分辨率&#xff1a; 是指表達方式也為“水平像素數垂直像素數” 像元尺寸&#xff1a; 是指一個像素在長和寬方向上所代表的實…

機器學習——支持向量機SVM實例(兵王問題,SVM求解步驟以及思路,不求解不編程)

目錄 一、問題描述&#xff08;兵王問題&#xff09; 二、步驟 1、獲得數據 2、樣本劃分&#xff08;訓練樣本和測試樣本&#xff09; 3、訓練樣本得到SVM模型 ? 1&#xff09;數據處理 2&#xff09;訓練樣本和測試樣本歸一化 3&#xff09;選擇核函數和調參 4&#…

單攝像機對于二維平面的測量

二維平面測量 首先我們應該知道什么是二維平面&#xff0c;二維平面簡單的說就是只含有x,y坐標系的平面&#xff0c;在z軸上沒有當量。這種一般出現在對于一個平面的寬度&#xff0c;長度&#xff0c;變形的測量&#xff0c;一般應用較多的場合是對一個規則的機械零件進行尺寸…

十六進制,輸出的時候怎樣控制所輸出字母的大小寫。

the first&#xff1a;printf("%x",10);printf("%X",10); 可以用x的大小寫來控制&#xff0c;所輸出字符的大小寫&#xff0c;真是一個巧妙的技能。轉載于:https://www.cnblogs.com/A-FM/p/4970114.html

Django的安裝

Django是Python的一款Web開源框架&#xff0c;所以Django是依賴于Python的&#xff0c;首先要安裝Python。 Python安裝 官網地址&#xff1a;http://www.python.org/download/ 在安裝Python的時候&#xff0c;會有人糾結&#xff0c;是要安裝Python2還是Python3呢&#xff1f;其…

機器學習——支持向量機SVM之多分類問題

目錄 方法1&#xff1a;改造目標函數與限制條件 方法2&#xff1a;一類對其他類&#xff08;類數為N&#xff0c;需要建立N個SVM模型&#xff09; 情形1&#xff1a;多個SVM模型結果交集得出確切歸類 情形2&#xff1a;多個SVM模型結果交集沒有得出確切歸類 方法3&#xff…

python3版本無法加載reload解決辦法NameError: name 'reload' is not defined

很多人在運行八點法求基礎矩陣問題時&#xff0c;都會遇到NameError: name ‘reload’ is not defined的錯誤 只需在最前面加上from imp import reload即可

hdu 2612 Find a way(bfs)

Problem DescriptionPass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei have many people to meet. Especially a good friend Merceki. Yifenfei’s home is at the countryside, but Merceki’s home is in …