做为web应用程序,交互步骤无非就是:接收页面数据,进行数据合法性验证,调用相应业务逻辑,最后根据业务执行情况选择相应的视图展现模型状态。下面这个贴图选自spring mvc官方文档,标明了spring mvc的交互流程
在这些交互步骤中有两个重点是,一是请求与业务的调用及最终视图的呈现位置映射关系,二是页面接收到的数据服务器端验证问题。本篇博文先说第一个问题。
一般的mvc框架,通常将请求与请求处理控制器的关系定义在xml配置文件中,将执行完成后的跳转视图位置也在xml文件中加以描述和定义,这些框架一般对action处理控制器会有一些要求和限制(比如要extends 父类)。程序员在进行开发时,会采用下面的步骤:
1、 书写action类并定义请求执行的方法。
2、 在mvc框架xml文件中配置这个action(包括请求path以及跳转视图)。
3、 如果使用了spring,还需要把action在spring中配置一次(需要容器注入service)。
4、 从作用域中取出模型对象状态,生成页面,返回给客户呈现。
后期维护也是这样,修改action类,修改映射配置文件,修改页面代码。页面的交互实现、维护可谓是费时费力,但似乎也没有更好的办法,大部分软件公司都是这么在做。
在使用spring mvc时,如果也用xml文件配置去实现,也是很麻烦的,spring mvc自身的设计得非常灵活(灵活将意味着不易掌握,比如;c语言中的指针),因此,对于大多数人来说学习起来并不容易,维护也比较困难,这也是我之前的项目中没有使用过spring mvc的原因。
但是,自从spring2.5中加入spring mvc注解支持后,问题变得简单起来,开发中再也不需要维护那么多的xml配置文件,费话少说,我们先来看实例:
@Controller
@SessionAttributes("student_session_key")
public class LoginAction {
//学生业务对象
private IStudentService studentService;
@RequestMapping("/login")
public String login(Map model,
@RequestParam(value="id") Long id,
@RequestParam(value="password") String password ) {
//进行表单数据合法性验证
if (id == null) {
model.addAttribute("error_key", "学生id号不能为空!");
return "error";
}
//调用业务层登录方法
try {
Student student = studentService.login(id, password);
model.addAttribute("student_session_key", student);
} catch (BizException e) {
model.addAttribute("error_key", e.getMessage());
return "error";
}
return "redirect:student.action?page";
}
从上面的这段控制器代码中,可以发现spring mvc注解配置的特点:
(1) 控制器不在需要继承其它类,只需要用@Controller注解标明这是一个控制器。
(2) 不需要有formbean之类的对象了,方法参数中需要的页面值,可通过@RequestParam直接从页面请求中获得。
(3) 对request,session的作用域访问,只需定义一个Map类型的方法参数即可,这点和struts2比较类似。
(4) 返回页面直接在方法中指定,可以是Stirng,也可以是其它的,比如:ModelAndView等。
(5) 请求执行的方法具有多种签名,非常的灵活,程序员想要什么,直接添加方法签名参数即可。
spirng mvc中方法的定义可谓是非常的灵活,方法签名可任意定义,具体可参考 spring官网中的mvc部分的13.3章节方法签名的描述。
(6) 类中依赖的其它类型变量直接通过spring 容器注入,天生一体。
一切都变得简单了。下面讲一讲spring mvc在页面中项目中的常用代码实现,算是一个入门级的简单介绍吧:
(1) 对web作用域request的访问。
在请求方法签名中加入HttpServletRequest类型参数,比如:String login(HpptServletRequest request),方法中通过setAttributes(“key”,Object)或getAttributes(“key”)进行访问;
在请求方法签名中加入Map类型参数,比如:String login(Map request),方法中通过put,get访问;
在请求方法签名中加入ModelMap类型参数,比如:String login(ModelMap request) ,方法中通过put,get访问。
(2) 对web作用域session的访问。
在类前用@SessionAttributes(“student_session_key”)注解写明要放入sesssion中的key,程序中往map类型的签名参数中放入key->value的key与注解中写的key相同,spring mvc将把此变量放入session作用域;
在类前用@SessionAttributes(“student_session_key”)注解写明要访问的session的key,方法签名中定义@ModelAttribute(“student_session_key “) Student stu 类型,spring mvc将从session中取出该变更并注入。
在方法签字中加入HttpServletRequest类型参数,方法体中通过request.getSession得到Session进行操作。
(3) 接收页面提交的参数。
直接通过@RequestParam中的value与页面输入元素name对应,对象类型的可用ModelAttribute对应,但要注意,页面输入元素的name要与对象属性的get/set方法名称一致,spring mvc将自动填充将页面输入值填充到对象中。
public String addStudent(ModelMap model,
@RequestParam(value="pno",defaultValue="1")int pno,
@ModelAttribute("student") @Valid Student stu
(4) 对视图资源跳转的访问。
可返回String类型的,或ModelAndView类型的跳转,这种自动映射关系可通过配置InternalResourceViewResolver实现。
比如,return “add_student”,将对应add_studnet.jsp。ModelAndView与之相似。
当然,也可通过redirect: prefix或者forward: prefix完成重定向及内部其它web资源的跳转。
(5) 一个类中多方法的访问。
这个类似于struts1中的DispatcherAction,在spring mvc中通过在方法名前加上params 指定,比如:@RequestMapping(params=”add”)写在某个方法前,将处理前台页面类似xxx.action?add的请求。
(6) 国际化支持
通过在ReloadableResourceBundleMessageSource配置资源文件实现I18N,简单明了。
(7) 数据转换。
spring mvc提供了基本的一些数据类型的自动转换功能,这通常是不能满足项目需求的,我们需要通过@InitBinder定义数据绑定方法,而一些类型的转换要自己去完成,比如,对日期类型的转换,代码如下:
@InitBinder
public void myInitBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false); //非精确匹配
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
8) reset风格程序的支持.
要用到@PathVariable注解,具体见:spring3 对rest风格程序的支持。
知道上在这些,已经可以胜任日常的开发了,你可以参阅 spring官网中的mvc部分的13.11章节对spring mvc注解的描述,讲得非常的详细。
分享到:
相关推荐
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。Spring MVC4是当前zuixin的版本,在众多特性上有了进一步的提升。, 在精通Spring...
Spring MVC 是一个基于Java的轻量级Web应用框架,它为开发者提供了模型-视图-控制器(MVC)架构,使开发人员能够更好地组织和分离应用程序的业务逻辑、数据处理和用户界面。Spring MVC是Spring框架的一个核心组件,...
Spring MVC 是一款强大的Java Web开发框架,用于构建高效、可维护和模块化的Web应用程序。它作为Spring框架的一部分,提供了一种优雅的方式来处理HTTP请求和响应,使得开发者可以专注于业务逻辑而不是底层实现。在这...
Spring MVC是Spring框架的一个核心模块,专为构建Web应用程序而设计。它提供了模型-视图-控制器(MVC)架构,使开发者能够有效地分离业务逻辑、数据处理和用户界面。在"Spring MVC 4.2.3"版本中,我们看到了一系列的...
Spring MVC是Spring框架的一个核心模块,专为构建Web应用程序提供模型-视图-控制器(MVC)架构。在Spring MVC 4.0版本中,它引入了许多改进和新特性,以提升开发效率和应用程序的性能。 1. **依赖注入**:Spring ...
Spring MVC 是一个强大的Java Web开发框架,它是Spring框架的一部分,专为构建高度可扩展和模块化的Web应用程序而设计。在2015年的版本中,Spring MVC 4已经相当成熟,提供了许多特性来简化开发流程并提高开发效率。...
Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。这个教程“Spring MVC - A Tutorial”旨在帮助开发者深入理解和掌握Spring MVC的核心概念和...
Spring MVC是一种基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,使用了IoC容器,支持RESTful风格的应用程序开发。Spring MVC通过分离模型(Model)、视图(View)和控制器(Controller)来简化Web开发...
这是一个基于Spring MVC、Mybatis和Spring框架实现的个人博客系统,涵盖了Web开发中的后端架构设计、数据库管理和前端展示等多个方面。以下将详细介绍这个系统的关键知识点: **1. Spring MVC** Spring MVC是Spring...
Spring MVC 是一个基于 Java 的轻量级Web应用框架,它为构建模型-视图-控制器(MVC)架构的应用程序提供了强大的支持。在本压缩包中包含了一系列与Spring MVC相关的jar文件,这些文件是构建和运行Spring MVC项目所...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一个重要模块,主要用于构建 Web 应用程序的后端控制层。这个框架提供了模型-视图-控制器(MVC)设计模式的实现,简化了Java Web应用的开发...
Spring MVC是Spring框架的一个核心模块,专用于构建Web应用程序。这个"Spring MVC使用Demo"提供了实践操作,帮助开发者深入理解Spring MVC的开发环境配置、注解的使用以及工作原理。 首先,Spring MVC的设计模式...
Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。Spring MVC的设计目标是提供一个清晰的组件化架构,使得开发者可以独立地开发和测试控制器、...
在本项目中,我们主要探讨的是如何利用Spring MVC和Spring Security框架构建一个基本的无数据库登录系统。Spring MVC是Spring框架的一部分,用于处理Web应用程序的请求-响应模型,而Spring Security则是一个强大的...
### Spring MVC 教程知识点详解 #### Spring Web MVC 框架简介 Spring Web MVC 是 Spring Framework 的一个重要组成部分,主要用于构建基于 Java 的 Web 应用程序。它提供了一个灵活且强大的 MVC 实现,使得开发者...
Spring MVC 和 MyBatis 是两个在Java Web 开发中广泛使用的框架。Spring MVC 作为Spring框架的一部分,负责处理HTTP请求并转发到相应的业务逻辑,而MyBatis则是一个轻量级的持久层框架,用于简化数据库操作。整合这...
Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。这个"Spring MVC 基础实例源码01"的资源很可能是为了帮助初学者理解Spring MVC的核心概念和...