- 浏览: 240954 次
- 性别:
- 来自: 皇城根儿下
文章分类
最新评论
-
悦悦余音:
楼主妙笔生花的文章解决了我的问题
hessian http response code:411 -
297434791:
返回对象有警告··返回String就没警告了,什么原因
hessian异常 -
lsjinpeng:
这个中文乱码怎么弄啊?
Kaptcha使用 -
zcs540061627:
wangjian95 写道我也遇到了这个问题
2012-7-1 ...
hessian异常 -
wangjian95:
哈哈,哥刚试了,数组是可以的,嘎嘎
hessian异常
1:看DispatcherServlet的初始化策略
2:看下DefaultAnnotationHandlerMapping类层次关系,BeanNameUrlHandlerMapping类层次是一样的
3:抽象类ApplicationObjectSupport实现了ApplicationContextAware,spring容器的后置处理器会调用setApplicationContext方法,执行顺序:
4:initApplicationContext()执行,spring默认的两个处理器映射类都继承自AbstractDetectingUrlHandlerMapping抽象类,而且类初始化将被执行的initApplicationContext方法也在这个类得到了实现
5:detectHandlers()执行
6:determineUrlsForHandler方法执行,DefaultAnnotationHandlerMapping为例子
protected void initStrategies(ApplicationContext context) { initMultipartResolver(context); initLocaleResolver(context); initThemeResolver(context); //初始化处理器映射关系,即用户请求与程序处理的对应关系 initHandlerMappings(context); initHandlerAdapters(context); initHandlerExceptionResolvers(context); initRequestToViewNameTranslator(context); initViewResolvers(context); } //initHandlerMappings默认会先探测ApplicationContext对象中已经设定好的任何HandlerMapping对象,如果有就使用定义好的,如果没有,调用方法getDefaultStrategies,使用默认配置,DisptatchServlet.properties文件中默认的org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping两个HandlerMapping对象。
2:看下DefaultAnnotationHandlerMapping类层次关系,BeanNameUrlHandlerMapping类层次是一样的
//类层次,凑合看 DefaultAnnotationHandlerMapping AbstractDetectingUrlHandlerMapping AbstractUrlHandlerMapping AbstractHandlerMapping extends WebApplicationObjectSupport implements HandlerMapping, Ordered //这里继承了WebApplicationObjectSupport对象,关于这个对象:Convenient superclass for application objects running in a WebApplicationContext. WebApplicationObjectSupport extends ApplicationObjectSupport implements ServletContextAware implements ApplicationContextAware
3:抽象类ApplicationObjectSupport实现了ApplicationContextAware,spring容器的后置处理器会调用setApplicationContext方法,执行顺序:
//ApplicationObjectSupport中的setApplicationContext方法执行 public final void setApplicationContext(ApplicationContext context) throws BeansException { if (context == null && !isContextRequired()) { // Reset internal context state. this.applicationContext = null; this.messageSourceAccessor = null; } else if (this.applicationContext == null) { // Initialize with passed-in context. if (!requiredContextClass().isInstance(context)) { throw new ApplicationContextException( "Invalid application context: needs to be of type [" + requiredContextClass().getName() + "]"); } this.applicationContext = context; this.messageSourceAccessor = new MessageSourceAccessor(context); //这里会先执行子类WebApplicationObjectSupport的initApplicationContext方法,然后到ApplicationObjectSupport自己的init方法,ApplicationObjectSupport本身的该方法没有任何处理,只是调用了一个空的方法initApplicationContext(),这个无参的重载方法被当作一个钩子供子类方法来实现。 initApplicationContext(context); } else { // Ignore reinitialization if same context passed in. if (this.applicationContext != context) { throw new ApplicationContextException( "Cannot reinitialize with different application context: current one is [" + this.applicationContext + "], passed-in one is [" + context + "]"); } } }
4:initApplicationContext()执行,spring默认的两个处理器映射类都继承自AbstractDetectingUrlHandlerMapping抽象类,而且类初始化将被执行的initApplicationContext方法也在这个类得到了实现
//AbstractDetectingUrlHandlerMapping中的initApplicationContext方法 public void initApplicationContext() throws ApplicationContextException { //先执行超类的initApplicationContext方法,这个超类的方法完成的任务就是对定义好的拦截器改装并放入到adaptedInterceptors数组中供以后使用 super.initApplicationContext(); //请求与处理器映射的关键方法 detectHandlers(); }
5:detectHandlers()执行
protected void detectHandlers() throws BeansException { if (logger.isDebugEnabled()) { logger.debug("Looking for URL mappings in application context: " + getApplicationContext()); } //默认会取得上下文中的所有的对象的beanname。 String[] beanNames = (this.detectHandlersInAncestorContexts ? BeanFactoryUtils.beanNamesForTypeIncludingAncestors(getApplicationContext(), Object.class) : getApplicationContext().getBeanNamesForType(Object.class)); // Take any bean name that we can determine URLs for. for (int i = 0; i < beanNames.length; i++) { String beanName = beanNames[i]; //abstract方法,在子类中实现,即找到符合要求的映射url String[] urls = determineUrlsForHandler(beanName); if (!ObjectUtils.isEmpty(urls)) { // URL paths found: Let's consider it a handler. //注册处理器,即添加一些映射关系到handlerMap中,一个LinkedHashMap registerHandler(urls, beanName); } else { if (logger.isDebugEnabled()) { logger.debug("Rejected bean name '" + beanNames[i] + "': no URL paths identified"); } } } }
6:determineUrlsForHandler方法执行,DefaultAnnotationHandlerMapping为例子
不贴了,主要就是挨个对象查看,DefaultAnnotationHandlerMapping类就是查看定义的RequestMapping注解,然后把符合要求的urls返回。
发表评论
-
xmemcached 一致性hash
2012-12-11 18:22 0应用中使用xmemcached做为memcached的客户端, ... -
spring mvc 内存泄露
2012-12-11 16:30 4573有一个项目使用了spring mvc,以前因为各种原因一两个月 ... -
spring mvc annotation-driven
2012-11-08 12:03 2418使用spring mvc时,我们会在配置文件里添加<mv ... -
hessian spring overloadEnabled
2012-11-06 17:40 2615用spring+hessian构建远程服务,遇到有的服务接口存 ... -
hessian http response code:411
2012-11-06 17:31 4783记录一个很久以前的遇到的一个关于hessian的问题。 用 ... -
htmlunit抓取小说网站JS加载内容
2012-10-31 13:25 6636http://www.17k.com/chapter/76 ... -
关于spring jdbcTemplate取得LAST_INSERT_ID
2012-03-16 18:38 6331spring的jdbctemplate提供的方案: Key ... -
spring mvc异常处理设置
2011-12-09 16:23 21833最近使用spring mvc开发一个web系统,发现在cont ... -
取得用户IP地址
2011-11-17 12:45 1311public static String getIpAdd ... -
泛型类的编译导致的错误
2011-10-25 16:16 1362这是前段时间遇到的一个问题,确定是因为泛型编译导致的,但是特别 ... -
Kaptcha使用
2011-08-11 18:32 12162简单的装备起来很简单,网上一大把,就不说了。 但是许多时候因为 ... -
spring-JavaMailSenderImpl
2011-07-12 16:11 2823使用spring的JavaMailSenderImpl J ... -
分库主键设计-Mysql
2011-07-06 18:21 3130常见的两种方案,遍布网络: 第一种: replace方案,m ... -
resin容器配置影响listener加载时机
2011-06-08 17:57 1580项目使用resin容器,发现resin容器启动时不加载list ... -
java求质数
2011-04-12 17:19 1411这两天JE求质数的帖子火了好几个哈 先介绍下质数的解释: 就 ... -
spring mvc异常设置
2011-03-17 18:10 15423spring mvc异常设置,做个记录 此段代码ZZ ... -
去除标签段的小代码
2011-03-14 15:45 1068private String removeImg(Str ... -
非注入方式取得spring注入bean的util类实现
2011-03-14 15:07 4793import org.springframework.be ... -
java.util.Set转换为Object[]
2011-03-10 14:49 1238Set<String> set = map.k ... -
java几种单例模式
2010-11-04 15:41 14051:饿汉 public class SingletonEx ...
相关推荐
在Spring MVC框架中,请求映射是将HTTP请求与处理这些请求的方法进行关联的关键机制。本文将详细探讨Spring MVC中常见的三种请求映射方式:基于注解的映射、基于XML配置的映射以及基于Java配置的映射。我们将深入...
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
- **基本概念**:Spring MVC提供了一个灵活的MVC实现,包括请求映射、视图解析、模型绑定等功能。它通过DispatcherServlet作为前端控制器,负责接收请求并分发到相应的处理器。 - **组件**:主要包括Model、View、...
总的来说,这个压缩包提供了学习和实践Spring MVC注解的全面示例,涵盖了核心的控制器定义、请求映射、数据绑定,以及异步处理和错误处理机制。通过这个例子,开发者能够更好地理解和掌握Spring MVC的使用,提升其在...
八、Spring MVC请求如何映射到具体的Action中的方法:说明了如何配置映射器(HandlerMapping)将用户请求映射到具体的控制器方法。 九、Spring MVC中的拦截器:拦截器是Spring MVC提供的一个可插入的组件,可以用来...
Spring MVC通过DispatcherServlet作为入口点,接收HTTP请求,然后根据请求映射信息分发到相应的处理器。 在Spring MVC 4.2.3中,主要包含了以下关键特性: 1. **类型安全的路径变量**:这个版本引入了类型安全的...
Spring MVC还支持数据绑定,自动将请求参数绑定到Java对象,这极大地简化了表单提交的处理。对于验证,Spring MVC提供了BindingResult和Validator接口,用于校验模型数据的正确性。 另外,Spring MVC与Spring框架的...
在Spring MVC中,每个请求都会经过DispatcherServlet,这是一个前端控制器,它会根据请求的URL和配置的映射规则将请求分发到合适的处理器。处理器可以是自定义的Controller类,Controller通过方法注解(如@...
8. **异步处理**:Spring MVC 4.0引入了异步请求处理,通过@ControllerAdvice和@Async注解,可以实现后台任务的异步执行,提高响应速度。 9. **多Part文件上传**:支持多文件上传,利用MultipartFile接口处理上传...
八、spring mvc 请求如何映射到具体的Action中的方法? 九、spring mvc 中的拦截器: 十、spring mvc 如何使用拦截器? 十一、spring mvc 如何实现全局的异常处理? 十二、spring mvc 如何把全局异常记录到日志中? ...
在Spring MVC中,Controller处理用户的请求,Model存储数据,而View负责渲染结果。 创建Spring MVC项目的第一步通常是设置开发环境。这通常包括安装Java Development Kit (JDK)、配置IDE(如IntelliJ IDEA或Eclipse...
拦截器(Interceptor)是Spring MVC中的一种机制,可以在请求处理前、后执行自定义逻辑。通过实现HandlerInterceptor接口或使用@Interceptor注解,开发者可以添加全局的行为,如日志记录、权限检查等。 此外,...
`org.springframework.web-3.1.1.RELEASE.jar` 包含了Spring框架对Web应用的支持,如过滤器、异常处理和请求映射等。 `javassist-3.12.0.GA.jar` 是Java编程辅助工具,它在运行时可以动态修改类和创建新的类,常...
#### 八、Spring MVC 请求映射机制 Spring MVC 使用 HandlerMapping 接口及其实现类来完成请求与处理方法的映射。常见的映射方式包括: - **路径映射**:通过 URL 路径匹配控制器方法。 - **注解映射**:使用 `@...
- **异步请求的处理**:Spring MVC 支持异步处理,可以提高应用的响应性和性能。 - **对控制器测试**:Spring 提供了工具和支持来方便地测试控制器的行为。 #### 处理器映射 (Handler Mapping) - **使用 ...
八、spring mvc 请求如何映射到具体的Action中的方法? 九、spring mvc 中的拦截器: 十、spring mvc 如何使用拦截器? 十一、spring mvc 如何实现全局的异常处理? 十二、spring mvc 如何把全局异常记录到日志中? ...
14. **Asynchronous Request Processing**: Spring MVC支持异步请求处理,可以通过`@Async`注解实现后台任务的并发执行。 15. **Internationalization (i18n) and Localization (l10n)**: Spring MVC提供对国际化和...
3. **Controller**:Controller是处理用户请求的组件,通常使用注解如`@RequestMapping`来定义请求映射。Controller可以调用Service层进行业务处理,并返回ModelAndView对象或直接返回视图名称。 4. **Model**:...