【073 Spring MVC的工作原理】
Spring使用<conversion-service="conversionService" />后,会实例化RequestMappingHandlerMapping、RequestMappingHandlerAdapter、HandlerExceptionResolver、HttpMessageConverters等对象,其中HttpMessageConverters创建一组HttpMessageConverter,并把它们配置到RequestMappingHandlerAdapter中,负责对request和response的参数进行解析。也可以自定义转化格式并添加到conversion-service。
【074 Spring MVC可以接收的参数类型?】
①基本类型,建议使用封装类型,可以用NULL判断空值;
②POJO对象,请求为username=XXX是用User接收,请求为user.username=XXX时用封装了User类的对象UserVO接收;
③ 数组或者List或者Map,请求为users[0].username=XXX或者users[‘username’]=XXX格式,如果为form表单请求,必须作为封装的成员来使用,成员名为users;而如果以Ajax发送请求,请求的类型为application/json,则可以直接转换,用@RequestBody List users来接受。
【074扩展@PathVariable、@RequestBody和@RequestParam的区别】
①@PathVariable,用来获取请求路径URL中的动态参数,例如@RequestMapping(value= "user/login/{id}/{name}/{status}"),可以在方法参数中使用@PathVariable int id, @PathVariable String name, @PathVariable boolean status来接收;
② @RequestParam,用来处理Content-Type为application/x-www-form-urlencoded编码的内容,通过Request.getParameter()获取的String直接转换为简单类型;
③常用来处理不是application/x-www-form-urlencoded编码的内容,例如application/json,application/xml等,通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。
【076】Struts2的工作原理
Struts2是基于Filter的过滤器拦截机制,不需要实现Servlet,因此要将FilterDispatch放在过滤器链的最后一个,否则其他过滤器不会执行。
【077 Struts2和Spring MVC的区别】
① Struts2是基于过滤器的拦截,而Spring是基于Servlet的拦截;
② Struts2是基于类的拦截,传递的参数作为成员变量设置,而Spring是基于方法的拦截,传递的参数作为方法的形参注入。
【078 Struts2的参数接收方法】
①直接使用Action的属性接收,包括List和Map,需要提供get和set方法;
② 实现ModelDriver接口,实现T getModel()方法。