概述

优质
小牛编辑
133浏览
2023-12-01

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

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

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

  • Controller负责处理User RequestsBuilding Appropriate Model ,并将其传递给视图进行渲染。

DispatcherServlet

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

Spring DispatcherServlet

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

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

  • Controller接受请求并根据使用的GETPOST method调用适当的服务POST method 。 服务方法将基于定义的业务逻辑设置模型数据,并将视图名称返回给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文件将保存在Web应用程序的WebContent/WEB-INF目录中。 在初始化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...>
   <!-------- <i>DispatcherServlet</i> 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 = "cn.xnip" />
   <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的视图实现。

现在让我们了解如何创建实际组件,即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请求的服务方法。

以下是关于上面定义的控制器需要注意的一些要点 -

  • 您将在服务方法中定义所需的业务逻辑。 您可以根据要求在此方法中调用另一个方法。

  • 根据定义的业务逻辑,您将在此方法中创建模型。 您可以设置不同的模型属性,视图将访问这些属性以显示结果。 此示例创建一个具有其属性“message”的模型。

  • 定义的服务方法可以返回String,其中包含用于呈现模型的view的名称。 此示例返回“hello”作为逻辑视图名称。

创建JSP视图

Spring MVC支持不同类型的视图,用于不同的表示技术。 这些包括 - JSPs, HTML, PDF, Excel Worksheets, XML, Velocity Templates, XSLT, JSON, AtomRSS提要, 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中设置的属性。 您可以在视图中显示多个属性。

最后更新:

类似资料

  • 龙果开源-后台管理系统 项目介绍 框架完全是基于Spring IO platform,绝对拥抱Spring,版本的依赖关系再不用担心。 前端基于 龙果开源-后台管理UI Roncoo AdminLTE,高端大气上档次。 实现了邮件发送功能,邮件增删改查功能 代码自动生成工具使用了龙果开源-Mybatis代码自动生成工具 项目愿景 根据实际项目的需求,实现一个适合由单应用扩展到多应用的架构。在项目的

  • 主要内容:1 XML配置方式,2 注解方式如果你使用 Spring MVC 来构建 Web 应用并对性能有较高的要求的话,可以使用 Fastjson 提供的FastJsonHttpMessageConverter 来替换 Spring MVC 默认的 HttpMessageConverter 以提高 @RestController @ResponseBody @RequestBody 注解的 JSON序列化速度。下面是配置方式,非常简单。

  • 大家好,我对thymeleaf和我的静态html页面有一个问题。更具体地说,我有一个spring mvc web应用程序,我也在使用spring security,在我的登录页面中,我想使用thymeleaf,这样spring security可以与另一端的客户端层通信吗?我不想在我的所有html页面中包括thymeleaf,因为我将使用AngularJs 我尝试将登录名放在templates文件

  • http://some-amazon-link:8080/the-war-name/login 现在我正在纠结如何在Spring MVC项目中添加“/the-war-name/”以及在哪里添加“/the-war-name/”。 它在 null

  • 我的项目是在Windows-SpringIDE-TomcatV8上进行的。0用于windows,MySql5。该项目还涉及java7、Tomcat7。我所有的课都是自动注释的。问题是,当我在Centos上部署project时,我有java8、Tomcat8和一个异常。请提出一些解决问题的建议。 以下是linux上的例外情况: 组织。springframework。豆。工厂BeanCreationE

  • 主要内容:1.Spi机制概述,2.代码分析,3.Spi机制的应用场景,4.ServiceLoader分析,5.Spi总结1.Spi机制概述 SPI ,全称为,是一种服务发现机制。它通过在ClassPath路径下的文件夹查找文件,自动加载文件里所定义的类。是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。 为什么不直接new而是用spi实现: 与我们java设计相关,系统