Hello World with Spring 3 MVC

在2005年,我對Martin Fowler的這篇文章對Spring進行了介紹。從那時起,我就修改了許多IoC框架,包括Guice , PicoContainer , NanoContainer等。雖然我很喜歡與IoC一起工作,但我必須說Spring在過去的5年中,對于所有企業級應用程序開發,IoC容器一直是并將繼續是我的選擇。

Spring的最新版本(即Spring 3)已經發布了一段時間。 在撰寫本文時,最新的次要版本3.1.1已發布不到一周 。 因此,就像我通常使用某些最新版本的軟件(例如Spring,Hibernate,Maven等)所做的那樣,我重述了-也許是第1000次-與Spring的一個很好的例子。 但是,這次我想與大家分享一下,希望Spring的新手會發現這篇文章有用。 牢記目標讀者,我覺得有關Spring MVC的文章會更有用。

在繼續之前,我必須提到,網上沒有關于此主題的文章。 其中一些是高度推薦的,例如本項 。 在我的文章(與我已經閱讀的其他文章不同)中,我打算僅將Eclipse用作編輯器,并將Maven用于大多數與構建和依賴項管理相關的活動。 我相信其他人也會寫類似的文章。 如果您知道任何好的文章,請讓我知道,我也會在這里提及它們。

事不宜遲,讓我們開始使用Maven創建一個普通的Web應用程序。

文件:C:\ partha \ codeRepo \ MavenCommands.bat

ECHO OFF   REM =============================  
REM Set the env. variables.   
REM =============================  
SET PATH=%PATH%;C:\ProgramFiles\apache-maven-3.0.3\bin;  
SET JAVA_HOME=C:\ProgramFiles\Java\jdk1.7.0  REM =============================  
REM Create a vanilla web applicaiton.    
REM =============================  
call mvn archetype:create ^  -DarchetypeArtifactId=maven-archetype-webapp ^  -DarchetypeGroupId=org.apache.maven.archetypes ^  -DgroupId=org.academy ^  -DartifactId=springwebapp001   pause

這將創建一個Web應用程序springwebapp001。 您可以將其部署在任何servlet容器中,并且應該能夠訪問http:// yourmachinename:portnumber / springwebapp001 /。 它應該顯示/springwebapp001/src/main/webapp/index.jsp上可用的任何內容。

現在,我們將使用Spring依賴項,這將使我們能夠將http命中事件劫持到網站上。 在這一步,我發現這篇文章非常有用。 它為您提供了所有Spring依賴項的清單。 盡管有一些事情值得指出。 如果您只在尋找Spring MVC,那么馬上就可以只包括對Spring MVC的依賴而不是整個列表,這似乎并不明顯。 還缺少的是您也需要JSTL。 最后,我認為可能還提到過,Spring預載了公共日志記錄,在我看來,這是很好的,而且確實正在淘汰中–放棄了Logback或Log4j的位置。 所以,net net,我在pom中的依賴項版本看起來像這樣。

檔案:\ springwebapp001 \ pom.xml

[...]  <properties>                                                                   <project.build.sourceencoding>UTF-8</project.build.sourceencoding>         <slf4j.version>1.6.1</slf4j.version>                                       <logback.version>1.0.6</logback.version>                                   <org.springframework.version>3.1.2.RELEASE</org.springframework.version>   <javax.jstl.version>1.2</javax.jstl.version>                               </properties>   [...]  <dependency>                                                                      <groupid>org.springframework</groupid>                                        <artifactid>spring-webmvc</artifactid>                                        <version>${org.springframework.version}</version>                             <exclusions>                                                                  <exclusion>                                                               <groupid>commons-logging</groupid>                                    <artifactid>commons-logging</artifactid>                              </exclusion>                                                              </exclusions>                                                                 
</dependency>     [...]  <dependency>                                  <groupid>javax.servlet</groupid>          <artifactid>jstl</artifactid>             <version>${javax.jstl.version}</version>  
</dependency>     [...]  <dependency>                                 <groupid>org.slf4j</groupid>             <artifactid>slf4j-api</artifactid>       <version>${slf4j.version}</version>      
</dependency>                                
<dependency>                                 <groupid>org.slf4j</groupid>             <artifactid>jcl-over-slf4j</artifactid>  <version>${slf4j.version}</version>      <scope>runtime</scope>                   
</dependency>                                
<dependency>                                 <groupid>org.slf4j</groupid>             <artifactid>slf4j-log4j12</artifactid>   <version>${slf4j.version}</version>      <scope>runtime</scope>                   
</dependency>

