`
meiyx
  • 浏览: 183717 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

spring MVC -controller

 
阅读更多
[size=large]
一、处理请求过程     

DispatcherServlet   处理请求过程
 
1 、绑定上下文对象于 DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE 请求属性
 
2 、绑定 locale resolver, 解析本地化信息(没有忽略该过程)
 
3 、绑定 theme resolver ,确定使用主题( 没有忽略该过程)
 
4 、判断是否为 multipart, 如果是就解析封装
 
5 、查找处理器、执行对应的拦截器,获取视图模型
 
6 、根据 view resolver 选择相对应的视图
 
1 - 6 过程中如有异常,可以被 handlerexception resolver 捕获
 
表单处理过程:
 
1、判断是否是提交表单请求,
 
2、如果不是,调用 showNewForm(request, response, errors) 方法,
 
2.1 、 如果子类重写方法调用 formBackingObject 方法
 
2.2 、 如果有重写 referenceData 方法,
 
2.3 、 如果属性 bindOnNewForm=true ,系统将 request 对应参数值绑定到对应的对象中
 
2.4 、 最后根据属性 formView 跳转到相对应的表单录入页面
 
3 、如果是表单提交请求 

3.1 如果不是会话表单或会话中有对应表单对象,
 
3.1.1 、 系统从会话中获取或者调用调用 formBackingObject 方法创建数据绑定对象, 根据页面输入值绑定数据对象,中间可能会产生绑定异常
 
3.1.2 、 如子类重写了 onBind 方法,会回调对应的方法,对应绑定异常会一直传递下去
 
3.1.3 、 如果子类有相对应的效验类,并且需要在绑定时效验,就回调对应的效验类的效验方法,对应绑定异常会一直传递下去
 
3.1.4 、 如果子类重写了 onBindAndValidate 方法,系统会回调对应的绑定效验方法
 
3.1.5 、 如果有异常,调用 showForm(request, response, errors) ,不是会话表单,重新获取辅助数据,执行方法 referenceData 返回表单编辑页面。
 
3.1.6 、 如果无异常调用 onSubmit(request, response, command, errors), 返回成功提交后的页面
 
3 . 2 如果是会话表单并且会话中没有该表单对象,会根据 formBackingObject 初始化值对象 , 然后处理过程和 3.1.1 执行过程一致。
 
说明: 

步骤 3.1.1 会回调一次 formBackingObject 方法,然后再绑定页面数据,为何回调该方法的原因是因为我们在页面中有些属性不需要显示,如果只通过页面封装数据,哪些不需要显示的就无法封装数据。因此在使用该方法的时候特别要注意性能问题,避免在该方法中调用数据库查询等等影响性能的方法(我还是使用 hidden 控件,虽然安全性低了一点) 

个人认为步骤 2.3 位置应该 2.1 在前,因为往往我们在实际使用中是先根据页面传递的值来再构造对应的值对象的。并且这样的话 页面传递的变量会覆盖 formBackingObject 值 

个人建议尽可能的不要使用会话表单 

三、开发注意事项、心得
 
1、自定义拦截器只需实现 org.springframework.web.servlet.HandlerInterceptor 接口
 
2、上传多个文件时注意事项:建议采用重写
 
protected ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors)   throws Exception
 
方法,直接通过 MultiHttpServletRequest getFileMap() 方法,对应 map 存储对象为 MultipartFile 接口实现类,建议通过接口访问,这样如果通过其他方式处理上传的,只需要修改配置文件,通过对应的 transferTo 方法处理上传的文件。
 
3、在 web 环境中如何获取应用上下文对象
 
ApplicationContext acx=(ApplicationContext)req.getAttribute(
 
DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE);
 
4、在配置 multipart 解析器 配置时 id="multipartResolver"
 
<bean id="multipartResolver" class="
 
org.springframework.web.multipart.commons.CommonsMultipartResolver"> 

           <property name="maxUploadSize"><value>10485760</value>
 
</property> 

</bean> 

5、在配置资源信息 配置时 id= messageSource
 
<bean id="messageSource" class="
 
org.springframework.context.support.ResourceBundleMessageSource"> 

6、如果视图要采用 redirect 方式,配置类似如下 

        <property name="successView"> 

                <value>redirect:/viewpro.action</value> 

     </property>    

7 、 如果要实现一个简单的页面数据绑定功能 只需要继承 BaseCommandController 类,重写 

handleRequestInternal(
 
HttpServletRequest request, HttpServletResponse response) 

throws Exception
 
方法 

在该方法中只要创建数据绑定对象,调用绑定方法,然后封装在对应的视图中 

8 、标签库的使用,请参考如下文章: 

http://www-128.ibm.com/developerworks/cn/java/j-jstl0211/index.html 


[/size]
分享到:
评论

相关推荐

    spring-web-5.2.3.RELEASE和spring-webmvc-5.2.3.RELEASE

    Spring Web MVC模块(spring-webmvc-5.2.3.RELEASE.jar)是Spring框架中用于构建MVC(Model-View-Controller)架构的Web应用程序的核心部分。它为Web开发提供了一种强大且灵活的模型绑定、数据验证、异常处理和视图...

    spring-webmvc-5.0.9 jar包、源码和javadoc

    在Spring Web MVC中,Controller是实现业务逻辑的关键组件,通常由实现了Controller接口或使用@Controller注解的类组成。它们接收请求,调用服务层方法处理业务,然后将结果封装到Model对象中。Model对象包含了用于...

    spring-mvc-4.2.xsd.zip

    例如,`&lt;mvc:annotation-driven&gt;`元素用于启用基于注解的控制器支持,这意味着Spring MVC会自动扫描并处理带有`@Controller`注解的类。而`&lt;context:component-scan&gt;`则用于扫描指定包下的所有类,自动发现带有`@...

    spring-mvc-showcase

    在"spring-mvc-showcase"项目中,Spring MVC提供了方便的测试支持,如MockMvc,可以模拟HTTP请求并验证Controller的响应。此外,日志和调试工具也能帮助开发者跟踪和定位问题。 综上所述,"spring-mvc-showcase...

    spring-mvc-study.zip

    此外,Spring MVC支持注解驱动开发,如@Controller、@RequestMapping、@RequestParam、@PathVariable等,使得代码更简洁,降低了XML配置的复杂度。同时,Spring MVC还提供了模型绑定、数据验证、异常处理等机制,...

    translation-spring-mvc-4-documentation, Spring MVC 4.2.4 RELEASE 中文文档完整翻译稿.zip

    在Spring MVC中,我们可以使用注解如@Controller和@RequestMapping来标记和映射控制器方法。 模型-视图-控制器模式(MVC)是Spring MVC的基础,模型代表业务数据,视图负责展示,而控制器是模型和视图之间的桥梁。...

    spring-webmvc-struts.jar

    2. **Action**:业务逻辑处理类,对应于Spring MVC的Controller。 3. **ActionForm**:表单bean,用于封装用户输入的数据。 4. **ActionMapping**:映射Action和URL的关系,类似Spring MVC的HandlerMapping。 5. **...

    spring mvc-redis-shiro

    首先,Spring MVC是Spring框架的一部分,专门用于构建MVC(Model-View-Controller)结构的Web应用。它简化了模型-视图-控制器的实现,使得开发者能够更专注于业务逻辑,而不是繁琐的HTTP请求处理。Spring MVC通过...

    spring.jar spring-webmvc-struts.jar spring-webmvc.jar

    3. **Spring MVC**:学习Spring MVC的架构,包括DispatcherServlet、Controller、Model、View、ModelAndView等概念,以及请求处理流程。 4. **Struts集成**:如果使用了spring-webmvc-struts.jar,需要了解如何在...

    一个改进版的spring-mvc-showcase

    - `src/main/java`: 包含Java源代码,这里会有Controller、Service、DAO等层的类,实现Spring MVC的各个组件。 - `src/main/resources`: 存放配置文件,如Spring的`applicationContext.xml`或`dispatcher-servlet....

    spring4-mvc-gradle

    《Spring4-MVC-Gradle:构建现代Java Web应用程序的基石》 在现代Web开发领域,Spring框架以其强大的功能和灵活性赢得了广大开发者们的青睐。尤其是Spring MVC,作为Spring框架的一部分,为构建基于Java的Web应用...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    在配置方面,Spring MVC使用XML或Java配置来定义组件,包括Controller、Service、DAO等。随着Spring的发展,现在更倾向于使用Java配置,因为它更加直观且易于维护。另外,Spring Boot的出现简化了Spring MVC的配置,...

    Pro Spring MVC---Apress-2012

    ### Pro Spring MVC -- Apress-2012 #### 关键知识点概览: - **Spring MVC 组件构建块** - **开发环境配置** - **为基于 Spring 的应用提供 Web 前端** - **测试 Web 前端的实用方法** - **部署至本地 Web 服务器...

    spring-mvc-官方中文文档

    这个官方中文文档详细地介绍了如何使用 Spring MVC 来开发高效、可维护的 MVC(Model-View-Controller)架构的应用。Spring MVC 提供了丰富的功能,包括请求处理、视图解析、数据绑定、异常处理等,旨在简化 Web ...

    Spring MVC step-by-step 源码

    - 在Spring MVC 3.0以后,可以使用注解如`@RequestMapping`、`@Controller`、`@Service`、`@Autowired`等,替代XML配置,简化开发。 6. **Spring MVC的其他特性**: - 参数绑定:自动将请求参数绑定到Controller...

    spring-mvc-demo

    【Spring MVC 框架详解】 Spring MVC 是 Spring 框架的一部分,它是一个轻量级的、基于模型-视图-控制器(MVC)设计模式的 Web 应用开发框架。Spring MVC 提供了丰富的功能,使得开发者可以快速、高效地构建高质量...

    spring-mvc-test-sample-master.zip_spring mvc_springmvc-test

    6. **@Controller、@RequestMapping**:这两个注解是Spring MVC中非常重要的,`@Controller`标记一个类为控制器,而`@RequestMapping`则用来指定处理请求的URL路径。 7. **HandlerMapping**和**HandlerAdapter**:...

    spring-spring mvc-mybaties整合dome

    Spring MVC的核心组件包括DispatcherServlet、Controller、Model、View和ViewModel。 - DispatcherServlet是入口点,负责接收请求并分发到相应的处理器。 - Controller是用户定义的业务逻辑组件,处理请求并生成...

    Spring MVC-demo项目源码

    - `Spring MVC配置文件`(如`applicationContext.xml`或`spring-servlet.xml`):配置Spring MVC的各种组件,如ViewResolver、HandlerMapping、Controller等。 - `Controller类`:实现了处理HTTP请求的逻辑,通常...

Global site tag (gtag.js) - Google Analytics