千家信息网

spring-mvc中如何实现后端控制器

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,小编给大家分享一下spring-mvc中如何实现后端控制器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.概述Sprin
千家信息网最后更新 2024年11月11日spring-mvc中如何实现后端控制器

小编给大家分享一下spring-mvc中如何实现后端控制器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1.概述SpringMVC后端控制器

为了方便开发人员快捷地建立适合特定应用的后端控制器,springMVC实现Controller接口,自定义了许多特定控制器。这些控制器的层次关系如下:

-AbstractController

-AbstractUrlViewController

-UrlFilenameViewController

-BaseCommandController

-AbstractCommandController

-AbstractFormController

-AbstractWizardFormController

-SimpleFormController

-CancellableFormController

-MultiActionController

-ParameterizableViewController

-ServletForwardingController

-ServletWrappingController

下面重点分析两个特色控制器:

2.SimpleFormController控制器

在正式开发前,请先熟悉上前面的HelloWord实例。在保证熟悉前一个实例后,我们建立名为springMVC_02_controllerweb项目,并导入相关的jar包。

步骤一:建立后端控制器RegControl.java代码如下:

Java代码

package com.asm;     //...省略导入的相关类     public class RegControl extends SimpleFormController{         @SuppressWarnings("deprecation")         public RegControl() {             setCommandClass(User.class);         }             protected ModelAndView processFormSubmission(HttpServletRequest arg0, HttpServletResponse arg1,                 Object formbean, BindException arg3) throws Exception {             User user = (User) formbean;             ModelAndView mav = new ModelAndView("hello");             mav.addObject("message", "Hello World!");             mav.addObject("user", user);             return mav;         }             protected ModelAndView showForm(HttpServletRequest arg0, HttpServletResponse arg1, BindException arg2)                 throws Exception {             return null;         }     }

User.java,代码如下:

Java代码

