spring mvc 学习案例

上传人:第*** 文档编号:32697474 上传时间:2018-02-12 格式:DOC 页数:21 大小:325.50KB
返回 下载 相关 举报
spring mvc 学习案例_第1页
第1页 / 共21页
spring mvc 学习案例_第2页
第2页 / 共21页
spring mvc 学习案例_第3页
第3页 / 共21页
spring mvc 学习案例_第4页
第4页 / 共21页
spring mvc 学习案例_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《spring mvc 学习案例》由会员分享,可在线阅读,更多相关《spring mvc 学习案例(21页珍藏版)》请在金锄头文库上搜索。

1、1. Spring MVC 学习案例 标签: springmvcservletstring web服务 hashmap 2012-03-28 10:14 2048人阅读 评论(0) 收藏 举报 Spring MVC学习指南以下这个学习案例是我最近学习 Spring MVC时跟从一本书上的示例,原文中的示例代码有一些小错误,不过我在调试的过程中已经给予了修正,如还有其它错误,还请各位批评指正。对于现有较成熟的 Model-View-Control(MVC)框架而言,其解决的主要问题无外乎下面几部分:1 将 Web页面中的输入元素封装为一个(请求)数据对象。2 根据请求的不同,调度相应的逻辑处理单

2、元,并将(请求)数据对象作为参数传入。3 逻辑处理单元完成运算后,返回一个结果数据对象。4 将结果数据对象中的数据与预先设计的表现层相融合并展现给用户。各个 MVC 实现固然存在差异,但其中的关键流程大致如上。结合一个实例,我们来看看这几个关键流程在 Spring MVC框架中的处理手法。下面的实例,实现了一个常见的用户登录逻辑,即用户通过用户名和密码登录,系统对用户名和密码进行检测,如果正确,则在页面上显示几条通知信息。如果登录失败,则返回失败界面。(示例中,表示层以 JSP2.0实现。)出于简洁考虑,这里的“用户名/密码”检测以及通知信息的生成均在代码中以硬编码实现。首先来看登录界面:对应

3、的 index.html:登录用户名:密 码 :很简单的一个登录界面,其中包含了一个用以输入用户名密码的 form,针对此form的提交将被发送到login.doMVC 关键流程的第一步,即收集页面输入参数,并转换为请求数据对象。这个静态页面提供了一个基本的输入界面,下面这些输入的数据将被发送至何处,将如何被转换为请求数据对象?现在来看接下来发发生的事情:当用户输入用户名密码提交之后,此请求被递交给 Web 服务器处理,上面我们设定 form提交目标为login.do,那么 Web服务器将如何处理这个请求?显然,标准 Http 协议中,并没有以.do 为后缀的服务资源,这是我们自己定义的一种请

4、求匹配模式。此模式在 web.xml中设定:Dispatcherorg.springframework.web.servlet.DispatcherServletcontextConfigLocation/WEB-INF/Config.xmlDispatcher*.do Servlet 定义这里我们定义了请求分发 Servlet,即:org.springframework.web.servlet.DispatcherServletDispatcherServlet 是 Spring MVC 中负责请_求调度的核心引擎,所有的请求将由此 Servlet 根据配置分发至各个逻辑处理单元。其内部同时

5、也维护了一个ApplicationContext实例。我们在节点中配置了名为“contextConfigLocation”的Servlet参数,此参数指定了 Spring配置文件的位置“/WEB-INF/Config.xml”。如果忽略此设定,则默认为“/WEB-INF/-servlet.xml”,其中以 Servlet 名替换(在当前环境下,默认值也就是“/WEB-INF/Dispatcher-servlet.xml)。 请求映射我们将所有以.do 结尾的请求交给 Spring MVC进行处理。当然,也可以设为其他值,如.action、.action 等。通过以上设定,Web 服务器将把登录

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

7、t.xiaxin.action.LoginInfologinfailmain Resolver 设定Resolver将把输出结果与输出界面相融合,为表现层提供呈现资源。 View Resolver 的 viewClass参数这里我们使用 JSP页面作为输出,因此,设定为:org.springframework.web.servlet.view.JstlView其余可选的 viewClass还有: org.springframework.web.servlet.view.freemarker.FreeMarkerView(用于基于 FreeMarker模板的表现层实现) org.springfr

