现在还在用Struts吗,是的,不说你在用Spring MVC,我都觉得不好意思了。

前面的时候所谓的MVC模式中,C的角色交由Struts控制。而Spring MVC这样叫了,字眼上大概知道这东西是干什么用的。

之前是在哪里看到有位大哥这样说的。技术差别大,一个一个追逐下来很累。要知道技术的出现解决了什么问题,用时不会偏离。流行为何,没落为何。这次是因为本身这个基本上都用这个,还有自己也想尝试一下。其实重复的工作当中,真的不想满足于此,见多了之后就想自己去了解更多,去提升自己更多。

这里算是翻译一些重要的知识点加自己动手实现。

第三版看的是中文版,第四版看的英文版,第三版把MVC一直讲一直讲,不是从基础的实现开始。反正一连起来看感觉不好。

第四版第五章就开始讲了MVC的内容,而且会简单一些。

首先是大体的流程。
1、请求从浏览器离开,包含了地址还有数据。
2、Spring的DispatcherServlet,Spring通过一个简单的前端控制器过滤请求。,将请求传给控制器。
3、具体给哪个控制器,根据Handler Mapping(处理器映射)。
4、在Controller(控制器)这里处理信息。打包模型数据还有视图名称给DispatcherServlet
5、DispatcherServlet咨询view resolver(视图解析器),找到具体的视图映射。
6、最后将数据返回展示给客户端。

理解大概的流程之后,开始搭建。第三版中,是要我们在web.xml中配置DispatcherServlet

  <servlet><servlet-name>spring-mvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet>    

第四版里,因为Servlet3.0和Spring3.1的新优势,可以直接在java里面配置。
但是这个不用在web.xml配置取决你所用的服务器。Tomcat7及以上版本就支持Servlet3.0

这里蛋疼了一下。之前的Eclipse建的有各种各样的问题,又是启动慢。
现在重新弄了套全新的东西Eclipse Neon+Tomcat 8+Java 8+Maven+Spring 4新建Maven项目后能直接就在Tomcat上跑了。

创建maven项目 web工程。

POM.xml配置,不得不说,Maven真是个好东西。能帮你处理这些复杂的依赖关系。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>iaiti</groupId><artifactId>springmvc</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>springmvc Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!--jstl和standard是是jsp页面中 jstl依赖的包--><!-- https://mvnrepository.com/artifact/jstl/jstl --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.1.2</version></dependency><!-- https://mvnrepository.com/artifact/taglibs/standard --><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency><!-- Spring dependencies --><!-- http://mvnrepository.com/artifact/org.springframework/spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.1.4.RELEASE</version></dependency><!-- http://mvnrepository.com/artifact/org.springframework/spring-web --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.1.4.RELEASE</version></dependency><!-- http://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.1.4.RELEASE</version></dependency></dependencies><build><finalName>springmvc</finalName></build>
</project>

继承AbstractAnnotationConfigDispatcherServletInitializer的类自动的配置了DispatcherServlet和
spring的应用上下文。
DispatcherServlet 一启动,创建Spring 的应用上下文。这里通过WebConfig的配置加载bean。
但是ContextLoaderListener也会创建Spring 的应用上下文。
DispatcherServlet加载的是controllers, view resolvers,和handler mappings这些bean。
AbstractAnnotationConfigDispatcherServletInitializer创建了这两者。
getServletConfigClasses()返回的@Configuration类为Dispatcher-
Servlet的应用上下文定义beans ,getRootConfigClasses() 返回的@Configuration类为ContextLoaderListener
的应用上下文定义beans。

具体代码:

public class WebAppInitializer extendsAbstractAnnotationConfigDispatcherServletInitializer {@Override//路径映射protected String[] getServletMappings() {return new String[] { "/" };}@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class<?>[] { RootConfig.class };}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class<?>[] { WebConfig.class };}
}

WebConfig.java

@Configuration
@EnableWebMvc
@ComponentScan("spitter.web")
public class WebConfig extends WebMvcConfigurerAdapter {@Beanpublic ViewResolver viewResolver() {//书这里就讲得很好了,这里不需要先知道这个是什么视图解析器,跟你分析好,哪些是这章先要知道的哪些是不需要的。//只需要知道用来根据view找jsp文件就好了//例如home 会找/WEB-INF/views/home.jspInternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");resolver.setExposeContextBeansAsAttributes(true);return resolver;}@Override//告诉DispatcherServlet转接静态资源请求给servlet容器本身默认的servlet而不是自己操作自己public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}
}

Root.java

@Configuration
@ComponentScan(basePackages = { "spitter" }, excludeFilters = { @Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) })
public class RootConfig {
}

简单的控制器——HomeController

@Controller
public class HomeController {//处理请求,返回具体的view名称  view名称。根据WebConfig中的视图解析器,跳转的是/WEB-INF/views/home.jsp@RequestMapping(value = "/home",method= {RequestMethod.GET})public String home() {return "home";}
}

最后,直接运行。http://localhost:8080/springmvc/home变做到了和Struts2一样的MVC模式。

