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