3.实例:SimpleUrlHandlerMapping
步骤一:建立后端控制器UserContrller.java.代码如下:
package com.asm;
//...省略导入的相关类
public class UserController extends SimpleFormController {
protected ModelAndView processFormSubmission(HttpServletRequest request, HttpServletResponse response,
Object command, BindException errors) throws Exception {
System.out.println("调用逻辑层,处理表单");
ModelAndView mav = new ModelAndView("loginSuc");
return mav;
}
}
步骤二:在spmvc-servlet.xml中增加如下配置:
<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- 为映射处理器引入拦截器bean -->
<property name="interceptors">
<list>
<ref bean="workTimeInterceptor" />
</list>
</property>
<property name="mappings">
<props>
<prop key="/op/*/login.do">userController</prop>
</props>
</property>
</bean>
<bean id="userController" class="com.asm.UserController">
<property name="commandClass" value="com.asm.User"/>
</bean>
<!-- 拦截器bean -->
<bean id="workTimeInterceptor"
class="com.asm.LoginTimeInterceptor">
<property name="startTime" value="6" />
<property name="endTime" value="18" />
</bean>
说明:(1)通过前面实例我们可以知道,SimpleController这样的后端控制器必须绑定一个commandClass对象,在这里我们通过配置文件<property name="commandClass" value="com.asm.User"/>绑定。
(2)<prop key="/op/*/login.do">userController</prop>配置说明只要访问是以op开头,中间*可以是任意字符,并以login.do结尾的请求,便能访问到userController 控制器。
(3)SimpleUrlHandlerMapping是一个更强大的映射处理器,它除了支持上面<props>的这种配置,还支持Ant风格的路径匹配。另外也可以进行如下形式的配置:
<property name="mappings">
<value>
/op/*/login.do=userController
</value>
</property>
(4)拦截器:为了为某些特殊请求提供特殊功能,spring为映射处理器提供了拦截器支持。它的配置文件很简单:一是把拦截器类纳入spring容器管理,二是在映射处理器引入配置的拦截器bean。
步骤三:编写拦截器LoginTimeInterceptor.java,主要代码如下:
package com.asm;
//...省略导入的相关类
public class LoginTimeInterceptor extends HandlerInterceptorAdapter {
private int startTime;
private int endTime;
public void setStartTime(int startTime) {
this.startTime = startTime;
}
public void setEndTime(int endTime) {
this.endTime = endTime;
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) throws Exception {
System.out.println("执行afterCompletion方法-->03");
super.afterCompletion(request, response, handler, ex);
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("执行postHandle方法-->02");
super.postHandle(request, response, handler, modelAndView);
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("执行preHandle方法-->01");
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR_OF_DAY);
if (startTime <= hour && hour < endTime) {
return true;
} else {
response.sendRedirect("http://www.iteye.com");
return false;
}
}
}
说明:此拦截器作用:如果用户没有在6-18点登录,则重定向到javaeye站点(1)拦截器必须HandlerInterceptorAdapter接口(2)preHandle方法在后端控制器执行前被调用,postHandle方法在后端控制器执行后被调用;afterCompletion方法在整个请求处理完成后被调用。(3) preHandle方法:返回true,映射处理器执行链将继续执行;当返回false时,DispatcherServlet处理器认为拦截器已经处理完了请求,而不继续执行执行链中的其它拦截器和处理器。它的API文档解释如下:true if the execution chain should proceed with the next interceptor or the handler itself. Else, DispatcherServlet assumes that this interceptor has already dealt with the response itself.(4)这三个方法都是相同的参数,Object handler参数可以转化成一个后端控制器对象,比如这里可以转换成UserController对象。
步骤四:完成其它相关代码的编写
User.java代码
package com.asm;
public class User {
private String username;
private String password;
//省略getter/setter方法
}
WEB-INF/page/loginSuc.jsp,主要代码如下:
<body>
登录成功!欢迎来到后台管理页面
</body>
index.jsp代码:
<form action="<%=request.getContextPath()%>/op/luanXie/login.do" method="post">
用户名:<input type="text" name="username"><br/>
密 码:<input type="password" name="password"><br/>
<input type="submit" value="登录">
</form>
步骤五:访问index.jsp页面,完成测试。
分析执行过程:为了清晰体会到整个处理器执行过程,我们首先在UserController.java中增加如下代码:
protected Object formBackingObject(HttpServletRequest request) throws Exception {
System.out.println("formBackingObject方法执行-->01");
return super.formBackingObject(request);
}
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
System.out.println("initBinder方法执行-->02");
super.initBinder(request, binder);
}
protected void onBind(HttpServletRequest request, Object command) throws Exception {
System.out.println("onBind方法执行-->03");
super.onBind(request, command);
}
protected void onBindAndValidate(HttpServletRequest request, Object command, BindException errors)
throws Exception {
System.out.println("onBindAndValidate方法执行-->04");
super.onBindAndValidate(request, command, errors);
}
(1)当访问…/login.do时,会首先被前端控制器DispatcherServlet拦截到,前端控制器通过查找spmvc-servlet.xml配置文件,并交给后端控制器处理。
(2)执行后,得到如下打印结果,通过打印结果我们知道它的一个大致执行过程。
执行preHandle方法-->01
formBackingObject方法执行-->01
initBinder方法执行-->02
onBind方法执行-->03
onBindAndValidate方法执行-->04
调用逻辑层,处理表单
Admin----123456
执行postHandle方法-->02
执行afterCompletion方法-->03
分享到:
相关推荐
"spring-mvc-test"是一个基础的Spring MVC入门示例,旨在帮助开发者快速了解Spring MVC框架的工作原理和使用方法。通过这个项目,我们可以学习到如何配置和运行Spring MVC项目,以及如何利用Jetty作为开发和测试环境...
在本入门示例中,我们将深入理解 Spring MVC 的核心概念和关键组件,以便初学者能够快速上手。 1. **MVC 模式** MVC 模式是一种软件设计模式,用于分离应用程序的数据模型、用户界面和业务逻辑。Model(模型)处理...
本资源"Spring MVC step-by-step 源码"是针对初学者准备的入门教程,通过实际项目"springapp"来帮助理解Spring MVC的工作原理。 在MyEclipse环境下开发的"springapp"项目,涵盖了Spring MVC的基础配置和核心组件。...
这个名为"spring-mvc.rar_spring mvc"的压缩包可能是为了帮助初学者理解和入门Spring MVC,解决他们在开发过程中可能遇到的问题。下面将详细阐述Spring MVC的核心概念和关键组件。 1. **DispatcherServlet**:它是...
`web.xml`配置了DispatcherServlet,而`spring-servlet.xml`则包含了Spring MVC的详细配置,如处理器映射器、视图解析器、以及bean的定义。 3. **Controller**: 控制器是处理用户请求的核心组件,通常用@...
在`spring-mvc-study-master`目录下,你可能会找到以下文件和目录: - `pom.xml`:Maven的项目对象模型,用于管理依赖项和构建设置。 - `src/main/java`:源代码目录,`com.example.springmvcstudy`包下可能有`...
Spring Web MVC允许开发者将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这种模式的主要目的是实现Web层的职责分离,从而提高应用程序的可维护性和可扩展性。 在Spring Web MVC中,...
Spring MVC Webflow是一个基于Spring框架的强大力量,用于构建高度交互式的Web应用程序。它将Spring MVC的功能与一种称为Webflow的流程管理概念相结合,帮助开发者更好地组织和控制用户会话的生命周期。在这个教程中...
1. **DispatcherServlet**:这是Spring MVC的前端控制器,负责接收HTTP请求,然后根据请求映射信息转发给相应的处理器。 2. **Controller**:控制器是处理请求并返回视图模型的类。开发者通常会定义一系列处理方法,...
总结一下,Spring MVC入门涉及的关键概念有: 1. `DispatcherServlet`:作为请求分发器。 2. XML配置:定义组件,如视图解析器、处理器映射器和处理器适配器。 3. 注解配置:使用`@Controller`、`@RequestMapping`等...
2. DispatcherServlet(前端控制器)捕获请求,它是Spring MVC的核心组件,负责调度请求到合适的处理器。 3. HandlerMapping(处理器映射器)根据请求的URL查找对应的Handler(控制器方法)。 4. HandlerAdapter...
《Spring MVC 入门详解》 Spring MVC 是 Spring 框架的重要组成部分,它是一个用于构建 Web 应用程序的模型-视图-控制器(MVC)架构。在这个入门项目中,我们将深入探讨 Spring MVC 的核心概念、配置以及实际应用。...
这标志着你的Spring MVC入门程序已经成功运行。 在这个过程中,你学到了如何配置Spring MVC项目,包括Maven依赖、DispatcherServlet、servlet-context.xml配置、控制器编写以及视图渲染。这些都是Spring MVC开发的...
- 控制器配置:配置DispatcherServlet,这是Spring MVC的核心组件,用于将请求映射到对应的处理器上。 4. 视图解析与控制器工作原理 - 请求处理流程:通过DispatcherServlet,理解Spring MVC如何接收请求、处理...
**Spring MVC 入门实例详解** Spring MVC 是 Spring 框架的一个重要模块,用于构建 Web 应用程序。它提供了模型-视图-控制器(MVC)架构,帮助开发者将业务逻辑、数据处理和用户界面分离,实现更加清晰的代码结构。...
这个经典入门案例将引导你逐步了解并掌握 Spring MVC 的基本概念、配置以及实际应用。 1. **Spring MVC 概述** Spring MVC 是一个模型-视图-控制器(MVC)架构模式的实现,它简化了Java Web 应用的开发,提供了一...
在实际项目中,"spring-mvc基础入门"可能包括创建一个简单的Spring MVC项目,配置web.xml和Spring的Context配置,编写第一个Controller,处理GET和POST请求,学习如何注入Service层,理解模型数据的传递,以及如何...
如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用...
**Spring3 MVC 入门Hello World源码解析** Spring3 MVC是Spring框架的重要组成部分,它是一个用于构建Web应用程序的模型-视图-控制器(MVC)框架。本篇将深入探讨Spring3 MVC的基础知识,通过"Hello World"实例来...