目录
1、简介
从(Spring MVC基础(一)-- 基本原理)文章中可以知道,Spring MVC开发过程中程序员只需要开发Handler(具体Controller处理方法)和View(jsp等),其他的开发组件(前端控制器DispatcherServlet、处理器映射器HandlerMapping、处理器适配器HandlerAdapter和视图解析器ViewResolver)不需要程序员开发,只需要配置就可以使用了,因此本文主要介绍下怎么配置这几个开发组件。(由于Spring MVC基础(一)-- 基本原理中简单配置过web.xml文件,所以此处不再配置)
2、基于BeanNameUrl方式的配置
2.1 springmvc.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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<bean name="/viewUser" class="com.user.controller.UserController"/>
<!-- 通过bean的name值作为url找对应的Handler -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- 此种方式配置的处理器适配器需要Handler实现Controller接口 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<!-- 此种方式采用物理地址识别的方式解析jsp -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>
2.2 Controller中代码
package com.user.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class UserController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws Exception {
ModelAndView mav = new ModelAndView();
mav.addObject("viewFlag", "ViewUserByBeanName");
mav.setViewName("/WEB-INF/user/viewUserInfo.jsp");
return mav;
}
}
2.3 测试结果
3、基于SimpleUrl方式的配置
3.1 springmvc.xml中的配置
<bean id="viewUserUrl" class="com.user.controller.UserController"/>
<!-- 通过url找对应的Handler -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >
<property name="mappings">
<props>
<!-- 此处可配置多个url -->
<prop key="/viewUserInfo">viewUserUrl</prop>
</props>
</property>
</bean>
<!-- 此种方式配置的处理器适配器需要Handler实现HttpRequestHandler接口 -->
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
3.2 Controller中代码
package com.user.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.HttpRequestHandler;
public class UserController implements HttpRequestHandler {
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("viewFlag", "ViewUserByUrl");
request.getRequestDispatcher("/WEB-INF/user/viewUserInfo.jsp").forward(request, response);
}
}
3.3 测试结果
4、基于注解方式的配置
4.1 springmvc.xml中的配置
<!-- 扫描Handler -->
<context:component-scan base-package="com.user.controller" />
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
4.2 Controller中代码
package com.user.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class UserController {
// 方式1
@RequestMapping("/viewUserByAnnotation1")
public ModelAndView viewStudent1() {
ModelAndView mav = new ModelAndView();
mav.addObject("viewFlag", "ViewUserByAnnotation1");
mav.setViewName("/WEB-INF/user/viewUserInfo.jsp");
return mav;
}
// 方式2
@RequestMapping("/viewUserByAnnotation2")
public String viewStudent2(Model model) {
model.addAttribute("viewFlag", "ViewUserByAnnotation2");
return "/WEB-INF/user/viewUserInfo.jsp";
}
}
4.3 测试结果
5、基于Spring MVC默认方式的配置
5.1 springmvc.xml中的配置
<context:component-scan base-package="com.user.controller" />
<!-- 使用默认配置 -->
<mvc:annotation-driven />
<!-- 采用逻辑视图的方式解析jsp -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
5.2 Controller中代码
package com.user.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
@RequestMapping("/viewUserByDefault")
public String viewUser(Model model) {
model.addAttribute("viewFlag", "viewUserByDefault");
return "user/viewUserInfo";
}
}
5.3 测试结果:
6、总结
从以上配置中可以发现,随着Spring版本的提升配置越来越简单,开发者的工作也越来越关注于业务,建议Spring版本高的采用注解的方式,可以省去很多工作,也更方便。