一、环境
spring + spring MVC
二、注解方式
这种方式映射器和适配器都是必须配置的,但实际开发中一般会选择下面的第二种mvc的方式!
<!-- spring 3.1 后 我的环境是 spring 4.3 -->
<!-- 注解映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!-- 注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- spring 3.1 前 -->
<!-- 注解映射器 -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping "/>
<!-- 注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<!--
可以使用mvc:annotation-driven代替上边的注解映射器和注解适配器。优点:
默认会绑定很多参数,比如json转换器。一般实际的开发中使用mvc:annotation-driven方式
-->
<mvc:annotation-driven></mvc:annotation-driven>
三、非注解方式之映射器
1、非注解映射器的两种方式,当使用非注解的映射器时也可以不配置适配器,springmvc会使用默认的适配器,在/org/springframework/web/servlet/DispatcherServlet.properties有默认的配置
<!-- 非注解映射器之简单url映射 start -->
<bean id="NotAnnotationController" class="com.bjx.controller.NotAnnotationController"/>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/u/show">NotAnnotationController</prop>
</props>
</property>
</bean>
<!-- 非注解映射器之bean start -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<bean name="/u/show.do" class="com.bjx.controller.NotAnnotationController"></bean>
<!-- 非注解映射器 end -->
当使用非注解的映射器时,controller有以下两种方式可选
1、实现 Controller 【org.springframework.web.servlet.mvc.Controller】
public class NotAnnotationController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setAttribute("name", "nz");
System.out.println("12311231");
ModelAndView model=new ModelAndView();
model.setViewName("success");
return model;
}
}
2、实现 HttpRequestHandler
public class NotAnnotationController implements HttpRequestHandler{
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("name", "nzdd");
request.getRequestDispatcher("/WEB-INF/success.jsp").forward(request, response);
}
}
以上非注解方式有一个明显的缺点:一个控制器中只能写一个方法
四、非注解方式之适配器
<!-- 非注解适配器 start -->
<!-- <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> -->
<!-- <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" /> -->
<!-- 非注解适配器 end -->