读书笔记-《Spring技术内幕》-计文柯(三):Spring MVC与We

2023-05-16

 

一、SpringMVC做了什么?

1.使用SpringMVC(以及同类型框架)前:

回顾下,我们刚学完JavaWeb时是如何实现前后台数据交互的。首先,Java文件目录分为Servlet(接受参数、转发请求等)、Service(处理业务逻辑)、Dao(对各model的增删改查)、Model(对应数据库中的表)等层,而Servlet是通过在web.xml中配置从而让计算机知道要跳转的位置,具体的图如下所示。

        图1.1  Servlet层展示

 

图1.2  web.xml中配置展示

 

如上面两张图所示,这是在使用SpringMVC前的情况,可以看到,随着业务的增多Servlet将会不断增加,web.xml里的内容也会增加,即使编码工整规范,Servlet都需要重写doGet、doPost方法,代码冗余。

2.使用SpringMVC后:

1.3 使用SpringMVC后Controller类展示

 

如图1.3所示,使用SpringMVC后不再需要配置Servlet,所有的Servlet按照所属POJO类(或模块)划分,对一个POJO的增删改查都可放在一起。从开发者的眼光来看,使用SpringMVC大大简化了我们的开发工作,同时以Spring的角度来看,它必然帮我们做了一些工作,比如它是如何让计算机根据请求的URL就找到对应的Servlet的,接下来将具体分析。

二、SpringMVC的设计与实现

1.基本概念

2.1 MVC模式

关于MVC以及JavaWeb等概念这里不做过多讲解,主要想谈的是DispatcherServlet和HandlerMapping。

DispatchServlet作为一个Servlet,需要在web.xml中进行配置。同时它也是一个前端控制器,所有的Web请求都需要通过它进行转发、匹配、数据处理后交给页面进行展示,因此它可看做SpringMVC实现中最核心的部分。默认情况下,DispatchServlet选取BeanNameUrlHandlerMapping作为映射策略实现。

2.2 前端控制器

 

之前提到,SpringMVC帮开发者完成了许多工作,其中让计算机知道URL请求对应哪一个Controller(在不适用框架时我们称之为Servlet,使用后用Controller代替)的工作,就是HandlerMapping完成的。以SimpleUrlHandlerMapping为例,其定义了一个map来维持Url请求与控制器的映射关系,同时,HandlerMapping接口中定义了getHandler方法,通过这个方法,可以获得请求对应的HandlerExecutionChain,在HandlerExecutionChain中封装了具体的Controller对象。

2.2 DispatcherServlet的大致工作

 

2.3 HandlerMapping的设计原理

 

 

2.实现步骤

A.建立Controller控制器和HTTP请求之间的映射关系

B.得到HandlerExecutionChain,Controller响应动作,生成需要的ModelAndView

