Spring Framework 02 Spring MVC

现在有了 SpringBoot,配置 SpringMVC 就不需要向以前那样使用繁琐的 xml 文件了,tomcat 也内部集成了,很方便。

快速构建 Spring MVC 项目

使用官方教程,进入 Spring 官网,点击 Learn-Guides

在这里插入图片描述

选择 Serving Web Content with Spring MVC

image-20210727234817245

按照教程一步步来,项目结构

image-20210727235616357

浏览器访问 8080 端口,查看最终效果

http://localhost:8080

扫描二维码关注公众号,回复: 15141911 查看本文章

image-20210727235844684

http://localhost:8080/greeting

image-20210727235750802

http://localhost:8080/greeting?name=User

image-20210727235804792

Spring Web MVC

Spring Web MVC 是最初建立在 Servlet API 之上的 Web 框架,从一开始就包含在 Spring Framework 中。

DispatcherServlet

Spring 的 Web MVC 框架与许多其他 Web MVC 框架一样,是请求驱动的,围绕一个中央 Servlet 设计,该 Servlet 将请求分派给控制器并提供其他功能以促进 Web 应用程序的开发。然而,Spring 的 DispatcherServlet 做的远不止这些。它与 Spring IoC 容器完全集成,因此允许使用 Spring 具有的所有其他功能。 Spring Web MVC DispatcherServlet 的请求处理工作流程如下图所示。

mvc

DispatcherServlet 是一个实际的 Servlet(它继承自 HttpServlet 基类),因此在 Web 应用程序的 web.xml 中声明。需要通过在同一 web.xml 文件中使用 URL 映射来映射希望 DispatcherServlet 处理的请求。以下显示了这样的 DispatcherServlet 声明和映射:

<web-app>
    <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>/example/*</url-pattern>
    </servlet-mapping>
</web-app>

所有以 /example 开头的请求都将由名为 example 的 DispatcherServlet 实例处理。在 Servlet 3.0+ 环境中,还可以选择以代码方式配置 Servlet 容器:

public class MyWebApplicationInitializer implements WebApplicationInitializer {
    
    
    @Override
    public void onStartup(ServletContext container) {
    
    
        ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet());
        registration.setLoadOnStartup(1);
        registration.addMapping("/example/*");
    }
}

WebApplicationInitializer 是 Spring MVC 提供的一个接口,可确保检测到基于代码的配置并自动用于初始化任何 Servlet 容器。此接口的抽象基类实现名为 AbstractDispatcherServletInitializer,通过简单地指定其 servlet 映射,可以更轻松地注册 DispatcherServlet。然后需要配置 Spring Web MVC 框架使用的各种 bean(在 DispatcherServlet 本身之上)。 在 Web MVC 框架中,每个 DispatcherServlet 都有自己的 WebApplicationContext,它继承了根 WebApplicationContext 中已经定义的所有 bean。这些继承的 bean 可以在特定于 servlet 的范围内被覆盖,并且您可以在给定的 Servlet 实例本地定义新的特定于范围的 bean。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jDFKhSgT-1662031471583)(https://mypic-1305118058.cos.ap-hongkong.myqcloud.com/img/mvc-contexts%20-%20%E5%89%AF%E6%9C%AC.png)]

实现控制器(Implementing Controllers)

控制器通常通过服务接口定义的应用程序行为的访问。控制器解释用户输入并将其转换为由视图表示给用户的模型。 Spring 以一种非常抽象的方式实现了一个控制器,我们能够创建各种各样的控制器。

Spring 2.5 为 MVC 控制器引入了基于注解的编程模型,该模型使用@RequestMapping、@RequestParam、@ModelAttribute 等注解。此注释支持可用于 Servlet MVC 和 Portlet MVC。以这种风格实现的控制器不必扩展特定的基类或实现特定的接口。

@Controller
public class HelloWorldController {
    
    
    @RequestMapping("/helloWorld")
    public String helloWorld(Model model) {
    
    
        model.addAttribute("message", "Hello World!");
        return "helloWorld";
    }
}

@Controller 和@RequestMapping 批注允许灵活的方法名称和签名。在此特定示例中,该方法接受模型并以字符串形式返回视图名称,但可以使用各种其他方法参数和返回值,如本节后面所述。 @Controller 和 @RequestMapping 以及许多其他注释构成了 Spring MVC 实现的基础。

Filters

浏览器只能通过 HTTP GETHTTP POST 提交表单数据,但非浏览器客户端也可以使用 HTTP PUT、PATCH 和 DELETE。 Servlet API 需要 ServletRequest.getParameter() 方法来支持仅用于 HTTP POST 的表单字段访问。 spring-web 模块提供了 FormContentFilter 来拦截内容类型为 application/x-www-form-urlencoded 的 HTTP PUT、PATCH、DELETE 请求,从请求体中读取表单数据,将 ServletRequest 包裹起来,使通过 ServletRequest.getParameter() 系列方法获得的表单数据。

猜你喜欢

转载自blog.csdn.net/wji15/article/details/126649845