zoukankan      html  css  js  c++  java
  • Spring MVC-概述(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_overview.htm

    说明:示例基于Spring MVC 4.1.6

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

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

    • 视图负责呈现模型数据,并在总体上产生HTML输出,客户端的浏览器可以解释。

    • 控制器负责处理用户的请求和建立适当的模型,并将其传递到用于呈现该视图。

    DispatcherServlet

    Spring Web模型视图控制器(MVC)框架围绕一个处理所有HTTP请求和响应的DispatcherServlet进行设计。Spring Web MVC DispatcherServlet的请求处理工作流程如下图所示:

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

    • DispatcherServlet收到HTTP请求后,请咨询HandlerMapping以调用相应的Controller。

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

    • 所述的DispatcherServlet将帮助从的ViewResolver到拾取该请求的已定义视图。

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

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

    必需配置

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

    <web-app id="WebApp_ID" version="2.4"
        xmlns="http://java.sun.com/xml/ns/j2ee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
     
        <display-name>Spring MVC Application</display-name>
    
       <servlet>
          <servlet-name>HelloWeb</servlet-name>
          <servlet-class>
             org.springframework.web.servlet.DispatcherServlet
          </servlet-class>
          <load-on-startup>1</load-on-startup>
       </servlet>
    
       <servlet-mapping>
          <servlet-name>HelloWeb</servlet-name>
          <url-pattern>*.jsp</url-pattern>
       </servlet-mapping>
    
    </web-app>

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

    接下来,<servlet-mapping>标签指示哪个URL将由哪个DispatcherServlet处理。这里以.jsp结尾的所有HTTP请求都将由HelloWeb DispatcherServlet处理。

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

    <web-app...>
    
      <!-------- DispatcherServlet definition goes here----->
      ....
      <context-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>/WEB-INF/HelloWeb-servlet.xml</param-value>
      </context-param>
    
      <listener>
         <listener-class>
            org.springframework.web.context.ContextLoaderListener
         </listener-class>
      </listener>
    </web-app>

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

    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans     
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
       <context:component-scan base-package="com.tutorialspoint" />
    
       <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <property name="prefix" value="/WEB-INF/jsp/" />
          <property name="suffix" value=".jsp" />
       </bean>
    
    </beans>

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

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

    • 将使用<context:component-scan...>标签来激活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()方法作为控制器的默认服务方法来处理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请求。上述控制器有以下重点要注意:

    • 您将在服务方法中定义所需的业务逻辑。您可以根据需要调用此方法内的其他方法。

    • 根据定义的业务逻辑,您将在此方法中创建一个模型(Model)。您可以设置不同的模型属性,并且这些属性将被视图访问以呈现最终结果。此示例创建一个其属性为“message”的模型。

    • 定义的服务方法可以返回一个包含用于渲染模型的视图(View)名称的String 。此示例返回“hello”作为逻辑视图名称。

    创建JSP视图

    Spring MVC支持不同演示技术的许多类型的视图。这些包括JSP,HTML,PDF,Excel工作表,XML,Velocity模板,XSLT,JSON,Atom和RSS源,JasperReports等。但最常见的是我们使用JSTL编写的JSP模板。所以让我们在/WEB-INF/hello/hello.jsp中写一个简单的hello视图:

    <html>
       <head>
         <title>Hello Spring MVC</title>
       </head>
       <body>
         <h2>${message}</h2>
       </body>
    </html>

    这里${message}是我们在Controller中设置的属性。您可以在视图中显示多个属性。

  • 相关阅读:
    TIDB-存储
    MySQL的ACID
    MySQL MVCC
    MySQL 悲观锁、乐观锁、MVCC一
    MySQL写放大总结
    基于Linux上的wifi密码爆破
    Stack与Queue的实现(c++模板实现)
    vector 实现二维数组
    Linux下的静态链接与动态链接
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/EasonJim/p/7446572.html
Copyright © 2011-2022 走看看