現在,我們已經擁有所有依賴項,并且應該能夠進行mvn -e全新安裝,而不會打h。 一旦我們做到了,現在是時候讓Spring參與其中了。 我們需要劫持* .html的所有匹配,并將其交給Spring。

文件:/src/main/webapp/WEB-INF/web.xml

[...]  
<servlet>                                                   <servlet-name>spring</servlet-name>                     <servlet-class>                                         org.springframework.web.servlet.DispatcherServlet   </servlet-class>                                        <load-on-startup>1</load-on-startup>                    
</servlet>                                                  
<servlet-mapping>                                           <servlet-name>spring</servlet-name>                     <url-pattern>*.html</url-pattern>                       
</servlet-mapping>   
[...]

這意味著我們的應用程序將尋找一個spring-servlet.xml,在這里我們需要告訴Spring它需要如何處理其攔截的點擊。

文件:/src/main/webapp/WEB-INF/spring-servlet.xml

<beans xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 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">  <context:component-scan base-package="org.academy.spring3.controllers">  <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" id="viewResolver">  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView">  <property name="prefix" value="/WEB-INF/views/">  <property name="suffix" value=".jsp">  </property></property></property></bean>  
</context:component-scan></beans>

在這里,我們告訴Spring在org.academy.spring3.controllers包中尋找控制器。 讓我們添加一個。

文件:/src/main/java/org/academy/spring3/controllers/HelloWorld.java

@Controller  
public class HelloWorld {  private final static Logger logger = LoggerFactory.getLogger(HelloWorld.class);   @RequestMapping("/helloworld")  public ModelAndView hello(){  logger.debug("In the controller.");   return new ModelAndView("HelloWorld", "message", "Hello world from Spring3.");   }  
}

在這個控制器中,我們告訴Spring攔截對helloworld.html的任何調用,并將控制權移交給hello()。 在這種方法中,我們創建了一個模型。 該模型包含一個名為“ message”的對象,該對象具有字符串“ Spring3的Hello world”。 該模型將移交給名為“ HelloWorld”的視圖。 如果您回頭查看spring-servlet.xml,將會看到“ HelloWorld”轉換為/src/main/webapp/WEB-INF/views/HelloWorld.jsp。 讓我們添加一些代碼。

文件:/src/main/webapp/WEB-INF/views/HelloWorld.jsp

<html>  
<head>  
<title>Spring 3.0 MVC</title>  
</head>  
<body>  
${message}  
</body>  
</html>

這段代碼在編譯時會有些抱怨,因為我們沒有提供配置以進行回送。 以下文件可以解決問題。

文件:/src/main/resources/log4j.properties

# Set root logger level to DEBUG and its only appender to A1.  
log4j.rootLogger=DEBUG, A1  # configure A1 to spit out data in console  
log4j.appender.A1=org.apache.log4j.ConsoleAppender  
log4j.appender.A1.layout=org.apache.log4j.PatternLayout   
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

最后,我們只需要一種方便的方法來調用helloworld.html。 讓我們修改index.jsp。

文件:/src/main/webapp/index.jsp

<html>  
<html>  
<body>  
<h2>Spring 3</h2>  
<a href="http://www.blogger.com/helloworld.html"> Hello world.</a>  
</body>  
</html>

而已。 在任何servlet容器中進行編譯和部署。 您已經啟動并運行了一個Spring 3 MVC裸示例。 搏一搏。

繼續使用Spring 3 MVC處理表單 。

參考:來自Tech Studio for Enterprise博客的JCG合作伙伴 Partho的Spring 3 MVC的Hello World 。


