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.mzph.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 切…