实验 十 Spring 的MVC应用.docx
- 文档编号:13610374
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:32
- 大小:361.42KB
实验 十 Spring 的MVC应用.docx
《实验 十 Spring 的MVC应用.docx》由会员分享,可在线阅读,更多相关《实验 十 Spring 的MVC应用.docx(32页珍藏版)》请在冰点文库上搜索。
实验十Spring的MVC应用
实验十Spring的MVC应用
—基于Spring3.0的SpringMVC
一、概述
SpringMVC是当前最优秀的MVC框架,自从Spring2.5版本发布后,由于支持注解配置,采用了松散耦合可插拔组件结构,具有比其它MVC框架更多的扩展性和灵活性,易用性有了大幅度的提高。
Spring3.0更加完善,实现了对Struts2的超越。
现在越来越多的开发团队选择了SpringMVC。
Spring框架提供了构建Web应用程序的全功能MVC模块。
使用Spring可插入的MVC框架,可以选择内置的SpringMVC框架,也可以使用像Struts这样的Web框架。
通过策略接口,Spring框架是高度可配置的,而且包含多种视图技术,例如JSP、Velocity、Tiles、iText和POI等。
实际上,SpringMVC框架并不知道使用的什么视图技术,所以可以根据需要选用任何视图技术。
SpringMVC框架分离了控制器、模型对象、分发器以及处理程序对象的角色。
SpringWebMVC框架提供了大量独特的功能,包括:
∙清晰的角色划分:
控制器(controller)、验证器(validator)、命令对象(commandobject)、表单对象(formobject)、模型对象(modelobject)、Servlet分发器(DispatcherServlet)、处理器映射(handlermapping)、视图解析器(viewresolver)等等。
每一个角色都可以由一个专门的对象来实现。
∙强大而直接的配置方式:
将框架类和应用类都作为JavaBean配置,支持在一个context中引用其他context的中JavaBean,例如,在web控制器中对业务对象和验证器(validator)的引用。
∙可适配、非侵入的controller:
你可以根据不同的应用场景,选择合适的控制器子类(simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器(比如Action/ActionForm)继承。
∙可重用的业务代码:
你可以使用现有的业务对象作为命令或表单对象,而不需要在类似ActionForm的子类中重复它们的定义。
∙可定制的绑定(binding)和验证(validation):
比如将类型不匹配作为应用级的验证错误,这可以保存错误的值。
再比如本地化的日期和数字绑定等等。
在其他某些框架中,你只能使用字符串表单对象,需要手动解析它并转换到业务对象。
∙可定制的handlermapping和viewresolution:
Spring提供从最简单的的URL映射,到复杂的、专用的定制策略。
与某些MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。
灵活。
∙灵活的model转换:
在Springweb框架中,使用基于Map的名/值对来达到轻易地与各种视图技术的集成。
∙可定制的本地化和主题(theme)解析:
支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等等。
二、核心类与接口
Spring的Web框架是围绕DispatcherServlet设计的。
DispatcherServlet是一个前端控制器,它负责接收HTTP请求,组织并协调SpringMVC的各种组件完成请求的处理工作。
具体讲,DispatcherServlet将请求的处理工作委托分派给处理器程序(Handler),处理器程序负责处理请求执行的相应业务逻辑。
Spring的Web框架包括可配置的处理器(Handler)映射、视图(View)解析、本地化(local)解析、主题(Theme)解析以及对文件上传的支持。
DispatcherServlet的具体工作主要包括以下三点:
1)截获满足特定模式的URL请求,交由SpringMVC框架处理;
2)初始化DispatcherServlet上下文对应的WebApplicationContext,并将其和业务层、持久层的WebApplicationContext(在Spring环境中这些都是有IoC容器来承担)建立联系,以便展现层的Bean可以调用业务层的Bean;
3)初始化SpringMVC各个组件,并将它们装配到DispatcherServlet的实例中。
和其它任何Servlet一样,使用Spring的MVC时,必须在web.xml中配置好DispatcherServlet。
三、请求处理生命周期
在Spring中DispatcherServlet是与SpringIoC容器完全集成的。
以下是Spring3.0MVC请求流程的生命周期:
(1)客户端将请求以HTTP请求的形式发送到Web容器中。
(2)这个传入的请求被前端控制器(DispatcherServlet)截获,并将请求的处理工作委托给具体的处理器(Handler),Handler负责处理请求执行相应的业务逻辑。
在此之前,DispatcherServlet凭借请求信息(URL或请求参数)并咨询处理器映射(HandlerMapping)找到相应的处理器。
(3)当DispatcherServlet从HandlerMapping中找到当前请求对应的处理器后,它就将请求分派给这个处理器。
处理器根据请求的信息执行相应的业务逻辑。
设计良好的处理器应该通过调用service层的业务对象完成业务处理,而不是越俎代庖。
Spring提供了丰富的处理器类型,在真正处理业务逻辑前,有些处理器会事先执行两项处理任务:
将HttpServletRequest请求参数绑定到一个POJO对象中;
对绑定了请求参数的POJO对象进行数据合法性校验。
(4)处理器完成业务逻辑的处理后将返回ModelandView给DispatcherServlet,ModelandView包含了视图逻辑名和渲染视图时需要用到的模型数据对象。
(5)由于ModelAndView包含的是视图逻辑名,DispatcherServlet必须知道这个逻辑名对应的真实视图对象。
这项视图的解析工作由ViewResolver来完成。
(6)当得到真实的视图对象后,DispatcherServlet将请求分派给这个View对象,由其完成Model数据的渲染工作。
(7)最后客户得到返回的相应,这可能是一个普通的Html页面,也跨能是一个Excel电子表格,甚至是一个PDF文档等各种视图形式。
Spring的视图类型是相当丰富和灵活的。
四、开发一个SpringMVC程序的步骤
开发一个SpringMVC程序至少需要以下步骤:
(1)编写处理请求逻辑的处理器;
(2)在DispatcherServlet上下文对应的Spring配置文件中配置处理器;
(3)配置一个视图解析器,对处理器返回的ModelAndView进行解析;
编写一个视图对象(一般是JSP,也可以是其它形式的视图),将相应展现给用户。
实验一、在Spring3.0MVC创建HelloWorld应用程序
开发步骤:
(1)新建webProject
新建一个webProject,如Spring3MVC
(2)加载项目所需要的jar包
在增加Spring功能时,选择添加spring3.0core.jar和spring3.0web.jar。
(3)Spring控制器类
我们需要一个SpringMVC控制器类,将处理该请求,并显示”HelloWorld”消息。
为此,我们创建一个包com.spring3.controller用于保存处理器文件。
创建一个名为HelloWorldController的类作为控制器。
packagecom.spring3.controller;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.servlet.ModelAndView;
@Controller
publicclassHelloWorldController{
@RequestMapping("/hello")
publicModelAndViewhelloWorld(){
Stringmessage1="HelloWorld,Spring3.0!
";
returnnewModelAndView("hello","message2",message1);
}
}
这里用注释@Controller将HelloWorldController类注明为控制器,当DispatcherServlet扫描到包(com.spring3.controller)中的这个类后,将其识别为一个处理请求的控制器bean。
@RequestMapping注解告诉Spring,这个控制器应该处理/路径下以hello开始的所有URL请求,包括/hello/*和/hello.html。
HelloWorld()方法返回ModelAndView对象。
ModelAndView对象包含视图逻辑名和渲染视图所需要的模型对象。
HelloWorld()方法返回ModelAndView对象后,视图解析器ViewResolver将其解析为具体的视图对象(通常称为物理视图),返回用数据模型装饰了的页面返回到浏览器,这样我们就可以在视图JSP中访问数据。
(4)配置web.xml文件
SpringMVC应用的切入点是在部署描述符(web.xml)中定义的Servlet。
因此,需要在web.xml中配置这个servlet,即org.springframework.web.servlet.DispatcherServlet。
xmlversion="1.0"encoding="UTF-8"?
>
xsi="http: //www.w3.org/2001/XMLSchema-instance" xmlns=" xmlns: web=" xsi: schemaLocation=" id="WebApp_ID"version="2.5"> org.springframework.web.servlet.DispatcherServlet 上面的代码配置了映射URL模式为*.html的DispatcherServlet。 现在越来越多的Web应用倾向于采用“*.html”后缀作为框架URL映射的模式,因为这种方法可以对使用者屏蔽服务端所使用的具体实现技术(如果用.do,客户端用户马上就知道服务器使用Struts框架);另外这种方式容易让搜索引擎“误以为”网站各个链接都是一个静态网页,这将增加动态网站被收录的机会。 从纯技术层面讲,可以使用任何后缀模式,如*.Spring、*.shml等。 这里有一点要注意是 初始化DispatcherServlet之后,它会在Web应用程序的WEB-INF文件夹中查找一个名为[servlet-name]-servlet.xml的文件。 在这个例子中,要找的文件是spring-servlet.xml,所以我们必须定义这个文件。 spring-servlet.xml文件的内容: //spring-servlet.xml xmlversion="1.0"encoding="UTF-8"? > //www.springframework.org/schema/beans" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xmlns: p="http: //www.springframework.org/schema/p" xmlns: context="http: //www.springframework.org/schema/context" xsi: schemaLocation="http: //www.springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring-beans-3.0.xsd http: //www.springframework.org/schema/contexthttp: //www.springframework.org/schema/context/spring-context-3.0.xsd"> component-scan base-package="com.spring3.controller"/> class="org.springframework.web.servlet.view.UrlBasedViewResolver"> value="org.springframework.web.servlet.view.JstlView"/> 在上面的XML配置文件,定义了一个标签 component-scan>,它是关于上下文环境的一个标签。 这个标签定义了Spring开始扫描的起始路径,此处的定义允许Spring从包com.spring3.controller中载入所有组件和它的所有子包。 从而HelloWorldController类将被载入。 另外,其中还定义一个bean: viewResolver。 这个bean解决逻辑视图问题,这里它通过将逻辑视图添加前缀字符串/WEB-INF/jsp/,再加上后缀.jsp形成物理视图。 在HelloWorldController类,返回的ModelAndView对象中的视图逻辑名称是”Hello”,这个逻辑名被这里定义的viewResolver解释成路径/WEB-INF/jsp/hello.jsp。 //hello.jsp HelloWorld ${message2} //index.jsp HelloWorld
实验二、使用Spring3.0MVC处理表单
一、实验目的:
1.进一步熟悉Spring3.0MVC编程
2.掌握使用Spring3.0MVC捕捉表单数据的基本方法
3.为后面结合使用JPA和Sping3.0MVC操作数据打下基础
二、实验要求:
创建使用Spring3.0MVC处理表单数据的应用,实现基本的联系人管理器应用。
该应用将有一个表单用来取用户的详细联系方式。
这次只在日志中从表单中捕获的联系人细节。
实验效果如下:
三、实验步骤
1.按实验一的方法,建立Spring3MVC工程的基本环境。
(1)创建的web工程结构。
(2)增加基本的Springweb功能、配置前端控制器和控制器配置文件;
创建文件夹com.spring3.form用于存放联系人实体类,创建com.spring3.controller用于存放控制器类。
在/WEB-INF/下创建jsp文件夹用于存放jsp文件。
此时的工程组成结构如下图所示:
(3)创建JSP文件
1)修改index.jsp文件的内容如下:
forwardpage="contacts.html">
forward>
2)在/WEB-INF/jsp/文件夹下创建contact.jsp文件,其内容如下:
/jsp/contact.jsp
<%@tagliburi="http:
//www.springframework.org/tags/form"prefix="form"%>
ContactManager
formmethod="post"action="addContact.html"> labelpath="firstname">FirstName label> inputpath="firstname"/> labelpath="lastname">LastName label> inputpath="lastname"/> labelpath="lastname">Email label> inputpath="email"/> labelpath="lastname">Telephone label> inputpath="telephone"/>
form>
(4)增加Spring3的表单和控制器
1)创建从屏幕检索和显示数据的表单的Contact.java文件
文件存放在com.spring3.form中,文件内容如下:
//contact.java
packagecom.spring3.form;
publicclassContact{
privateStringfirstname;
privateStringlastname;
privateStringemail;
privateStringtelephone;
…这里没有产生这些属性的setter和getter。
在Contact类名上点右键—>Source–>GenerateGettersandSetters,如下图:
2)创建控制器
文件:
com.spring3.controller.ContactController
packagecom.spring3.controller;
importcom.spring3.form.Contact;
importorg.springframework.stereotype.Controller;
importorg.springframework.validation.BindingResult;
importorg.springframework.web.bind.annotation.ModelAttribute;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.bind.annotation.SessionAttributes;
importorg.springframework.web.servlet.ModelAndView;
@Controller
@SessionAttributes
publicclassContactController{
@RequestMapping(value="/addContact",method=RequestMethod.POST)
publicStringaddContact(@ModelAttribute("contact1")
Contactcontact,BindingResultresult){
System.out.println("FirstName:
"+contact.getFirstname()+
"LastName:
"+contact.getLastname());
return"redirect:
contacts.html";
}
@RequestMapping("/contacts")
publicModelAndViewshowContacts(){
returnnewModelAndView("contact","command",newContact());
}
}
在上面的控制器类,创建了两
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 Spring 的MVC应用 MVC 应用