教程 > spring 框架 > 阅读:81

spring mvc 框架——迹忆客-ag捕鱼王app官网

spring web mvc 框架提供了模型-视图-控制器 (mvc) 架构和现成的组件,可用于开发灵活且松耦合的 web 应用程序。 mvc 模式导致分离应用程序的不同方面(输入逻辑、业务逻辑和 ui 逻辑),同时在这些元素之间提供松耦合。

  • model - 模型封装了应用程序数据,并且通常它们由 pojo 组成。
  • view - 视图主要用于呈现模型数据,并且通常它生成客户端的浏览器可以解释的 html 输出。
  • controller - 控制器主要用于处理用户请求,并且构建合适的模型并将其传递到视图呈现。

dispatcherservlet

spring web 模型-视图-控制器 (mvc) 框架是围绕处理所有 http 请求和响应的 dispatcherservlet 设计的。 spring web mvc dispatcherservlet 的请求处理工作流程如下图所示

spring dispatcherservlet架构
spring dispatcherservlet架构

下面是对应于 dispatcherservlet 传入 http 请求的事件序列:

  • 收到一个 http 请求后,dispatcherservlet 根据 handlermapping 来选择并且调用适当的控制器。
  • 控制器接受请求,并基于使用的 get 或 post 方法来调用适当的 service 方法。service 方法将设置基于定义的业务逻辑的模型数据,并返回视图名称到 dispatcherservlet 中。
  • dispatcherservlet 会从 viewresolver 获取帮助,为请求检取定义视图。
  • 一旦确定视图,dispatcherservlet 将把模型数据传递给视图,最后呈现在浏览器中。

上述所有组件,即 handlermapping、controller 和 viewresolver 都是 webapplicationcontext 的一部分,它是 plainapplicationcontext 的扩展,具有 web 应用程序所需的一些额外功能。

所需配置

你需要通过使用 web.xml 文件中的 url 映射来映射你所希望 dispatcherservlet 处理的请求。 下面是一个显示 helloweb dispatcherservlet 示例的声明和映射的示例

web.xml


    
   spring mvc application
   
   
      helloweb
      
         org.springframework.web.servlet.dispatcherservlet
      
      1
   
   
      helloweb
      *.jsp
   

web.xml 文件将被保留在你的应用程序的 webcontent/web-inf 目录下。好的,在初始化 helloweb dispatcherservlet 时,该框架将尝试加载位于该应用程序的 webcontent/web-inf 目录中文件名为 [servlet-name]-servlet.xml 的应用程序内容。在这种情况下,我们的文件将是 helloweb-servlet.xml。

接下来, 标签表明哪些 urls 将被 dispatcherservlet 处理。这里所有以 .jsp 结束的 http 请求将由 helloweb dispatcherservle t处理。

如果你不想使用默认文件名 [servlet-name]-servlet.xml 和默认位置 webcontent/web-inf,可以通过在 web.xml 文件中添加 servlet 监听器 contextloaderlistener 自定义该文件的名称和位置,如下所示:


   
   ....
   
      contextconfiglocation
      /web-inf/helloweb-servlet.xml
   
   
      
         org.springframework.web.context.contextloaderlistener
      
   
   

现在,让我们检查 helloweb-servlet.xml 文件所需的配置,该文件位于 web 应用程序的 webcontent/web-inf 目录中


   
   
      
      
   

以下是关于 helloweb-servlet.xml 文件的要点

  • [servlet-name]-servlet.xml 文件将用于创建 bean 定义,重新定义在全局范围内具有相同名称的任何已定义的 bean。
  • 标签将用于激活 spring mvc 注释扫描功能,该功能允许使用注释,如 @controller 和 @requestmapping 等等。
  • internalresourceviewresolver 将使用定义的规则来解决视图名称。按照上述定义的规则,一个名称为 hello 的逻辑视图将发送给位于 /web-inf/jsp/hello.jsp 中实现的视图。

下一节将向你展示如何创建实际的组件,例如控制器,模式和视图。

定义控制器

dispatcherservlet 发送请求到控制器中执行特定的功能。**@controller** 注释表明一个特定类是一个控制器的作用。**@requestmapping** 注释用于映射 url 到整个类或一个特定的处理方法。

@controller
@requestmapping("/hello")
public class hellocontroller { 
   @requestmapping(method = requestmethod.get)
   public string printhello(modelmap model) {
      model.addattribute("message", "hello spring mvc framework!");
      return "hello";
   }
}

@controller 注释定义该类作为一个 spring mvc 控制器。在这里,第一次使用的 @requestmapping 表明在该控制器中处理的所有方法都是相对于 /hello 路径的。下一个注释 @requestmapping(method = requestmethod.get) 用于声明 printhello() 方法作为控制器的默认 service 方法来处理 http get 请求。你可以在相同的 url 中定义其他方法来处理任何 post 请求。

你可以用另一种形式来编写上面的控制器,你可以在 @requestmapping 中添加额外的属性,如下所示:

@controller
public class hellocontroller{
   @requestmapping(value = "/hello", method = requestmethod.get)
   public string printhello(modelmap model) {
      model.addattribute("message", "hello spring mvc framework!");
      return "hello";
   }
}

value 属性指定处理程序方法映射到的 url,method 属性定义处理 http get 请求的服务方法。 关于上面定义的控制器,需要注意以下几点

  • 我们将在服务方法中定义所需的业务逻辑。 可以根据需要在此方法中调用另一个方法。
  • 根据定义的业务逻辑,将在此方法中创建一个模型。 可以使用 setter 不同的模型属性,视图将访问这些属性以呈现最终结果。 这个例子创建了一个具有“消息”属性的模型。
  • 定义的服务方法可以返回一个字符串,其中包含用于呈现模型的视图的名称。 此示例返回“hello”作为逻辑视图名称。

创建 jsp 视图

对于不同的表示技术,spring mvc 支持许多类型的视图。这些包括 jsp、html 、pdf、excel 工作表、xml、velocity 模板、xslt、json、atom 和 rss 提要、jasperreports 等等。但我们最常使用利用 jstl 编写的 jsp 模板。所以让我们在 /web-inf/hello/hello.jsp 中编写一个简单的 hello 视图:


   
   hello spring mvc
   
   
   

${message}

其中,${message} 是我们在控制器内部设置的属性。你可以在你的视图中有多个属性显示。


spring web mvc 框架例子

基于上述概念,让我们看看一些重要的例子来帮助你建立 spring web 应用程序:

序号 例子 描述
1 这个例子将解释如何编写一个简单的 spring web hello world 应用程序。
2 这个例子将解释如何编写一个 spring web 应用程序,它使用 html 表单提交数据到控制器,并且显示处理结果。
3 学习在 spring mvc 框架中如何使用页面重定向功能。
4 学习在 spring mvc 框架中如何访问静态页面和动态页面。
5 学习在 spring mvc 框架中如何处理异常。

查看笔记

扫码一下
查看教程更方便
网站地图