基于B/S粮食储备库管理系统设计外文翻译资料

 2022-09-16 10:09

英语原文共 12 页,剩余内容已隐藏,支付完成后下载完整资料


第8章 Spring @MVC

在这一章,你将学到用Spring MVC框架开发一个基于网络的应用程序。Spring MVC是Spring框架中最重要的模块之一。它建立在强大的Spring IoC容器上,而且大量运用容器的特性简化了它的配置。

模型-视图-控制器(MVC)在UI设计中是一个常见的设计模式。它通过分离应用程序中模型,视图和控制器三个角色从而去解耦UI中的业务逻辑。模型层负责封装应用程序的视图层要呈现的数据。视图层应仅仅只是展现这些数据而不涉及任何的业务逻辑。控制层负责接受用户的请求,然后为业务逻辑处理调用后端服务。在处理完后,后端服务可能会返回一些视图层要呈现的数据。控制层收集这些数据以及提供视图层要呈现的模型。MVC设计模式的核心理念是从UI中分隔业务逻辑的各层从而使他们可以独立地改变却不互相影响。

在Spring MVC的应用程序中,模型通常由被服务层处理的和被持久层持久化的领域对象构成。视图层通常是用JAVA标准标签库(JSTL)编写的JSP模板。然而,它也有可能将视图定义为PDF文件,Excel文件,RESTful网络服务或者甚至是Flex界面,其中最后几个经常被称为一个富互联网应用系统(RIA)。

在学习完这一章后,你便有能力用Spring MVC开发JAVA网络应用程序。你同时会理解Spring MVC中常用的控制器和视图类型。其中利用注释为Spring 3.0创建控制器也将成为现实。另外,你会明白Spring MVC最基本的准则,这会为在接下来的章节中更为高深的话题打下基础。

8-1. 用Spring MVC开发一个简单的网络应用程序

问题

你将用Spring MVC框架开发一个简单的网络应用程序去学习这个框架的基本概念和配置

解决方案

Spring MVC框架的中央组件就是控制器。在最简单的Spring MVC应用中,控制器就是仅仅是一个你需要在JAVA网络部署描述符(例如web.xml文件)中配置的servlet。一个Spring MVC控制器经常被看作是一个Dispatcher Servlet,它实现了Sun公司的JAVA EE的核心设计模式中一个被称为前端控制器的接口。Spring MVC控制器充当了Spring MVC框架的前端控制器,每一个web应用都要求必须有这个,因为它可以管理整个访问处理流程。

当有一个网络请求发送到Spring MVC应用程序时,控制器首先会接受请求,然后它会组织各种配置在Spring网络应用程序环境中的组件,或者组织它目前在控制器里的注释,所有控制器都需要处理这种请求。图8-1演示了Spring MVC的请求处理的基本流程。

模型

视图

视图名字

模型和视图

控制器

响应

请求

响应

响应

请求

处理程序

映射

视图

视图

分解器

控制器

Servlet

调度器

图8-1 Spring MVC请求处理基本流

为了在Spring3.0中定义一个控制器类,这个类必须使用@Controller注释标记。相比于其他框架的控制器或者Spring早期的版本,一个带注释的控制器类不需要实现独立框架接口或者是继承独立框架的基类。

例如,在Spring3.0之前的版本中的一系列类像AbstractController就被用作为一个带有Dispatcher Servlet功能的类。从Spring2.5开始,将注释类定义为Dispatcher Servlet就成为现实。像Spring3.0,那些赋予一个对象Dispatcher Servlet功能的的类被废弃就是为了支持那些注释类。

当一个带有@Contoller注释的类(例如一个控制器类)收到请求,它便会找一个合适的处理方法去处理请求。这要求控制器类用一个或多个处理映射为每一个请求映射一个特定的处理方法。为了这样处理,每一个控制器类的方法都应该用@RequestMappings注释去修饰,从而使他们拥有处理方法。

为那些处理方法命名时,比如你希望为所有开放的标准类命名时。你可以给一个处理程序方法指定任意名称和定义各种不同的方法参数。同样,处理程序方法也可以返回任何系列的值(例如字符串和空值),这取决于应用程序逻辑的实现。

随着本书的进度,你会遇到各种各样在程序方法使用@RequestMapping注释的方法参数。下面仅仅只是有效参数类型其中的一部分,仅仅只是给你一个参考。

  • HttpServletRequest 或者 HttpServletResponse
  • 带有@RequestParam注释任意类型的请求参数
  • 带有@RequestParam注释任意类型的模型属性
  • 带有@CookieValue注释的缓存值包括传入的请求值
  • 将属性添加到模型里的处理方法Map or ModelMap
  • 为控制对象访问有效绑定结果的处理方法Errors or BindingResult
  • 通知会话过程完成的处理方法SessionStatus

