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