C.呈现视图

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读书笔记-《Spring技术内幕》-计文柯(三):Spring MVC与We 的相关文章

  • Spring MVC 中的重定向

    为什么我不能让它在我的控制器中工作 RequestMapping method RequestMethod POST public String onSubmit Model model ModelAttribute form Form f
  • JedisPoolConfig 不可分配给 GenericObjectPoolConfig

    我有一个基于 Spring 的 Java Web 应用程序托管在 Heroku 上 我正在尝试使用 Redis 实现来利用 Spring 缓存抽象 当服务器启动时 我收到一条错误消息 Type redis clients jedis Jed
  • Spring AOP 和后期构造

    我想写下与 PostConstruct一起使用的方法的名称 但我发现AOP无法 绕过 PostConstruct方法 有没有办法将 AOP 与 PostConstruct 方法一起使用 尝试一下 Around annotation java
  • Hystrix:无法连接到命令指标流

    我正在使用Spring Boot 管理应用程序 https github com codecentric spring boot admin我的安装有问题Hystrix UI 模块 http codecentric github io sp
  • @DependsOn 注释的逆

    Spring 可能还有其他 DI 容器 但我使用的是 Spring 识别 DependsOn 注释 您可以使用它来标识必须在该 bean 之前启动的任何其他 bean 例如 Component DependsOn initiatedFirs
  • 在 spring 上下文中通过类路径引用文件

    我正在尝试设置org springframework beans factory config PropertyPlaceholderConfigurerspring bean 我有 jdbc propertiessrc main conf
  • 通过 Java Spring 构建 sitemap.xml [重复]

    这个问题在这里已经有答案了 我正在通过 Spring MVC 构建 sitemap xml XmlRootElement name urlset public class XmlUrlSet XmlElements XmlElement n
  • jdbcAuthentication() 而不是 inMemoryAuthentication() 不提供访问权限 - Spring Security 和 Spring Data JPA

    我只是使用 spring mvc gradle spring security spring data jpa 创建简单的应用程序 现在我想测试 spring security 是如何工作的 但是我有一个问题 首先我向您展示一些代码 然后我
  • HTTP请求压缩

    一般用例 想象一下一个正在上传大量 JSON 的客户端 内容类型应保留application json因为这描述了实际数据 Accept Encoding 和 Transfer Encoding 似乎是为了告诉服务器应该如何格式化响应 看起
  • 理解 Spring AOP [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用 Spring 3 0 框架 但仍然是新手 谁能通俗地解释一下什么是AOP编程 一个简短的例子肯定会有帮助 Spring 如
  • Spring Boot Service的注解@Autowired失败

    我正在尝试使用 AutowiredSpring Boot 应用程序中 Service 类的注释 但它不断抛出No qualifying bean of type例外 但是 如果我将服务类更改为 bean 那么它就可以正常工作 这是我的代码
  • 使用 Atomikos 进行两阶段提交 (2PC) 配置

    我正在创建一个示例应用程序来测试两阶段提交 2PC 我从互联网上获取了此处使用的代码位 我使用 Spring Hibernate 和 Atomikos 并以 MySQL 作为后端 我正在使用两个数据库 并故意使对第二个数据库的调用失败 以检
  • Spring 3.1 Java配置和内部bean

    Bean public TimedRepository timedRepository RealRepository repo return new TimedRepository repo timer Adds some metrics
  • 执行 POST 请求时 Spring Boot 端点 403 OPTIONS

    我正在使用 Spring 运行一个服务 当我的 Angular 前端尝试发出 POST 请求时 会收到带有请求方法 选项的 403 错误 Spring 服务和 Angular 应用程序都在我的机器上本地运行 我尝试使用 Chrome 插件切
  • 为自定义 userdetailsservice 定义 bean

    我如何定义我的自定义UserDetailsServicebean 的方式使我的 spring mvc Web 应用程序能够使用我的底层 MySQL 数据库来检查用户和密码的身份验证 具体如下 我正在添加安全性spring petclinic
  • Tomcat 热部署到托管多个应用程序的实例

    我的问题是关于部署到托管多个应用程序并托管 Struts Spring 和 Hibernate 的应用程序上下文的 Tomcat 服务器实例 我想在不重新启动 Tomcat 服务器的情况下将更改部署到一个应用程序 举个例子 在我们公司很多时
  • 在 Spring 中使用 @Inject Instance

    我知道 Instance 不是 JSR 330 的一部分 但是 Spring 有等效的吗 我感兴趣的是 Instance 实现 Iterable 因此 Provider 不是正确的答案 public interface Report 有 2
  • 模拟匿名函数

    我正在编写 jUnits 但被 Lambda 表达式困住了 有没有办法模拟匿名函数 return retryTemplate execute retryContext gt return mockedResponse 在上面的代码中 我试图
  • 如何获取 JSF 2 中所有会话范围的 bean?

    据我所知 JSF 将所有会话范围 bean 保存在某种 Map 中 如果我错了 请纠正我 在我的应用程序中 我有一个名为 userDetailsBean 的会话范围 由 Spring 管理并注入到支持 bean 中 bean 是否有可能通过
  • Spring Security SAXParseException

    我正在 Spring 中开发 HelloWorld 应用程序 它工作正常 当我添加弹簧安全性时 问题就出现了 我正在通过 Spring Security 3 这本书来指导自己 部署时删除它 abr 26 2014 2 41 35 PM or

随机推荐