翻譯自: https://www.javacodegeeks.com/2012/08/hello-world-with-spring-3-mvc.html

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

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

相關文章

ansible 安裝

1、簡介 ansible是新出現的自動化運維工具&#xff0c;基于Python開發&#xff0c;集合了眾多運維工具&#xff08;puppet、cfengine、chef、func、fabric&#xff09;的優點&#xff0c;實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基于模塊工作的&#…

JS原型詳解

參考的別人家的博客http://www.cnblogs.com/ljchow/archive/2010/06/08/1753526.html ###JS原型####JS原型&#xff0c;就是原型對象&#xff0c;簡稱原型。不僅構造函數有&#xff0c;普通函數也有* 普通函數&#xff1a;javascript function puTong(){ }; alert(puTong.proto…

c# mysql 插入 和 查詢_C#對數據庫的操作(增刪改查)

1、【在web.config文件中配置】2、【連接字符串】private static readonly string StrCon ConfigurationManager.ConnectionStrings["sqlConnection"].ToString();3、【查詢數據方法】/// /// 查詢數據/// /// 查詢語句/// 參數/// public static DataTable QueryDa…

利用docker在window7下安裝TensorFlow

安裝過程下碰了不少坑&#xff0c;記錄一下安裝過程&#xff0c;方便以后有需要時復用。 1、安裝docker 下載最新版本的docker并且默認安裝即可&#xff0c;安裝后打開Docker Quickstart Terminal&#xff0c;初次進去需要一段時間。 下載網址&#xff1a;https://www.docker.c…

哈希長度擴展攻擊

在這篇文章中&#xff0c;我將盡力避免夏季的低迷&#xff0c;而將重點放在比抱怨天氣更有趣的事情上-哈希長度擴展攻擊。 散列長度擴展攻擊沒什么復雜或復雜的&#xff0c;說實話&#xff0c;這只是關于如何使用散列函數。 正如我以前的一篇文章中所討論的那樣&#xff0c;哈希…

2017年07月03號課堂筆記

2017年07月03號 星期一 多云 空氣質量&#xff1a;輕度污染~中度污染 內容&#xff1a;MySQL第四節課 in和not in&#xff1b;兩個表的內連接&#xff1b;exists和not exsits的使用&#xff1b;all,any和some&#xff1b; 使用子查詢的注意事項&#xff1b;sql優化&#xff08…

excel文件被寫保護怎么解除_u盤被寫保護怎么解除,看完你就知道了

在平常我們使用U盤存儲資料過程中&#xff0c;有時會發現U盤出現無法正常讀寫的現象&#xff0c;具備表現為U盤被寫保護&#xff0c;無法正常執行讀寫操作。對于小編給大家提供以下解決方法&#xff0c;希望對大家能有所幫助。對U盤執行重置操作01上網搜索并下載“USBOOT”程序…

新建MAVEN項目--pom.xml報錯

使用集成了maven的Eclipse版本新建maven項目后&#xff0c;配置文件pom.xml會在project以及引用的xsd文件處出現錯誤&#xff08;第一、二行報錯&#xff09; 其中一個報錯例子&#xff1a; Multiple annotations found at this line:- Plugin execution not covered by lifecy…

OSGi案例研究:模塊化vert.x

OSGi使Java代碼可以清晰地劃分為多個模塊&#xff0c;這些模塊稱為捆綁軟件 &#xff0c;可以訪問由每個捆綁軟件的類加載器控制的代碼和資源。 OSGi 服務提供了一種附加的分離機制&#xff1a;接口的用戶不需要依賴于實現類&#xff0c;工廠等。 以下案例研究旨在使OSGi捆綁包…

mysql一些常用操作_表的一些常用操作_MySQL

bitsCN.com-創建表(也就是創建表結構)&#xff1a;create table tbl_name(列結構&#xff0c;即有哪些屬性)[表選項]; 如&#xff1a;班級的信息&#xff1a;(班級編號&#xff0c;開班日期)create table java_class(class_num varchar(10),date_start date);注&#xff1a;該表…