8、amework.web.servlet.view.velocity.VelocityView(用于基于 velocity模板的表现层实现)等。 View Resolver 的 prefix和 suffix参数指定了表现层资源的前缀和后缀,运行时,Spring 将为指定的表现层资源自动追加前缀和后缀,以形成一个完整的资源路径。另参见 “请求/处理单元”关系映射可以看到,这里我们将“/login.do”请求映射到处理单元 LoginAction。节点下可以有多个映射关系存在,目前我们只定义了一个。 LoginAction 定义这里定义了逻辑处理单元 LoginAction 的具体实现,这里,Log

9、inAction 的实现类为 net.xiaxin.action.LoginAction。 LoginAction 的请求数据对象commandClass 参数源于 LoginAction 的基类 BaseCommandController,BaseCommandControlle 包含了请求数据封装和验证方法( BaseCommandController.bindAndValidate ) , 它将根据传入的HttpServletRequest构造请求数据对象。这里我们指定 commandClass 为 net.xiaxin.action.LoginInfo,这是一个非常简单的 Java B

10、ean,它封装了登录请求所需的数据内容:public class LoginInfo private String username;private String password;public String getPassword() return password;public void setPassword(String password) this.password = password;public String getUsername() return username;public void setUsername(String username) this.username

11、= username;Spring会根据 LoginAction的 commandClass定义自动加载对应的 LoginInfo实例。之后,对 Http 请求中的参数进行遍历,并查找 LoginInfo 对象中是否存在与之同名的属性,如果找到,则将此参数值复制到 LoginInfo对象的同名属性中.请求数据转换完成之后,我们得到了一个封装了所有请求参数的 Java 对象,并将此对象作为输入参数传递给 LoginAction。 返回视图定义对于这里的 LoginAction 而言,有两种返回结果,即登录失败时返回错误界面,登录成功时进入系统主界面。对应我们配置了 fail_view、succe

12、ss_view 两个自定义参数。参数值将由 Resolver进行处理,为其加上前缀后缀,如对于 fail_view而言,实际的视图路径为/WEB-INF/view/loginfail.jsp。之后,Resolver 会将 LoginAction的返回数据与视图相融合,返回最终的显示界面。业务逻辑处理单元:LoginAction.java:public class LoginAction extends SimpleFormController private String fail_view;private String success_view;protected ModelAndView

13、onSubmit( Object cmd,BindException ex)throws Exception LoginInfo loginInfo = (LoginInfo) cmd; HashMap result_map = new HashMap();if (login(loginInfo) = 0) result_map.put(logininfo, loginInfo);List msgList = new LinkedList();msgList.add(msg1);msgList.add(msg2);msgList.add(msg3);result_map.put(message

14、s, msgList);return newModelAndView(this.getSuccess_view(), result_map); else result_map.put(failmsg, new String(Sorry, you input the wrong username or password!);return new ModelAndView(this.getFail_view(), result_map);private int login(LoginInfo loginInfo) if (Erica.equalsIgnoreCase(loginInfo.getUs

15、ername()& mypass.equals(loginInfo.getPassword() return 0;return 1;public String getFail_view() return fail_view;public String getSuccess_view() return success_view;public void setFail_view(String string) fail_view = string;public void setSuccess_view(String string) success_view = string;其中: onSubmit

16、 方法我们在子类中覆盖了父类的 onSubmit方法;而 onSubmit方法用于处理业务请求。负责数据封装和请求分发的 Dispatcher,将对传入的 HttpServletRequest进行封装,形成请求数据对象,之后根据配置文件,调用对应业务逻辑类的入口方法(这里就是 LoginAction)的 onSubmit()方法,并将请求数据对象及其他相关资源引用传入。protected ModelAndView onSubmit(Object cmd,BindException ex)onSubmit方法包含了两个参数:Object cmd 和 BindException ex。前面曾经多次提到请求数据对象,这个名为 cmd的 Object型参数,正是传入的请求数据对象的引用。BindExcept

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号