springMVC--HandlerAdapter

HandlerAdapter的接口中定义了三个方法:

(1)boolean supports(Object handler); 判断是否支持传入的Handler

(2)ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)  用来使用Handler处理请求

(3)long getLastModified(HttpServletRequest request, Object handler); 用来获取资料的Last-Modified值。

接口源码如下:

public interface HandlerAdapter {  
  
    boolean supports(Object handler);  
  
    ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;  
  
    long getLastModified(HttpServletRequest request, Object handler);  
  
}  
HandlerAdapter的执行操作,其执行过程在DispatcherServlet的doDispatch中,执行流程如下:

protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {  
          
        ........  
  
        try {  
              
            try {  
                  
                //获取合适的HandlerAdapter实现类  
                HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());  
                  
            ........  
                  
                if (isGet || "HEAD".equals(method)) {  
                    long lastModified = ha.getLastModified(request, mappedHandler.getHandler());  
                      
                }  
            ........  
                //执行真正的请求操作  
                mv = ha.handle(processedRequest, response, mappedHandler.getHandler());  
  
        ........  
    }  
getHandlerAdapter的操作就是选择合适的HandlerAdapter来执行,设计模式中的适配器模式,handlerAdapters中的内容就是所有的HandlerAdapter的实现类。

protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException {  
        for (HandlerAdapter ha : this.handlerAdapters) {  
            if (logger.isTraceEnabled()) {  
                logger.trace("Testing handler adapter [" + ha + "]");  
            }  
            if (ha.supports(handler)) {  
                return ha;  
            }  
        }  
        throw new ServletException("No adapter for handler [" + handler +  
                "]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler");  
    }  

这样就完成了Handler的真正调用过程,最终调用过程是返回一个ModelAndView对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. `web.xml`: `web.xml` 是 Java Web 应用程序的配置文件,用于配置 Servlet、Filter、Listener 等 Web 组件。主要功能如下: - 配置 Servlet 和 Servlet 映射。 - 配置 Filter 和 Filter 映射。 - 配置 Listener。 - 配置错误页面。 - 配置 Session 超时时间。 - 配置上下文参数等。 示例代码: ```xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>MyWebApp</display-name> <servlet> <servlet-name>myServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/myservlet/*</url-pattern> </servlet-mapping> <error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> </web-app> ``` 2. `springmvc-config.xml`: `springmvc-config.xml` 是 Spring MVC 框架的配置文件,用于配置 Spring MVC 相关的组件,如视图解析器、拦截器等。主要功能如下: - 配置 Spring MVC 的 HandlerMapping 和 HandlerAdapter。 - 配置视图解析器。 - 配置拦截器。 - 配置文件上传解析器等。 示例代码: ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <mvc:annotation-driven/> <mvc:resources mapping="/resources/**" location="/WEB-INF/resources/"/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> <mvc:interceptors> <bean class="com.example.MyInterceptor"/> </mvc:interceptors> </beans> ``` 3. `spring-mybatis.xml`: `spring-mybatis.xml` 是 Spring 整合 MyBatis 框架的配置文件,用于配置 MyBatis 相关的组件,如数据源、SqlSessionFactory、MapperScannerConfigurer 等。主要功能如下: - 配置数据源。 - 配置 SqlSessionFactory。 - 配置 MapperScannerConfigurer。 - 配置事务管理器等。 示例代码: ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <context:component-scan base-package="com.example"/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb"/> <property name="user" value="root"/> <property name="password" value="123456"/> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.mapper"/> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:annotation-driven/> </beans> ``` 4. `applicationContext.xml`: `applicationContext.xml` 是 Spring 的核心配置文件,用于配置 Spring 容器的 Bean。主要功能如下: - 配置数据源、事务管理器等基础组件。 - 配置 Service、DAO 等业务组件。 - 配置 AOP、声明式事务等。 - 配置定时任务等。 示例代码: ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <context:component-scan base-package="com.example"/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb"/> <property name="user" value="root"/> <property name="password" value="123456"/> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:annotation-driven/> <bean id="userService" class="com.example.UserService"> <property name="userDao" ref="userDao"/> </bean> <bean id="userDao" class="com.example.UserDao"> <property name="dataSource" ref="dataSource"/> </bean> </beans> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值