您好,欢迎来到微智科技网。
搜索
您的当前位置:首页Spring MVC 实战教程

Spring MVC 实战教程

来源:微智科技网
Spring MVC Spring MVC 实战教程

对于现有较成熟的Model-View-Control(MVC)框架而言,其解决的主要问题无外乎下面几部分:

1.将Web页面中的输入元素封装为一个(请求)数据对象。

2.根据请求的不同,调度相应的逻辑处理单元,并将(请求)数据对象作为参数传入。 3.逻辑处理单元完成运算后,返回一个结果数据对象。

4.将结果数据对象中的数据与预先设计的表现层相融合并展现给用户。

各个MVC 实现固然存在差异,但其中的关键流程大致如上。结合一个实例,我们来看看这几个关键流程在Spring MVC框架中的处理手法。

下面的实例,实现了一个常见的用户登录逻辑,即用户通过用户名和密码登录,系统对用户名和密码进行检测,如果正确,则在页面上显示几条通知信息。如果登录失败,则返回失败界面。

新建web工程

引入所需要的jar包,此处我采用的spring的版本为spring-framework-2.5.6。解压后在dist/modules目录下所有的jar包,另外还需要apache的日志包commons-logging.jar,将这些jar包放于工程下WEB-INF/lib目录下,如图示:

首先来看登录界面

仅供大家交流学习如有问题联系mail:wick.huang@hotmail.com

Spring MVC

对应的index.html

登录


用户名:
密码:

很简单的一个登录界面,其中包含了一个用以输入用户名密码的form,针对此form的提交将被发送到

\"login.do\"

接下来在web.xml中做如下配置

Servlet定义

这里我们定义了请求分发Servlet,即:

org.springframework.web.servlet.DispatcherServlet,DispatcherServlet是Spring MVC 中负责请求调度的核心引擎,所有的请求将由此Servlet 根据配置分发至各个逻辑处理单元。其内部同时也维护了一个ApplicationContext实例。我们在节点中配仅供大家交流学习如有问题联系mail:wick.huang@hotmail.com

Spring MVC

置了名为“contextConfigLocation”的Servlet参数,此参数指定了Spring配置文件的位置“/WEB-INF/Config.xml”。如果忽略此设定,

则默认为“/WEB-INF/-servlet.xml”,其中以Servlet 名替换(在当前环境下,默认值也就是“/WEB-INF/Dispatcher-servlet.xml)。 等。

通过以上设定,Web 服务器将把登录界面提交的请求转交给Dispatcher 处理,Dispatcher将提取请求(HttpServletRequest)中的输入数据,分发给对应的处理单元,各单元处理完毕后,将输出页面返回给Web服务器,再由Web服务器返回给用户浏览器。Dispatcher 根据什么分发这些请求?显然,我们还需要一个配置文件加以设定。这也就是上面提及的Config.xml,此文件包含了所有的“请求/处理单元”关系映射设定,以及返回时表现层的一些属性设置。

请求映射

我们将所有以.do结尾的请求交给Spring MVC进行处理。当然,也可以设为其他值,如.action、.action

Resolver将把输出结果与输出界面相融合,为表现层提供呈现资源。 View Resolver的viewClass参数这里我们使用JSP页面作为输出,因此,设定为:org.springframework.web.servlet.view.JstlView其余可选的viewClass还有:

 org.springframework.web.servlet.view.freemarker.FreeMarkerView

仅供大家交流学习如有问题联系mail:wick.huang@hotmail.com

Spring MVC

(用于基于FreeMarker模板的表现层实现)

org.springframework.web.servlet.view.velocity.VelocityView (用于基于velocity模板的表现层实现)

View Resolver的prefix和suffix参数指定了表现层资源的前缀和后缀,运行时,Spring

将为指定的表现层资源自动追加前缀和后缀,以形成一个完整的资源路径

“请求/处理单元”关系映射可以看到,这里我们将“/login.do”请求映射到处理单元

LoginAction。节点下可以有多个映射关系存在,目前我们只定义了一个。

LoginAction定义这里定义了逻辑处理单元LoginAction的具体实现,这里,LoginAction的实现 类为org.nacl.action.LoginAction。

LoginAction的请求数据对象commandClass参数源于LoginAction的基类BaseCommandController,BaseCommandControlle包含了请求数据封装和验证方法

(BaseCommandController.bindAndValidate),它将根据传入的HttpServletRequest构造请求数据对象。这里我们指定commandClass为org.nacl.action.LoginInfo,这是一个非常普通的Java Bean,它封装了登录请求所需的数据内容:

Spring会根据LoginAction的commandClass定义自动加载对应的LoginInfo实例。之后,对Http 请求中的参数进行遍历,并查找LoginInfo对象中是否存在与之同名的属性,如果找到,则将此参数值复制到LoginInfo对象的同名属性中.请求数据转换完成之后,我们得到了一个封装了所有请求参数的Java 对象,并将此对象作为输入参数传递给LoginAction。

返回视图定义

对于这里的LoginAction而言,有两种返回结果,即登录失败时返回错误界面,登录成功时进入系统主界面。对应我们配置了fail_view、success_view两个自定义参数。参数值将由Resolver进行处理,为其加上前缀后缀,如对于fail_view而言,实际的视图路径为/WEB-INF/view/loginfail.jsp。之后,Resolver 会将LoginAction的返回数据与视图相融合,返回最终的显示界面

业务逻辑处理单元:LoginAction.java

仅供大家交流学习如有问题联系mail:wick.huang@hotmail.com

Spring MVC

onSubmit方法

我们在子类中覆盖了父类的onSubmit方法;而onSubmit方法用于处理业务请求。负责数据封装和请求分发的Dispatcher,将对传入的HttpServletRequest进行封装,形成请求数据对象,之后根据配置文件,调用对应业务逻辑类的入口方法(这里就是LoginAction)的onSubmit()方法,并将请求数据对象及其他相关资源引用传入。

onSubmit方法包含了两个参数:Object cmd和BindException ex。前面曾经多次提到请求数据对象,仅供大家交流学习如有问题联系mail:wick.huang@hotmail.com

Spring MVC

这个名为cmd的Object型参数,正是传入的请求数据对象的引用。BindException ex参数则提供了数据绑定错误的跟踪机制。它作为错误描述工具,用于向上层反馈错误信息。在Spring MVC中,BindException将被向上层表现层反馈,以便在表现层统一处理异常情况(如显示对应的错误提示)

返回处理结果

ModelAndView类包含了逻辑单元返回的结果数据集和表现层信息。ModelAndView本身起到关系保存的作用。它将被传递给Dispatcher,由Dispatcher 根据其中保存的结果数据集和表现层设定合成最后的界面。

最后来看看返回界面main.jsp:

代码如下:

仅供大家交流学习如有问题联系mail:wick.huang@hotmail.com

Spring MVC

工程的总体目录结构如下

仅供大家交流学习如有问题联系mail:wick.huang@hotmail.com

Spring MVC

至此,就可以部署在应用服务器上运行了

仅供大家交流学习如有问题联系mail:wick.huang@hotmail.com

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务