`

Controller接口控制器详解(7 )

阅读更多

4.16.2、数据验证

1、数据绑定失败:比如需要数字却输入了字母;

2、数据不合法:可以认为是业务错误,通过自定义验证器验证,如用户名长度必须在5-20之间,我们却输入了100个字符等;

3、错误对象:当我们数据绑定失败或验证失败后,错误信息存放的对象,我们叫错误对象,在Spring Web MVC中Errors是具体的代表者;线程不安全对象;

4、错误消息:是硬编码,还是可配置?实际工作应该使用配置方式,我们只是把错误码(errorCode)放入错误对象,在展示时读取相应的错误消息配置文件来获取要显示的错误消息(errorMessage);

 

4.16.2.1、验证流程

1、首先进行数据绑定验证,如果验证失败会通过MessageCodesResolver生成错误码放入Errors错误对象;

2、数据不合法验证,通过自定义的验证器验证,如果失败需要手动将错误码放入Errors错误对象;

4.16.2.2、错误对象和错误消息

错误对象的代表者是Errors接口,并且提供了几个实现者,在Spring Web MVC中我们使用的是如下实现:

相关的错误方法如下:

Errors存储和暴露关于数据绑定错误和验证错误相关信息的接口,提供了相关存储和获取错误消息的方法:

 
  1. package org.springframework.validation;  

  2. public interface Errors {  

  3.  //=========================全局错误消息(验证/绑定对象全局的)============================= 

  4.  //注册一个全局的错误码()  

  5.  void reject(String errorCode);  

  6.  //注册一个全局的错误码,当根据errorCode没有找到相应错误消息时,使用defaultMessage作为错误消息  

  7.  void reject(String errorCode, String defaultMessage);  

  8.  //注册一个全局的错误码,当根据errorCode没有找到相应错误消息时(带错误参数的),使用defaultMessage作为错误消息  

  9.  void reject(String errorCode, Object[] errorArgs, String defaultMessage);  

  10.  //=========================全局错误消息(验证/绑定整个对象的)============================= 

  11.  //=========================局部错误消息(验证/绑定对象字段的)============================= 

  12.  //注册一个对象字段的错误码,field指定验证失败的字段名  

  13.  void rejectValue(String field, String errorCode);  

  14.  void rejectValue(String field, String errorCode, String defaultMessage);  

  15.  void rejectValue(String field, String errorCode, Object[] errorArgs, String defaultMessage);  

  16.  //=========================局部错误消息(验证/绑定对象字段的)============================= 

  17.  boolean hasErrors();      ////是否有错误  

  18.  boolean hasGlobalErrors(); //是否有全局错误  

  19.  boolean hasFieldErrors();  //是否有字段错误  

  20.  Object getFieldValue(String field); //返回当前验证通过的值,或验证失败时失败的值;  

  21. }  

 

getFieldValue:可以得到验证失败的失败值,这是其他Web层框架很少支持的,这样就可以给用户展示出错时的值(而不是空或其他的默认值等)。

 

BindingResult代表数据绑定的结果,继承了Errors接口。

BindException代表数据绑定的异常,它继承Exception,并实现了BindingResult,这是内部使用的错误对象。

 

示例:

(1、控制器

 
  1. package cn.javass.chapter4.web.controller;  

  2. //省略import  

  3. public class ErrorController extends AbstractCommandController {  

  4.       public ErrorController() {  

  5.              setCommandClass(DataBinderTestModel.class);  

  6.              setCommandName("command");  

  7.       }  

  8.       @Override  

  9.       protected ModelAndView handle(HttpServletRequest req, HttpServletResponse resp, Object command, BindException errors) throws Exception {    

  10.              //表示用户名不为空  

  11.              errors.reject("username.not.empty");  

  12.              //带有默认错误消息  

  13.              errors.reject("username.not.empty1""用户名不能为空1");  

  14.              //带有参数和默认错误消息          

  15.              errors.reject("username.length.error"new Object[]{510});  

  16.              

  17.              //得到错误相关的模型数据  

  18.              Map model = errors.getModel();  

  19.              return new ModelAndView("bindAndValidate/error", model);  

  20.       }  

  21. }  

 

errors.reject("username.not.empty")注册全局错误码“username.not.empty”,我们必须提供messageSource来提供错误码“username.not.empty”对应的错误信息(如果没有会抛出NoSuchMessageException异常);

 

errors.reject("username.not.empty1", "用户名不能为空1")注册全局错误码“username.not.empty1”,如果从messageSource没没有找到错误码“username.not.empty1”对应的错误信息,则将显示默认消息“用户名不能为空1”;

 

errors.reject("username.length.error", new Object[]{5, 10})错误码为“username.length.error”,而且错误信息需要两个参数,如我们在我们的配置文件中定义“用户名长度不合法,长度必须在{0}到{1}之间”,则实际的错误消息为“用户名长度不合法,长度必须在5到10之间”

errors.getModel()当有错误信息时,一定将errors.getModel()放入我们要返回的ModelAndView中,以便使用里边的错误对象来显示错误信息。

 

(2、spring配置文件chapter4-servlet.xml

 
  1. <bean id="messageSource"  

  2.      class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  

  3.    <property name="basename" value="classpath:messages"/>  

  4.    <property name="fileEncodings" value="utf-8"/>  

  5.    <property name="cacheSeconds" value="120"/>  

  6. </bean>  

  7.  

  8. <bean name="/error" class="cn.javass.chapter4.web.controller.ErrorController"/>  

 

messageSource用于获取错误码对应的错误消息的,而且bean名字默认必须是messageSource。

 

messages.properties(需要执行NativeToAscii)

 
  1. username.not.empty=用户名不能为空  

  2. username.length.error=用户名长度不合法,长度必须在{0}到{1}之间  

 

3、视图页面(WEB-INF/jsp/bindAndValidate/error.jsp

 
  1. <%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>  

  2. <!-- 表单的默认命令对象名为command -->  

  3. <form:form commandName="command">  

  4.    <form:errors path="*"></form:errors>  

  5. </form:form>  

 

form标签库:此处我们使用了spring的form标签库;

<form:form commandName="command">:表示我们的表单标签,commandName表示绑定的命令对象名字,默认为command;

<form:errors path="*"></form:errors>表示显示错误信息的标签,如果path为“*”表示显示所有错误信息。

 

接下来我们来看一下 数据绑定失败和数据不合法时,如何处理。

4.16.2.3、数据绑定失败

如我们的DataBinderTestModel类:

bool:boolean类型,此时如果我们前台传入非兼容的数据,则会数据绑定失败;

date:Date类型,此时如果我们前台传入非兼容的数据,同样会数据绑定失败;

phoneNumber:自定义的PhoneNumberModel类型,如果如果我们前台传入非兼容的数据,同样会数据绑定失败。

 

示例:

(1、控制器,DataBinderErrorTestController

 
  1. package cn.javass.chapter4.web.controller;  

  2. //省略import  

  3. public class DataBinderErrorTestController extends SimpleFormController {  

  4.       public DataBinderErrorTestController() {  

  5.              setCommandClass(DataBinderTestModel.class);  

  6.              setCommandName("dataBinderTest");  

  7.       }  

  8.       @Override  

  9.       protected ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, BindException errors) throws Exception {  

  10.              //如果表单提交有任何错误都会再回到表单展示页面  

  11.              System.out.println(errors);  

  12.              return super.showForm(request, response, errors);  

  13.       }  

  14.       @Override  

  15.       protected void doSubmitAction(Object command) throws Exception {  

  16.              System.out.println(command); //表单提交成功(数据绑定成功)进行功能处理  

  17.    }  

  18.       @Override  

  19.       protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {  

  20.              super.initBinder(request, binder);  

  21.              //注册自定义的属性编辑器  

  22.              //1、日期  

  23.              DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  

  24.              CustomDateEditor dateEditor = new CustomDateEditor(df, true);  

  25.              //表示如果命令对象有Date类型的属性,将使用该属性编辑器进行类型转换  

  26.              binder.registerCustomEditor(Date.class, dateEditor);  

  27.              

  28.              //自定义的电话号码编辑器  

  29.              binder.registerCustomEditor(PhoneNumberModel.classnewPhoneNumberEditor());  

  30.       }  

  31. }  

此处我们使用SimpleFormController;

showForm展示表单,当提交表单有任何数据绑定错误会再回到该方法进行表单输入(在此处我们打印错误对象);

doSubmitAction表单提交成功,只要当表单的数据到命令对象绑定成功时,才会执行;

 

(2、spring配置文件chapter4-servlet.xml

 
  1. <bean name="/dataBindError"  

  2. class="cn.javass.chapter4.web.controller.DataBinderErrorTestController">  

  3.   <property name="formView" value="bindAndValidate/input"/>  

  4.   <property name="successView" value="bindAndValidate/success"/>  

  5. </bean>  

 

3、视图页面(WEB-INF/jsp/bindAndValidate/ input.jsp

 
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8"%>  

  2. <%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>  

  3. <!-- 表单的命令对象名为dataBinderTest -->  

  4. <form:form commandName="dataBinderTest">  

  5.    <form:errors path="*" cssStyle="color:red"></form:errors><br/><br/>  

  6.    bool:<form:input path="bool"/><br/>  

  7.    phoneNumber:<form:input path="phoneNumber"/><br/>  

  8.    date:<form:input path="date"/><br/>  

  9.    <input type="submit" value="提交"/>  

  10. </form:form>  

 

此处一定要使用form标签库,借此我们可以看到它的强大支持(别的大部分Web框架所不具备的,展示用户验证失败的数据)。

 

<form:form commandName="dataBinderTest">:指定命令对象为dataBinderTest,默认command;

<form:errors path="*" cssStyle="color:red"></form:errors>:显示错误消息,当提交表单有错误时展示错误消息(数据绑定错误/数据不合法);

<form:input path="bool"/>:等价于(<input type=’text’>),但会从命令对象中取出bool属性进行填充value属性,或如果表单提交有错误会从错误对象取出之前的错误数据(而非空或默认值);

<input type="submit" value="提交"/>:spring没有提供相应的提交按钮,因此需要使用html的。

 

(4、测试

在地址栏输入如下地址:http://localhost:9080/springmvc-chapter4/dataBindError

全部是错误数据,即不能绑定到我们的命令对象;

 

当提交表单后,我们又回到表单输入页面,而且输出了一堆错误信息

1、错误消息不可读;

2、表单元素可以显示之前的错误的数据,而不是默认值/空;

 

(5、问题

这里最大的问题是不可读的错误消息,如何让这些错误消息可读呢?

 

首先我们看我们的showForm方法里输出的“errors”错误对象信息:

 
  1. org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 3 errors  

  2.  

  3. Field error in object 'dataBinderTest' on field 'bool': rejected value [www]; codes [typeMismatch.dataBinderTest.bool,typeMismatch.bool,typeMismatch.boolean,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [dataBinderTest.bool,bool]; arguments []; default message [bool]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'boolean'for property 'bool'; nested exception is java.lang.IllegalArgumentException: Invalidboolean value [www]]  

  4.  

  5. Field error in object 'dataBinderTest' on field 'date': rejected value [123]; codes [typeMismatch.dataBinderTest.date,typeMismatch.date,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [dataBinderTest.date,date]; arguments []; default message [date]]; default message [Failed to convert property value of type 'java.lang.String' to required type'java.util.Date' for property 'date'; nested exception is java.lang.IllegalArgumentException: Could not parse date: Unparseable date: "123"]  

  6.  

  7. Field error in object 'dataBinderTest' on field 'phoneNumber': rejected value [123]; codes [typeMismatch.dataBinderTest.phoneNumber,typeMismatch.phoneNumber,typeMismatch.cn.javass.chapter4.model.PhoneNumberModel,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [dataBinderTest.phoneNumber,phoneNumber]; arguments []; default message [phoneNumber]];default message [Failed to convert property value of type 'java.lang.String' to required type 'cn.javass.chapter4.model.PhoneNumberModel' for property 'phoneNumber'; nested exception is java.lang.IllegalArgumentException: 类型转换失败,需要格式[010-12345678],但格式是[123]]  

  8.  

数据绑定失败(类型不匹配)会自动生成如下错误码(错误码对应的错误消息按照如下顺序依次查找):

1、typeMismatch.命令对象名.属性名

2、typeMismatch.属性名

3、typeMismatch.属性全限定类名(包名.类名)

4、typeMismatch

 

⊙内部使用MessageCodesResolver解析数据绑定错误到错误码,默认DefaultMessageCodesResolver,因此想要详细了解如何解析请看其javadoc;

 

⊙建议使用第1个进行错误码的配置。

 

因此修改我们的messages.properties添加如下错误消息(需要执行NativeToAscii):

 
  1. typeMismatch.dataBinderTest.date=您输入的数据格式错误,请重新输入(格式:2012-03-1922:17:17)  

  2. #typeMismatch.date=2  

  3. #typeMismatch.java.util.Date=3  

  4. #typeMismatch=4  

 

再次提交表单我们会看到我们设置的错误消息:

到此,数据绑定错误我们介绍完了,接下来我们再看一下数据不合法错误。

4.16.2.4、数据不合法

1、比如用户名长度必须在5-20之间,而且必须以字母开头,可包含字母、数字、下划线;

2、比如注册用户时 用户名已经存在或邮箱已经存在等;

3、比如去一些论坛经常会发现,您发的帖子中包含×××屏蔽关键字等。

 

还有很多数据不合法的场景,在此就不罗列了,对于数据不合法,Spring Web MVC提供了两种验证方式:

◆编程式验证器验证

◆声明式验证

 

先从编程式验证器开始吧。

4.16.2.4.1、编程式验证器

一、验证器接口

 
  1. package org.springframework.validation;  

  2. public interface Validator {  

  3. boolean supports(Class<?> clazz);  

  4. void validate(Object target, Errors errors);  

  5. }  

 

Validator接口:验证器,编程实现数据验证的接口;

supports方法:当前验证器是否支持指定的clazz验证,如果支持返回true即可;

validate方法:验证的具体方法,target参数表示要验证的目标对象(如命令对象),errors表示验证出错后存放错误信息的错误对象。

 

示例:

(1、验证器实现

 
  1. package cn.javass.chapter4.web.controller.support.validator;  

  2. //省略import  

  3. public class UserModelValidator implements Validator {  

  4.    private static final Pattern USERNAME_PATTERN = Pattern.compile("[a-zA-Z]\\w{4,19}");  

  5.    private static final Pattern PASSWORD_PATTERN = Pattern.compile("[a-zA-Z0-9]{5,20}");  

  6.    private static final Set<String> FORBINDDDEN_WORD_SET = new HashSet<String>();  

  7.    static {  

  8.       FORBINDDDEN_WORD_SET.add("fuc k"); //删掉空格  

  9.       FORBINDDDEN_WORD_SET.add("admin");  

  10.    }    

  11.    @Override  

  12.    public boolean supports(Class<?> clazz) {  

  13.       return UserModel.class == clazz;//表示只对UserModel类型的目标对象实施验证  

  14.    }  

  15.    @Override  

  16.    public void validate(Object target, Errors errors) {  

  17.       //这个表示如果目标对象的username属性为空,则表示错误(简化我们手工判断是否为空)  

  18.       ValidationUtils.rejectIfEmpty(errors, "username""username.not.empty");  

  19.        

  20.       UserModel user = (UserModel) target;  

  21.        

  22.       if(!USERNAME_PATTERN.matcher(user.getUsername()).matches()) {  

  23.           errors.rejectValue("username""username.not.illegal");//如果用户名不合法  

  24.       }  

  25.        

  26.       for(String forbiddenWord : FORBINDDDEN_WORD_SET) {  

  27.           if(user.getUsername().contains(forbiddenWord)) {  

  28.              errors.rejectValue("username""username.forbidden"new Object[]{forbiddenWord}, "您的用户名包含非法关键词");//用户名包含屏蔽关键字  

  29.              break;  

  30.           }  

  31.       }  

  32.       if(!PASSWORD_PATTERN.matcher(user.getPassword()).matches()) {  

  33.           errors.rejectValue("password","password.not.illegal""密码不合法");//密码不合法 

  34.       }    

  35.    }  

  36. }  

  37.  

supports方法:表示只对UserModel类型的对象验证;

validate方法:数据验证的具体方法,有如下几个验证:

   1、用户名不合法(长度5-20,以字母开头,随后可以是字母、数字、下划线)

   USERNAME_PATTERN.matcher(user.getUsername()).matches() //使用正则表达式验证

   errors.rejectValue("username", "username.not.illegal");//验证失败为username字段添加错误码

 

 

   2、屏蔽关键词:即用户名中含有不合法的数据(如admin)

   user.getUsername().contains(forbiddenWord) //用contains来判断我们的用户名中是否含有非法关键词

   errors.rejectValue("username", "username.forbidden", new Object[]{forbiddenWord}, "您的用户名包含非法关键词");//验证失败为username字段添加错误码(参数为当前屏蔽关键词)(默认消息为"您的用户名包含非法关键词")

 

   3、密码不合法

   在此就不罗列代码了;

   4、ValidationUtils

   ValidationUtils.rejectIfEmpty(errors, "username", "username.not.empty");

   表示如果目标对象的username属性数据为空,则添加它的错误码;

   内部通过(value == null || !StringUtils.hasLength(value.toString()))实现判断value是否为空,从而简化代码。

 

(2、spring配置文件chapter4-servlet.xml

 
  1. <bean id="userModelValidator"  

  2. class="cn.javass.chapter4.web.controller.support.validator.UserModelValidator"/>  

  3. <bean name="/validator"  

  4. class="cn.javass.chapter4.web.controller.RegisterSimpleFormController">  

  5.    <property name="formView" value="registerAndValidator"/>  

  6.    <property name="successView" value="redirect:/success"/>  

  7.    <property name="validator" ref="userModelValidator"/>  

  8. </bean>  

 

此处使用了我们第4.9节创建的RegisterSimpleFormController。

 

(3、错误码配置(messages.properties),需要执行NativeToAscii

 
  1. username.not.empty=用户名不能为空  

  2. username.not.illegal=用户名错误,必须以字母开头,只能出现字母、数字、下划线,并且长度在5-20之间  

  3. username.forbidden=用户名中包含非法关键词【{0}】  

  4. password.not.illegal=密码长度必须在5-20之间  

 

(4、视图页面(/WEB-INF/jsp/registerAndValidator.jsp

 
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  

  2. <%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>  

  3. <form:form commandName="user">  

  4.  

  5. <form:errors path="*" cssStyle="color:red"></form:errors><br/>  

  6.  

  7. username:<form:input path="username"/>  

  8. <form:errors path="username" cssStyle="color:red"></form:errors>  

  9. <br/>  

  10.  

  11. password:<form:password path="password"/>  

  12. <form:errors path="password" cssStyle="color:red"></form:errors>  

  13. <br/>  

  14. <input type="submit" value="注册"/>  

  15. </form:form>  

  16.  

 

form:errors path="username"表示只显示username字段的错误信息;

 

5、测试

地址:http://localhost:9080/springmvc-chapter4/validator

当我们输入错误的数据后,会报错(form:errors path="*"显示所有错误信息,而form:errors path="username"只显示该字段相关的)。

 

 

问题:

如MultiActionController控制器相关方法没有提供给我们errors对象(Errors),我们应该怎么进行错误处理呢?

 

此处给大家一个思路,errors本质就是一个Errors接口实现,而且在页面要读取相关的错误对象,该错误对象应该存放在模型对象里边,因此我们可以自己创建个errors对象并将其添加到模型对象中即可。

 

此处我们复制4.15节的UserController类为UserAndValidatorController,并修改它的create(新增)方法添加如下代码片段:

 
  1. BindException errors = new BindException(user, getCommandName(user));  

  2. //如果用户名为空  

  3. if(!StringUtils.hasLength(user.getUsername())) {  

  4.    errors.rejectValue("username""username.not.empty");  

  5. }  

  6. if(errors.hasErrors()) {  

  7.    return new ModelAndView(getCreateView()).addAllObjects(errors.getModel());  

  8. }  

  9.        

 

√ new BindException(user, getCommandName(user))使用当前的命令对象,和命令对象的名字创建了一个BindException作为errors;

StringUtils.hasLength(user.getUsername())如果用户名为空就是用errors.rejectValue("username", "username.not.empty");注入错误码;

errors.hasErrors()表示如果有错误就返回到新增页面并显示错误消息;

ModelAndView(getCreateView()).addAllObjects(errors.getModel())此处一定把errors对象的模型数据放在当前的ModelAndView中,作为当前请求的模型数据返回。

 

在浏览器地址栏输入:http://localhost:9080/springmvc-chapter4/userAndValidator/create 到新增页面

用户名什么都不输入,提交后又返回到新增页面 而且显示了错误消息说明我们的想法是正确的。

分享到:
评论

相关推荐

    第四章 Controller接口控制器详解 源代码下载

    总的来说,Controller接口控制器是Spring MVC中连接用户请求和业务逻辑的关键组件。通过合理使用@Controller、@RequestMapping等注解,我们可以创建出灵活、可扩展的Web服务。深入学习和理解Controller接口及其工作...

    SpringMVC教程

    第四章 Controller接口控制器详解(7 完).pdf 第五章 处理器拦截器详解.pdf 第六章 注解式控制器详解1(注解式控制器运行流程及处理器定义).pdf 第六章 注解式控制器详解2(SpringMVC3强大的请求映射规则详解).pdf 第...

    usb host controller ehci 详解

    USB EHCI主机控制器详解 USB(通用串行总线)技术是计算机和电子设备之间进行数据交换的标准通信协议。EHCI(Enhanced Host Controller Interface)是USB 2.0规范中定义的一种主机控制器接口标准。EHCI的设计允许...

    Spring MVC框架 多动作控制器详解 spring mvc 2.5

    本代码使用了Spring MVC框架(spring2.5架包) 演示了(Controller接口的试用方法)和 MultiActionController多动作控制器 数据库连接试用Spring JDBC 并且着重介绍了MultiActionController多动作控制器的两种方法名...

    Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解

    getControllerName() 和 setControllerName() 方法用于获取和设置控制器名称;getActionName() 和 setActionName() 方法用于获取和设置动作名称。此外,还提供了获取和设置模块、控制器、动作对应的键名的方法。 在...

    跟开涛学SpringMVC(4.6)Controller接

    在本课程"跟开涛学SpringMVC(4.6)Controller接...在学习过程中,结合"跟开涛学SpringMVC(4.6)Controller接口控制器详解(6)Java开发Java经验技巧共10页.pdf"这份资料,你将能深入理解并掌握SpringMVC的核心概念。

    spispispispispi

    - `spi_controller_driver`定义了SPI控制器驱动的接口函数,包括初始化、配置、传输等。 - `spi_register_driver`用于注册SPI设备驱动,`spi_unregister_driver`用于注销。 3. **SPI控制器驱动** - 控制器驱动...

    NFC Controller Interface{NCI} Technical Specification

    本篇将详细介绍《NFC Controller Interface (NCI) Technical Specification》的核心内容和技术要点,旨在帮助读者深入理解NFC控制器接口的设计与实现。 #### 二、NFC控制器接口(NCI)概述 NFC控制器接口(NCI)是...

    课题-ASP-NET-MVC-Controller激活系统详解:总体设计.doc编程资料x

    除了设置控制器工厂之外,`ControllerBuilder`还可以用于注册自定义的控制器筛选器(Controller Filters)以及其他相关组件。这使得开发人员能够更加灵活地控制控制器的行为。 #### 实例演示:如何提升命名空间的...

    跟开涛学SpringMVC(4.3)Controller接

    《跟开涛学SpringMVC(4.3)Controller接口控制器详解》是针对Java开发者的一份深入学习资料,主要探讨了SpringMVC框架中的Controller组件。SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求和响应。...

    面向接口编程详解(三)——模式研究.doc

    - 控制器使用策略模式,控制器本身不直接包含业务逻辑,而是根据策略(实现特定接口的类)来决定如何响应视图传递的用户操作。这种设计使得可以有多个控制器,每个具有不同的策略,从而实现对相同视图和模型操作的...

    CAN接口的电平详解

    ### CAN接口的电平详解 #### 一、概述 CAN(Controller Area Network)总线作为一种广泛应用的现场总线协议,其通信方式与电平转换机制是理解CAN接口工作原理的关键。本文将详细介绍CAN接口中显性电平和隐性电平的...

    Intel 7 Series C216 Chipset Family Platform Controller Hub

    Intel 7 Series / C216 芯片组家族是Intel推出的一款针对商业、家用以及高性能计算平台的重要组件,它包含了对Intel 7系列处理器的全面支持,并集成了多种接口控制器,如SATA等,以实现高效能、高集成度的系统设计。...

    ACHI接口标准是SATA的控制器接口

    **ACHI(Advanced Host Controller Interface)**是一种标准化的硬件接口规范,用于连接计算机主板上的串行ATA(SATA)控制器与存储设备。它由Intel在2004年提出,并被广泛采纳为下一代硬盘接口的标准之一。ACHI的...

    F701 Weighing Controller 说明书

    《F701称重控制器使用详解》 F701称重控制器是一款广泛应用的过程称重仪表,旨在提供精准、高效的重量测量与控制。这款设备以其先进的技术与人性化设计,深受用户信赖。在开始使用F701称重控制器之前,用户需详细...

    sata3.0控制器代码

    ** SATA 3.0 控制器代码详解 ** SATA(Serial Advanced Technology Attachment)是一种高速接口标准,用于连接计算机系统和存储设备,如硬盘、光驱等。SATA 3.0是SATA规范的第三版,其最大传输速度可达6 Gbps,理论...

    SpringMVC详解

    3. **Controller接口控制器** Controller是SpringMVC中处理用户请求的核心组件。控制器通常通过实现Controller接口或者使用注解@Controller来标识。它们负责接收请求参数,调用业务逻辑,最后将结果返回给视图层。 ...

Global site tag (gtag.js) - Google Analytics