Spring4 Spring MVC实战(一)——读《Spring in action》搭建最简单的MVC相关推荐

  1. ssm如何支持热部署_最新Spring Boot实战文档推荐:项目搭建+配置+SSM整合

    在Spring Boot项目中,正常来说是不存在XML配置,这是因为Spring Boot不推荐使用XML,注意,排不支持,Spring Boot推荐开发者使用Java配置来搭建框架, Spring ...

  2. springboot做系统所需的软硬件环境_最新Spring Boot实战文档推荐:项目搭建+配置+SSM整合...

    在Spring Boot项目中,正常来说是不存在XML配置,这是因为Spring Boot不推荐使用XML,注意,排不支持,Spring Boot推荐开发者使用Java配置来搭建框架, Spring ...

  3. 搭建一个简单的MVC框架

    背景 为何要用MVC框架?首先我们知道不用框架的话,在javaweb项目中每个请求都要写一个servlet,并且要在web.xml中对每个servlet类的映射作配置,不方便开发,因此引入MVC框架. ...

  4. 在Java中搭建一个简单的MVC框架

    搭建一个简单的Java MVC框架 一 . 前言 二. 代码实现 1. 思路分析 2. 代码实现 2.1 Controller注解 2.2 RequestMapping注解 2.3 UserContr ...

  5. 程序猿最终之路-架构师:Spring boot实战战役解析

    什么是架构师 所谓架构师,通俗地说就是设计师或结构设计者,这些定义如果用在建筑学上,则是很容易理解的.在软件工程领域中,软件架构师实际上就是软件项目的总体设计师,是软件组织新产品的开发与集成.新技术体 ...

  6. Spring Cloud实战(三)-监控中心

    接着上一篇 Spring Cloud实战(二)-注册中心 现在开始搭建监控中心 一.监控中心monitor-server 1.添加spring-boot-admin版本控制到cloud-action的 ...

  7. php实现简单的框架,PHP 实现简单的 MVC 框架

    前言: 在 PHP 的世界中,有着众多的框架,它们各有所长,各具特色.既有 Zend,Symfony,Laravel 等大型框架,也有 CodeIgniter,Slim Framework 等轻量级的 ...

  8. Spring MVC 实战:三种方式获取登录用户信息

    前言 Web 项目中,维持用户登录状态的常用方式有三种,分别是 Cookie.Session.Token,不管哪种方案,都需要获取到用户信息供业务层使用. 由于获取用户信息与具体业务无关,因此在普通的 ...

  9. 读《Java EE 开发的颠覆者 Spring Boot 实战》

    由于还书的时间要到了.没办法读这个书了. 只能简单的翻翻 这是本很厚的书,看目录很细. 从 spring 开始讲,到 spirng boot .

  10. 《javaEE 开发的颠覆者,Spring boot实战》

    本书简介 1 推荐使用@configuration @bean 的Java配置来替代xml. 2 习惯优于配置的原则.快速搭建项目 3 在第一部分,介绍了快速Spring4.x各个知识点:基础配置.常 ...

最新文章

  1. Android监听左右滑删除通知,Android 滑动监听RecyclerView线性流+左右划删除+上下移动...
  2. 0x22.搜索 - 深度优先搜索
  3. Eclipse下编译Android自带联系人应用
  4. 同步异步多线程这三者关系,你能给面试官一个满意的回答吗?
  5. Linux加密框架 crypto 算法模板 CBC模板举例
  6. ngnix 负载均衡原理
  7. 100万愤怒的小鸟:中国手机开发者生存调查
  8. 《Reids 设计与实现》第十章 客户端
  9. Solana生态项目DEX聚合器Dagg trade完成种子轮融资,credence.fund投资
  10. 如何将以字符表示的16进制数转换为机器码表示的16进制数
  11. 手写模拟器,将电子文档转换为手写字体,就用这个软件
  12. 关于ENVI-FLAASH大气校正报 .. bin\flaash\scriptfile.006系统找不到指定的路径的错误
  13. 中国石油燃气蓄能器市场深度研究分析报告(2021)
  14. (病毒安全)任何杀毒软件都不能用了
  15. 联想国产自主计算机,实现零的突破,第一款纯国产电脑诞生,网友:此刻联想怎么想?...
  16. When inserting 1, 2, 3, 6, 5, and 4 one by one into an initially empty AVL tree,which kinds of rotat
  17. win10 3D查看器glb和3mf格式模型
  18. 手把手带你入门深度学习(一):保姆级Anaconda和PyTorch环境配置指南
  19. html5中字体显示不出来怎么办,手机字体无法正常显示怎么办
  20. 计算机视觉基础入门(2)

热门文章

  1. WIN10 EXCEL 快捷键
  2. referenced before assignment
  3. 计算机路由器无线级联配置,两个无线路由器级联怎么设置?
  4. 全新的跨平台app软件开发工具——Lae软件开发平台
  5. lae界面开发工具入门介绍之一新建工程篇
  6. 为笔记本添加固态硬盘以及之后的分区方法分享
  7. 九爷带你玩转 php单元测试
  8. 深入理解哈希表(JAVA和Redis哈希表实现)
  9. 017年Android百大框架排行榜
  10. 使用Unity3D编写ARPG游戏——角色属性的定义与实现(一)