Hello World with Spring 3 MVC

在2005年,我对Martin Fowler的这篇文章对Spring进行了介绍。从那时起,我就修改了许多IoC框架,包括GuicePicoContainerNanoContainer等。虽然我很喜欢与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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值