开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Spring的MVC框架

简介:
+关注继续查看










本文转自 tony_action 51CTO博客,原文链接:http://blog.51cto.com/tonyaction/84893第一章    SpringMVC框架
6.1 Spring  MVC概要
Springweb框架是围绕DispatcherServlet来进行设计的。DispatcherServlet的作用是将请求分发到不同的处理器。Springweb框架包括可配置的处理器(handler)映射、视图(view)解析、本地化(local)解析、主题(theme)解析以及对上传文件解析。处理器是对Controller接口的实现,该接口仅仅定义了ModelAndView handleRequest(request, response)方法。你可以通过实现这个接口来生成自己的控制器(也可以称之为处理器),但是从Spring提供的一系列控制器继承会更省事,比如AbstractControllerAbstractCommandControllerSimpleFormController。注意,你需要选择正确的基类:如果你没有表单,你就不需要一个FormController。这是和Structs的一个主要区别。Spring的视图解析相当灵活。一个控制器甚至可以直接向response输出一个视图(此时控制器返回ModelAndView的值必须是null)。在一般的情况下,一个ModelAndView实例包含一个视图名字和一个类型为Mapmodel,一个model是一些以bean的名字为key,以bean对象(可以是命令或form,也可以是其他的JavaBean)为value的名值对。对视图名称的解析处理也是高度可配置的,可以通过bean的名字、属性文件或者自定义的ViewResolver实现来进行解析。实际上基于Mapmodel(也就是MVC中的M))是高度抽象的,适用于各种表现层技术。也就是说,任何表现层都可以直接和Spring集成,无论是JSPVelocity还是其它表现层技术。Map model可以被转换成合适的格式,比如JSP request attribute或者Velocity template model
Spring Web MVC框架提供了大量独特的功能,包括:
1) 清晰的角色划分:控制器(controller)、验证器(validator)、命令对象(command object)、表单对象(form object)、模型对象(model object)、Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、视图解析器(view resolver)等等。 每一个角色都可以由一个专门的对象来实现。
2)强大而直接的配置方式:将框架类和应用类都作为JavaBean配置,支持在一个context中引用其他context的中JavaBean,例如,在web控制器中对业务对象和验证器(validator)的引用。
3) 可适配、非侵入的controller你可以根据不同的应用场景,选择合适的控制器子类(simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器(比如Action/ActionForm)继承。
4)可重用的业务代码:你可以使用现有的业务对象作为命令或表单对象,而不需要在类似ActionForm的子类中重复它们的定义。
5)可定制的绑定(binding 和验证(validation):比如将类型不匹配作为应用级的验证错误,这可以保存错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象,需要手动解析它并转换到业务对象。
6) 可定制的handler mappingview resolutionSpring提供从最简单的的URL映射,到复杂的、专用的定制策略。与某些MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。灵活。
7) 灵活的model转换: Springweb框架中,使用基于Map的名/值对来达到轻易地与各种视图技术的集成。
8) 可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等等。
9)Spring Bean的生命周期可以被限制在当前的HTTP Request或者HTTP Session准确的说,这并非Spring MVC框架本身特性,而应归属于Sping MVC使用的WebApplicationContext容器。
6.2 将请求映射到控制器
       和其它web框架一样,Springweb框架是一个请求驱动的web框架,其设计围绕一个中心的servlet进行,它能将请求分发给控制器,并提供其它功能帮助web应用开发。然而,SpringDispatcherServlet所做的不仅仅是这些,它和SpringIoC容器完全集成在一起,从而允许你使用Spring的其它功能。
代码清单1
<servlet>
       <servlet-name>dispatcher</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>/WEB-INF/spring-config-mvc.xml</param-value>
       </init-param>
       <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
       <servlet-name>dispatcher</servlet-name>
       <url-pattern>*.do</url-pattern>
</servlet-mapping>
代码清单1中我们定义了DispatcherServlet取名dispatcher并且将所有以.do结尾的请求都交由dispatcher处理,并且为他指定了名为spring-config-mvc.xml Spring配置文件。如果我们没有指定配置文件的名称Spring会在web应用的WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml的配置文件如dispatcher-servlet.xml
代码清单2
<bean id="viewResolver" class="org.springframework.web.servlet.view.
                                                               InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
</bean>
<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.
                                                                             SimpleUrlHandlerMapping">
      <property name="mappings">
        <props>
          <prop key="/helloworld.do"> helloworldController</prop>
        </props>
      </property>