package com.asm;     public class User {         private String username;         private int age;         //省略getter/setter方法     }

简要说明:如果熟悉struts1.x相信很容易理解Object formbean参数,其实它就是和表单属性打交道的一个对象,也即是说表单参数会依据一定的规则填充给formbean对象。在struts1.x中,如果像把这种与formbean转换成User对象,必须要求User继承自ActionForm类,这样才能把一个表单参数转换成一个具体的formbean对象(所谓具体实质是指参数formbean对象已经能成功地赋值给User对象)并与相应的Action绑定。但springmvc并不要求这种User一定要继承某个类,既然springmvc对这种User没有要求,那表单参数是怎样与User进行***匹配的,注意在RegControl构造方法中有如下一句代码:setCommandClass(User.class); 这句代码就指明了此控制器绑定User类来和表单进行匹配。如果想验证此句代码的作用,可以注释掉这句代码并查看异常。后面将会分析这种控制器的一个执行过程(包括表单填充及验证过程)

概述此步要点:(1)继承SimpleFormController类(2)构造器中调用setCommandClass方法绑定定命令对象(这里为User类)(3)转换formbean为User类进行业务逻辑操作

步骤二:配置web.xml(和前面HelloWorld实例一样,在此省略)

步骤三:配置spmvc-servlet.xml文件,代码如下:

Xml代码

                    bean>                                            regControlprop>                            props>        property>    bean>    bean>

步骤四:根据配置文件完善相应页面

在index.jsp设定表单填写页面,主要代码如下:

用户名:
年龄:
form>

/page/hello.jsp,主要代码如下:

      世界,你好!(WEB-INF/page)       用户名:${user.username }       年龄:${user.age }   body>

步骤五:启动服务器,访问到首页,填写表单完成测试。

3.细研SimpleController控制器

在RegControl.java中增加如下代码:

Java代码

protected Object formBackingObject(HttpServletRequest request) throws Exception {             System.out.println("formBackingObject方法执行-->01");             setCommandClass(User.class); //也可在此处调用setCommandClass方法             return super.formBackingObject(request);         }             protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {             System.out.println("initBinder方法执行-->02");             super.initBinder(request, binder);         }                  protected void onBind(HttpServletRequest request, Object command) throws Exception {             System.out.println("onBind方法执行-->03");             super.onBind(request, command);         }                  protected void onBindAndValidate(HttpServletRequest request, Object command, BindException errors)                 throws Exception {             System.out.println("onBindAndValidate方法执行-->04");             super.onBindAndValidate(request, command, errors);         }

下面简要分析执行过程:

(1).当前端控制器把请求转交给此此控制器后,会首先调用formBackingObject方法,此方法的作用就是根据绑定的Command Class来创建一个Command对象,因此除了可以在构造方法中调用setCommandClass方法,也可以在此处调用setCommandClass方法。其实创建这个Command对象很简单,spring通过如下代码完成:

BeanUtils.instantiateClass(this.commandClass);

由于在此处必须根据commandClass来完成Command对象的创建,因此在此方法调用前应保证commandClass设置完成,所以我们可以在formBackingObject方法和构造方法中完成commandClass的设置。

(2).调用initBinder方法,初始化Command对象,即把表单参数与Command字段按名称进行匹配赋值。

(3).调用onBind方法,把Command对象和后端控制器绑定。

(4).调用onBindAndValidate方法,验证用户输入的数据是否合法。如果验证失败,我们可以通过修改errors参数,即新的errors对象将会绑定到ModelAndView上并重新回到表单填写页面。

(5).执行processFormSubmission方法,主要操作就是把绑定的Command对象转换成一个User这样的表单对象,并调用业务逻辑方法操作User对象,根据不同的逻辑返回不同的ModelAndView对象。

4.MultiActionController控制器

此控制器来将多个请求处理方法合并在一个控制器里,这样可以把相关功能组合在一起(它和struts1.x中的DispatchAction极为相似)。下面通过实例演示此控制器的使用。

步骤一:在springMVC_02_controllerweb项目下,建立后端控制器UserManagerController.java,代码如下:

Java代码

package com.asm;     //...省略导入的相关类     public class UserManagerController extends MultiActionController {         public ModelAndView list(HttpServletRequest request, HttpServletResponse response) {             ModelAndView mav = new ModelAndView("list");             return mav;         }             public ModelAndView add(HttpServletRequest request, HttpServletResponse response) {             ModelAndView mav = new ModelAndView("add");             return mav;         }             public ModelAndView edit(HttpServletRequest request, HttpServletResponse response) {             ModelAndView mav = new ModelAndView("edit");                     return mav;         }         }

步骤二:配置web.xml(参前面实例),并在spmvc-servlet.xml中增加如下配置:

Xml代码

                                                listprop>                    addprop>                    editprop>                props>            property>        bean>                                    property>        bean>

说明:methodNameResolver负责从请求中解析出需要调用的方法名称。Spring本身已经提供了一系列 MethodNameResolver的实现,当然也可以编写自己的实现。在这里我们使用了Pro方式来解析,具体表现如下:

list 请求list.do时调用list方法

add 请求为add.do时调用add方法

edit 请求为edit.do时调用edit方法

然后通过把springMethodNameResolver解析器注入给UserManagerController的methodNameResolver,这样配置后才完成了一个真正的具有请求转发能力的MultiActionController控制器对象--UserManagerController 强调:此步骤实质完成了一个工作:就是为UserManagerController控制器配置一个方法解析器。

步骤三:配置请求转发的访问路径,在spmvc-servlet.xml中添加如下代码

Xml代码

                                                                userManagerControllerprop>                    userManagerControllerprop>                    userManagerControllerprop>                props>            property>        bean>

步骤四:根据配置文件,完善jsp页面编写。

page/list.jsp,代码如下:

      用户列表页面   body>

page/add.jsp,代码如下:

      用户添加页面   body>

page/edi.jsp,代码如下:

      用户修改页面   body>

步骤五:启动服务器,访问…/list.do将调用到list方法并转向到list.jsp页面。

补充:细说MethodNameResolver解析器

InternalPathMethodNameResolver:默认MethodNameResolver解析器,从请求路径中获取文件名作为方法名。比如,…/list.do的请求会调用list(HttpServletRequest,HttpServletResponse)方法。

ParameterMethodNameResolver:解析请求参数,并将它作为方法名。比如,对应…/userManager.do?method=add的请求,会调用 add(HttpServletRequest, HttpServletResponse)方法。使用paramName属性定义要使用的请求参数名称。

PropertiesMethodNameResolver :使用用户自定义的属性(Properties)对象,将请求的URL映射到方法名,具体可以参见实例。

使用ParameterMethodNameResolver作为MethodNameResolver的解析器时,主要配置代码如下:

Xml代码

                                                userManagerControllerprop>                props>            property>        bean>                        property>        bean>                                    property>        bean>

访问路径为…/user.do?crud=list(add|edit)


以上是"spring-mvc中如何实现后端控制器"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

方法 代码 控制器 控制 对象 步骤 表单 配置 参数 页面 用户 实例 就是 文件 验证 名称 属性 时调 篇文章 路径 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发主管核心职责 巴州佰纳软件开发有限公司 直销软件开发什么品牌好 网络安全大队长上级 服务器有几个网卡怎么看 数据库高级语言有哪些 学生网络安全分为哪几类 取消照片数据库 网络安全意识和责任担当 私有云登录服务器无法连接 登记小米账号服务器错误操作失败 成都软件开发驻场需要多少钱 网络安全国家职业 数据库的一般设计步骤为 合山微信小程序数据库接口 黑暗之魂3服务器维护到什么时候 数据库原理sql语句 数据库查找空白语句 明确和落实系统网络安全责任 进口串口通信服务器多少钱 数据库数据需求描述 小学生网络安全教育教案博客 华为海思软件开发做什么的 用什么工具做教学软件开发 服务器蓝屏查看系统日志 深圳市互联网金融网络科技有 美句数据库 软件开发任务完成情况描述 中国网络安全公司龙头 七日杀连接不了朋友服务器
0