📜  Spring-MVC框架

📅  最后修改于: 2020-11-11 07:08:28             🧑  作者: Mango


Spring Web MVC框架提供了Model-View-Controller(MVC)架构和现成的组件,可用于开发灵活且松散耦合的Web应用程序。 MVC模式导致分离应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑),同时在这些元素之间提供松散的耦合。

  • 模型封装了应用程序数据,通常它们将由POJO组成。

  • 视图负责呈现模型数据,并且通常会生成客户端浏览器可以解释的HTML输出。

  • Controller负责处理用户请求并构建适当的模型,并将其传递给视图以进行渲染。

DispatcherServlet

Spring Web模型视图控制器(MVC)框架是围绕处理所有HTTP请求和响应的DispatcherServlet设计的。下图说明了Spring Web MVC DispatcherServlet的请求处理工作流程-

Spring DispatcherServlet

以下是与对DispatcherServlet的传入HTTP请求相对应的事件序列-

  • 收到HTTP请求后, DispatcherServlet咨询HandlerMapping来调用适当的Controller

  • 控制器接收请求并基于使用的GET或POST方法调用适当的服务方法。服务方法将基于定义的业务逻辑设置模型数据,并将视图名称返回给DispatcherServlet

  • DispatcherServlet将从ViewResolver获得帮助,以为请求获取定义的视图。

  • 视图完成后, DispatcherServlet将模型数据传递到视图,该视图最终在浏览器上呈现。

所有上述组件,即HandlerMapping,Controller和ViewResolver都是WebApplicationContext w的一部分,它是纯ApplicationContext的扩展,具有Web应用程序必需的一些额外功能。

所需配置

您需要通过使用web.xml文件中的URL映射来映射希望DispatcherServlet处理的请求。以下是显示HelloWeb DispatcherServlet示例的声明和映射的示例-


    
   Spring MVC Application
   
   
      HelloWeb
      
         org.springframework.web.servlet.DispatcherServlet
      
      1
   

   
      HelloWeb
      *.jsp
   


web.xml文件将保留在Web应用程序的WebContent / WEB-INF目录中。初始化HelloWeb DispatcherServlet时,框架将尝试从位于应用程序的WebContent / WEB-INF目录中名为[servlet-name] -servlet.xml的文件中加载应用程序上下文。在这种情况下,我们的文件将是HelloWebservlet.xml

接下来,标记指示哪个DispatcherServlet将处理哪些URL。在这里,所有以.jsp结尾的HTTP请求都将由HelloWeb DispatcherServlet处理。

如果不想使用默认文件名作为[servlet-name] -servlet.xml和默认位置作为WebContent / WEB-INF ,则可以通过在web.xml文件中添加Servlet侦听器ContextLoaderListener来定制此文件名和位置。如下-



   
   ....
   
      contextConfigLocation
      /WEB-INF/HelloWeb-servlet.xml
   

   
      
         org.springframework.web.context.ContextLoaderListener
      
   
   

现在,让我们检查位于Web应用程序的WebContent / WEB-INF目录中的HelloWeb-servlet.xml文件的必需配置-



   

   
      
      
   


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

  • [servlet-name] -servlet.xml文件将用于创建定义的Bean,并覆盖全局范围内使用相同名称定义的任何Bean的定义。

  • 标签将用于激活Spring MVC注释扫描功能,该功能允许使用@Controller和@RequestMapping等注释。

  • InternalResourceViewResolver将具有定义为解析视图名称的规则。根据上述定义的规则,名为hello的逻辑视图被委托给位于/WEB-INF/jsp/hello.jsp的视图实现。

下一节将向您展示如何创建实际的组件,即Controller,Model和View。

定义控制器

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()方法声明为控制器的默认服务方法,以处理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的不同模型属性,视图将访问这些属性以显示最终结果。本示例创建一个属性为“ message”的模型。

  • 定义的服务方法可以返回String,该String包含用于呈现模型的视图的名称。本示例返回“ 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}是我们在Controller内部设置的属性。您可以在视图内部显示多个属性。

Spring Web MVC框架示例

基于上述概念,让我们检查一些重要的示例,这些示例将帮助您构建Spring Web应用程序-

Sr.No. Example & Description
1 Spring MVC Hello World Example

This example will explain how to write a simple Spring Web Hello World application.

2 Spring MVC Form Handling Example

This example will explain how to write a Spring Web application using HTML forms to submit the data to the controller and display a processed result.

3 Spring Page Redirection Example

Learn how to use page redirection functionality in Spring MVC Framework.

4 Spring Static Pages Example

Learn how to access static pages along with dynamic pages in Spring MVC Framework.

5 Spring Exception Handling Example

Learn how to handle exceptions in Spring MVC Framework.