Skip to content

3. 配置文件开发(处理器映射器、处理器适配器)

3.1. Web-app骨架的项目

Springmvc-02-mapping-adapter-xml

3.2. 重复入门程序搭建了一个helloworld

3.3. 测试Controller

http://127.0.0.1:8080/springmvc/helloworld

3.4. Xml形式配置处理器映射器、处理器适配器

非注解(XML)的形式配置处理器映射器、处理器适配器

3.4.1. Controller

java
import org.springframework.web.HttpRequestHandler;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 项目    : spring-mvc-java1
 * 创建时间 :2020/3/26  9:23 26
 * author  :jshand-root
 * site    :  http://314649444.iteye.com
 * 描述     : BeanNameUrlHandlerMapping
 */
public class BeanNameUrlController implements HttpRequestHandler {


    @Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("后台BeanNameUrlController执行");

        PrintWriter out = response.getWriter();
        out.write("beanNameurlController");
        out.flush();
        out.close();
    }
}

3.4.2. 处理器映射器

【映射器】(通过什么样的形式将url和类关联起来)

3.4.2.1. BeanNameUrlHandlerMapping**

通过Bean的name和url进行匹配

xml
  <!--使用xml的形式配置bean
-->
  <bean name="/beanname_url.action" class="com.neuedu.controller.BeanNameUrlController"/>

  <!--处理器映射器 -->
  <!-- 1 BeanNameUrlHandlerMapping
   作用是查找是否存在 bean的name属性 跟url一致即可找到类(Controller)
   http://localhost:8080/springmv/【beanname_url.action】
   http://localhost:8080/springmv/beanname_url.action
  -->
  <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

3.4.2.2. SimpleUrlHandlerMapping

xml
<!--2  org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
    可以配置属性,对应关系的属性 将url和不同的 bean对象关联起来
-->
<bean id="userController" class="com.neuedu.controller.UserController"/>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
           <!-- http://localhost:8080/springmvc/userquery.action-->
            <prop key="/userquery.action">userController</prop>

            <!-- http://localhost:8080/springmvc/userquery2.action-->
            <prop key="/userquery2.action">userController</prop>
            <prop key="/userquery3.action">userController</prop>
            <prop key="/userquery4.action">userController</prop>
        </props>

    </property>
    
</bean>

3.4.3. 处理器适配器

处理器【适配器】(找到Controller如何执行类中的方法、执行哪个方法)

HandlerAdapter子类型

3.4.3.1. HttpRequestHandlerAdapter

处理器【适配器】通过适配器调用对应的Handler方法,handleRequest方法,要求类必须实现HTTPRequestHandler接口,并实现上述的抽象方法(handleRequest)

xml
<!--处理器适配器
    1 HttpRequestHandlerAdapter   能执行handler中的handlerRequest方法
-->
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>

执行Controller中的

3.4.3.2. SimpleServletHandlerAdapter

找到Controller中的service方法执行

java
import javax.servlet.*;
import java.io.IOException;

/**
 * 项目    : spring-mvc-java1
 * 创建时间 :2020/3/26  10:34 26
 * author  :jshand-root
 * site    :  http://314649444.iteye.com
 * 描述     :
 */
public class StudentController implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }


//    http://localhost:8080/springmvc/stu.action
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("StudentController.service");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

3.4.3.3. SimpleControllerHandlerAdapter**

执行类中实现自Controller接口的handleRequest方法,需要类实现Controller接口

java
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 项目    : spring-mvc-java1
 * 创建时间 :2020/3/26  10:54 26
 * author  :jshand-root
 * site    :  http://314649444.iteye.com
 * 描述     :
 */
public class AccountController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("AccountController.handleRequest");
        return null;
    }
}
xml
 <!--3 会调用Controller接口的子类型的 handleRequest
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter-->
 <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

Released under the MIT License.