</bean>
<bean id=" helloworldController "
                            class="com.tony.web.controller.HelloworldController"/>
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class HelloworldController implements Controller  {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request,
           HttpServletResponse response) throws Exception {
       //HttpServletRequest中加入一个名为message值为HelloWorld的对象
       request.setAttribute("message""HelloWorld");
       //返回一个ModelAndView对象通过viewResolver的处理
              //页面跳转至/WEB-INF/jsp/helloworld.jsp
       return new ModelAndView("helloworld");
    }
}
代码清单1配置 InternalResourceViewResolver,它是 jsp 渲染模板的处理器。如果你告诉 InternalResourceViewResolver 处理一个名为 helloworld的模板时,它会渲染 /WEB-INF/jsp/helloworld.jsp 文件。把 jsp 文件放到 /WEB-INF/jsp/ 目录下是被鼓励的,这样可以防止用户不经过 Controller 直接访问 jsp 文件从而出错。配置 SimpleUrlHandlerMapping 在上面的配置文件中,/ helloworld.do 的请求将被 helloworldController处理。 "/ helloworld.do""helloworldController是变量,你可以更改。但是你注意到了吗, hello.do  .do 作为后缀名。如果这里(本文的条件下)你不使用.do 作为后缀名, 就没有程序来处理这个请求了。 因为 DispatcherServlet 将收到的请求转交给 SimpleUrlHandlerMappingDispatcherServlet 收不到的请求,SimpleUrlHandlerMapping 当然也收不到了。我们还定义了一个名为HelloworldController控制器来处理/helloworld.do的请求。大多数Web应用都会遇到需要填写表单的页面,当表单提交成功后,表单的数据被传送到Web服务器中处理,遇到这种情况Spring为我们提供了一个简单的类SimpleFormController
代码清单2
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.mvc.SimpleFormController;
public class HelloworldController extends SimpleFormController{
    public HelloworldController(){
       //设置表单对象类型
       this.setCommandClass(User.class);
    }
    @Override
    protected void doSubmitAction(Object command) throws Exception {
       User user = (User)command;
       //User对象存入数据库
       }
}
    代码清单2中我们将HelloworldController类继承SimpleFormController并且实现了doSubmitAction方法,在构造方法中我们设置了表单对象的类型,当表单提交后Spring会自动调用doSubmitAction方法将表单对象装配好作为入参传递进来,我们将其类型转后就可以对其操作了。
 ,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring(十六)之MVC框架
MVC 框架教程 Spring web      MVC 框架提供了模型-视图-控制的体系结构和可以用来开发灵活、松散耦合的 web 应用程序的组件。MVC 模式导致了应用程序的不同方面(输入逻辑、业务逻辑和 UI 逻辑)的分离,同时提供了在这些元素之间的松散耦合。
898 0
Spring MVC (mvc框架)
与struts2属于竞争关系,是MVC框架。 1.依赖 &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework&lt;/groupId&gt; &lt;artifactId&gt;spring-web&lt;/artifactId&gt; &lt;version&gt;4.0.
1248 0
SSM中(Spring-SpringMVC-Mybatis)(二:整合)
使用Maven整合一个SSM,当然要配有Maven环境,Maven的环境配置自行百度,挺好配的 创建一个Maven项目以后,目录结构如图所示:   然后就是各部分配置:   首先pom导入依赖jar包: 1 3 4.
1206 0
spring+springMVC+mybatis的整合 part3
配置自定义的404页面,替换Tomcat不友好的404页面 有时候我们想替换掉tomcat自带的404页面 如图: Paste_Image.png 404也就是说找不到当前资源或者资源不存在 The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. 替换思路:错误404这种常出现的页面,我们可以设置为静态资源,以加快网页访问。
855 0
Spring + SpringMVC + MyBatis整合
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/52268445 1 加入...
1159 0
Spring MVC Spring MyBatis 整合 - 快速上手
我个人比较喜欢写注释,在工作中对注释的重要性看的也比较高,所以大部分文字都在注释中,代码外的文字会写的偏少,关键能懂就行 先看一下整合后的工程目录(单工程,多工程以后会采用maven) 5个package分别对应 action, entity, mapper(也就是DAO,采用动态代理), service, service 实现类 resources 下 相关资源文件: db.
1437 0
spring spring-mvc mybatis 整合
以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个ORM 工具感兴趣。因为接下来自己的项目中很有可能采用这个ORM工具。所以在此重新温习了一下 mybatis, 因此就有了这个
2114 0
Spring boot 通用配置文件模板
001 # =================================================================== 002 # COMMON SPRING BOOT PROPERTIES 003 # 004 # This sample file is provided as a guideline.
1569 0
+关注
20377
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载