Spring MVC
使用步骤:
1 在web.xml中的配置DispatcherServlet
<servlet>
<servlet-name>ioc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ioc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
2 编写控制器类
package com.yq.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
public class UserController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//封装返回的视图
ModelAndView mv = new ModelAndView();
String userName = request.getParameter("userName");
String userPwd = request.getParameter("userPwd");
if("admin".equals(userName) && "123".equals(userPwd)){
//指定视图的目标
mv.setViewName("/success.jsp");
//附加传递数据
mv.addObject("key1", "success info...");
}else{
//指定视图对象 View
mv.setView(new View() {
@Override
public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
request.getRequestDispatcher("/failed.jsp").forward(request, response);
request.getSession().setAttribute("key1","failed render method info ...");
}
});
mv.addObject("key1", "failed info...");
}
return mv;
}
}
3 在WEB-INF目录下放置Spring MVC 配置文件dispatcher-servlet.xml
<!-- 启用注解 -->
<context:annotation-config/>
<!-- 启用包扫描 -->
<context:component-scan base-package="com.yq"/>
<!--配置 Controller 控制器-->
<bean name="/login" class="com.yq.controller.UserController"/>
工作原理:
Spring MVC框架围绕着DIspatcherServlet(请求分发器)
客户端请求 分发器 控制器 模型和视图 视图解析器 分发器 视图
DispatcerServlet(类) 请求分发器
HandlerMapping(接口) 处理器映射
HandlerAdapter (接口)处理器适配器
Controller(接口) 控制器
ModelAnd VIew(类) 模型和视图
ViewResolver (接口)视图解析器
View (接口)视图
综述:
DisatcherServlet中根据HandlerMapping对象找到对应的Controller,然后借助HandlerAdapter对象确定处理方法,然后调用处理器方法。处理器方法返回一个ModelAndView对象。
DispatcherServlet从ModelAndView对象取出逻辑视图名ViewName交给ViewResolver进行解析,得到View对象。
DispatcherServlet调用View对象中的reader()方法,完成对客户端的应答。
注解方法配置Controller和处理器方法
@Controller
@RequestMapping
<!--在web.xml中配置-->
<!--配置请求映射的处理器映射器-->
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--配置请求映射的处理器适配器-->
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!--RequestMappingHandlerMapping & RequestMappingHandlerAdapter 简化配置-->
<mvc:annotation-driven conversion-service="conversionService"/>
处理器方法返回值的类型
- ModelAndVIew
- String
- void 返回JSON
自定义转换类型
在ioc-servlet.xml下配置
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.yq.util.DateConvert"/>
</list>
</property>
</bean>
静态资源访问
<!--配置如果映射器处理不了的请求,交给容器的DefaultServlet处理-->
<mvc:default-servlet-handler/>