千家信息网

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

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下spring-mvc中如何实现后端控制器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.概述Sprin
千家信息网最后更新 2026年11月03日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安全错误 数据库的锁怎样保障安全 华服互联网科技靠谱吗 广州为想互联网科技有限公司 互联网佳科技有限公司 互联网是不是新科技 关于新基建和互联网科技 互联网科技开发公司 北京互联网科技公司 美国互联网科技 赫美联合互联网科技 掌上梦互联网科技 互联网科技大会 老年人脱离互联网科技的作文 北京华百购互联网科技有限公司 互联网大会黑科技排名 深圳育鹏互联网科技有限公司招聘 企晟互联网信息科技有限公司 广东工业互联网大赛深圳学泰科技 梅州GM互联网络科技有限公司 陕西云淼互联网科技公司 互联网公司属于科技吗 精品咖啡豆 互联网科技公司怎么样 小马过河互联网科技 互联网科技股午盘股票涨跌 北京华百购互联网科技有限公司 成都互联网科技公司工作好不好 健康食品互联网创新科技园项目 梅州GM互联网络科技有限公司 启辰互联网科技 唯美互联网科技
0