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"/>