一旦控制器类选定了合适的处理方法,它会根据请求调用处理方法逻辑。通常控制器逻辑调用后端服务去处理请求。另外,处理方法的逻辑可能会有许多输入请求参数(例如HttpServletRequest, Map, Errors, or SessionStatus)增加或删除一些信息,这些参数将会持续成为Spring MVC流一部分。

在处理方法处理完请求进程后,它会将控制权交给视图,那些表示处理方法返回值的视图。为了维护灵活的方法,处理方法的返回值不能表示为一个视图的实现(例如user.jsp 或者 report.pdf)但是可以表示为一个逻辑视图(例如user或者report),也就是注意省略文件的扩展名。

处理器方法的返回值可以是一个代表逻辑视图名字的字符串或者是一个空值。在这种情况下,默认逻辑视图的名字取决于处理方法或控制器的名字

例如,如果一个处理方法用Map和SessionStatus对象作为输入参数,修改其处理方法内部逻辑的内容,那些相同的对象将会被处理方法当作返回视图。

当控制器类收到一个视图,它将会用视图解析器将逻辑视图的名字分解为一个特定视图实现(例如user.jsp 或者 report.pdf)。视图解析器是一个配置在web application context用以实现ViewResolver接口的bean.它的责任是返回用逻辑视图命名的特定的视图实现(HTML,JSP,PDF或者其他)。

一旦控制器类将视图名字解析为视图实现,包括每一个视图实现设计。它会让那些对象(例如HttpServletRequest, Map, Errors, or SessionStatus)通过控制器处理方法。视图的责任是将那些被添加在处理方法逻辑中的对象呈现给用户。

工作原理

假设你要为一个体育中心开发一个预定系统,这个应用的UI必须是基于网络的,这样用户才能通过网络在线上做预定,你想用Spring MVC来开发这个应用,你就需要在领域子包内创建以下领域类:

package com.apress.springrecipes.court.domain;
...
public class Reservation {
private String courtName;
private Date date;
private int hour;
private Player player;
private SportType sportType;
// Constructors, Getters and Setters
...
}


package com.apress.springrecipes.court.domain;


public class Player {
private String name;
private String phone;
// Constructors, Getters and Setters
...
}


package com.apress.springrecipes.court.domain;


public class SportType {
private int id;
private String name;
// Constructors, Getters and Setters
...
}

然后你要在服务子包内定义以下服务接口为表示层提供预定服务:

package com.apress.springrecipes.court.service;
...
public interface ReservationService {
public Listlt;Reservationgt; query(String courtName);
}

在一个应用产品中,你应该用数据库持久化实现这种接口,但是为了简单起见,你可以将预定记录保存在一个list集合中,然后用硬编码的方式编写几个预定记录便于测试:


package com.apress.springrecipes.court.service;
...
public class ReservationServiceImpl implements ReservationService {


public static final SportType TENNIS = new SportType(1, 'Tennis');
public static final SportType SOCCER = new SportType(2, 'Soccer');


private Listlt;Reservationgt; reservations;


public ReservationServiceImpl() {
reservations = new ArrayListlt;Reservationgt;();
reservations.add(new Reservation('Tennis #1',
new GregorianCalendar(2008, 0, 14).getTime(), 16,
new Player('Roger', 'N/A'), TENNIS));
reservations.add(new Reservation('Tennis #2',
new GregorianCalendar(2008, 0, 14).getTime(), 20,
new Player('James', 'N/A'), TENNIS));
}


public Listlt;Reservationgt; query(String courtName) {
Listlt;Reservationgt; result = new ArrayListlt;Reservationgt;();
for (Reservation reservation : reservations) {
if (reservation.getCourtName().equals(courtName)) {
result.add(reservation);
}
}
return result;
}
}

建立一个Spring MVC应用程序

接着,你需要创建Spring MVC应用层。通常,用程序Spring MVC搭建的网络应用与普通的JAVA网络应用的方法是一样的,除此之外,你必须要将一些配置文件和必需的库文件加入到Spring MVC中。

JAVA EE的规范定义了由Web Archive或者WAR文件构成的JAVA网络应用程序的有效的目录结构。例如,你必须为应用在WEB-INF文件夹中提供web部署描述文件(例如web.xml)。这些网络应用的类文件和JAR文件应该分别放在WEB-INF/classes和WEB-INF/lib目录下。

对于你的预定系统来说,你需要创建以下目录结构。请注意那些加亮的文件,它们是Spirng特定的配置文件。

注意:用Spring MVC开发一个网络应用,你必须将所有正规的Spring依赖文件(欲了解详情见第一章)和Spring Web,Spring MVC的依赖文件全部加入你的CLASSPATH中,如果你在用Maven,将以下的依赖文件加入你的Maven工程中:

lt;dependencygt;
lt;groupIdgt;org.springframeworklt;/groupIdgt;
lt;artifactIdgt;spring-webmvclt;/artifactIdgt;
lt;versionamp;

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[148696],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。