網站appache的ab命令壓力測試性能

①&#xff1a;相關不錯的博文鏈接&#xff1a;http://johnnyhg.iteye.com/blog/523818 ②&#xff1a;首先配置好對應的環境上去&#xff0c;有對應的命令 ③&#xff1a;壓力測試的指令如下&#xff1a; 1. 最基本的關心兩個選項 -c -n例&#xff1a; ./ab -c 100 -n 10000 &…

如何調整自定義標簽樣式

用chromeF12&#xff0c;查看網頁代碼在自定義標簽上加class&#xff0c;寫樣式&#xff1a;例如&#xff1a;JSP文件&#xff1a;來自為知筆記(Wiz)轉載于:https://www.cnblogs.com/anobugworld/p/7112116.html

無需部署即可測試JPQL / HQL

您是否曾經想在不完全部署應用程序的情況下測試JPQL / HQL&#xff1f; 我們今天在這里看到的是適用于任何JPA實現的簡單解決方案&#xff1a;Hibernate&#xff0c;OpenJPA&#xff0c;EclipseLink等。 這篇文章中找到的基本源代碼來自于本書&#xff1a;“ Pro JPA 2&#xf…

freemarker頁面中文亂碼

一、前言 簡單的記錄freemarker遇到的錯誤問題&#xff1a;ftl頁面中文亂碼 由于freemarker整合在ssm框架中&#xff0c;所以筆者直接貼配置代碼 <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-ins…

了解ThreadLocal背后的概念

介紹 我知道本地線程&#xff0c;但直到最近才真正使用過它。 因此&#xff0c;我開始深入研究該主題&#xff0c;因為我需要一種傳播某些用戶信息的簡便方法 通過Web應用程序的不同層&#xff0c;而無需更改每個調用方法的簽名。 小前提信息 線程是具有自己的調用棧的單個…

python加密模塊教程_Python加密模塊的hashlib,hmac模塊使用解析

這篇文章主要介紹了Python加密模塊的hashlib,hmac模塊使用解析,文中通過示例代碼介紹的非常詳細&#xff0c;對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下在寫搬磚腳本中&#xff0c;碰到一個加密的信號標簽文件無法運行。import hashlibimport timem ha…

DAO層–救援通用

泛型可以是使用編譯時驗證&#xff08;類型安全性&#xff09;的功能來創建可重用代碼的強大工具。 不幸的是&#xff0c;我感到主流開發人員仍然對此感到恐懼。 但是&#xff0c;比喻海格的蜘蛛&#xff0c;我會說泛型是被嚴重誤解的生物……:-) 我希望以下示例可以證明它們…

ThreadLocal詳解(實現多線程同步訪問變量)

ThreadLocal翻譯成中文比較準確的叫法應該是&#xff1a;線程局部變量。 這個玩意有什么用處&#xff0c;或者說為什么要有這么一個東東&#xff1f;先解釋一下&#xff0c;在并發編程的時候&#xff0c;成員變量如果不做任何處理其實是線程不安全的&#xff0c;各個線程都 在操…

SCREEN屏幕編程時候必須保證SCREN中詞典的字段格式必須和數據表中字段的類型長度一致!...

此時任意操作都會出現如下問題 /h調試 回車調試被激活任意操作 執行到第23行時候報錯“請輸入一個數值”&#xff0c;檢查數據表中字段參考數據元素以及對應的域均是char類型&#xff0c;此時檢查screen屏幕設置字段類型&#xff0c;/n退出程序 重新進入程序 單擊 點擊屏幕9000…

mysql 阿里云 版本_關于阿里云centos版本,mysql5.7的一些注意事項

1.阿里云進去mysql是默認已經安裝好了的&#xff0c;只需要修改root用戶的密碼。關于修改密碼&#xff1a;1)登陸阿里云&#xff0c;進入root目錄&#xff0c;會有mysql的.sh文件&#xff0c;可以通過運行該文件得到初始密碼。此時用初始密碼登陸mysql&#xff0c;use mysql 切…