1. SpringMVC框架的作用

MVC = Model(数据模型) + View(视图) + Controller(控制器)

SpringMVC框架主要解决了接收请求与处理响应的问题,也可以认为是解决了V-C交互的问题,与M其实没有关系。

在传统的Java EE的开发模式下,可能存在Servlet组件数量太多的问题,会导致项目的管理难度太大,且运行时,会有大量的Servlet对象长期占用内存的问题!

另外,传统的Java EE开发模式下,数据的处理过程中代码量相对较大,而SpringMVC非常大极度的简化了开发量!

2. SpringMVC HelloWorld

2.1. 案例目标

最终程序运行后,打开浏览器,输入http://localhost:8080/项目名/hello.do即可看到自定义输出的内容。

2.2. 在Eclipse中添加Server

打开Eclipse的Servers面板,添加Tomcat,当添加成功后,在Eclipse的项目列表中,会出现Servers项目,在需要使用Tomcat时,必须保证该项目是存在且打开的状态。

2.3. 创建项目

创建Maven ProjectGroup Idcn.teduArtifact Idspringmvc01Packaing必须选择war

当项目创建出来后,对项目名称点右键,在项目属性的Targeted Runtimes中勾选Tomcat。

刚刚创建好的项目的pom.xml会报错,因为缺少web.xml文件,并且<failOnMissingWebXml>节点默认为true,结合指定Java版本的代码,在pom.xml中添加:

<properties><failOnMissingWebXml>false</failOnMissingWebXml><java.version>1.8</java.version><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target>
</properties>

然后,还需要在pom.xml中添加spring-webmvc的依赖:

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.5.RELEASE</version></dependency>
</dependencies>

2.4. 创建初始化类

创建cn.tedu.spring包,在这个包中创建SpringMvcConfig配置类,并在这个类上配置组件扫描:

package cn.tedu.spring;import org.springframework.context.annotation.ComponentScan;/*** SpringMvc的配置类*/
@ComponentScan("cn.tedu.spring")
public class SpringMvcConfig {}

在这个包中创建SpringMvcInitializer类,作为整个项目的初始化类,该类需要继承自AbstractAnnotationConfigDispatcherServletInitializer类,并重写该类中的抽象方法,在重写的getServletConfigClasses()方法中,返回以上SpringMvcConfig类,在重写的getServletMappings()方法中,返回的字符串数组中配置"*.do"即可:

package cn.tedu.spring;import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;/*** 项目的初始化类*/
public class SpringMvcInitializer extendsAbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return null;}@Overrideprotected Class<?>[] getServletConfigClasses() {// 当项目初始化时,会加载当前方法的返回值// 类似于创建了AnnotationConfigApplicationContext的对象,并且把当前方法的返回值作为构造方法参数return new Class[] { SpringMvcConfig.class };}@Overrideprotected String[] getServletMappings() {// 所有以 .do 为后缀的请求都由SpringMVC框架处理// 之所以使用 .do 是因为它不是一个正常的扩展名// 可以与访问普通的文件区分开来// 也可以换成其它后缀,例如 .actionreturn new String[] { "*.do" };}}

以上2个类都可以不必放在cn.tedu.spring包中,但是,应该为这2个类确定一个合理的包名。

2.5. 使用控制器接收并处理请求

在组件扫描的cn.tedu.spring包中创建HelloController类,并在类的声明之前添加@Controller注解:

package cn.tedu.spring;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** 控制器类,SpringMVC框架中的控制器的名称是自定义的,并且,不需要继承自某个类,也不需要实现某个接口*/
@Controller
public class HelloController {}

然后,在这个中添加以下代码:

// @RequestMapping用于配置请求路径
// 后续,当项目运行时,按照这个路径来访问
// 就会导致接下来的方法被执行
// 接下来的方法就相当于Servlet中的service()方法
@RequestMapping("hello.do")
// @ResponseBody表示响应正文
// 会导致接下来的方法的返回值会直接响应到客户端去
@ResponseBody
public String hello() {// 注意:不要返回中文或中文的标点符号,默认不支持return "Hello, SpringMVC!!!";
}

3. SpringMVC框架的核心组件

  • DispatcherServlet:前端控制器,负责接收所配置的所有请求(假设配置为*.do,则它将接收所有以.do为后缀的请求),并负责分发这些请求;
  • HandlerMapping:记录了请求路径与处理请求的Controller或其方法的对应关系,
  • Controller:控制器,负责处理具体的请求,每个项目中可能有若干个Controller组件,每个Controller组件中可以有若干个处理请求的方法;
  • ModelAndView:控制器处理完请求后得到的结果,该结果可以包含数据与视图名称;
  • ViewResovler:视图解析器,可以根据视图名称来确定具体的视图组件。

4. 显示html模版页面

先在src/main/resources下创建templates文件夹,然后,在该文件夹创建register.html页面,页面的内容可以自行设计。

然后,在控制器中,将处理请求的方法之前的@ResponseBody注解去掉,并将方法的返回值改为register(HTML文件的名称),例如:

// 【显示注册页面】
@RequestMapping("reg.do")
public String reg() {return "register";
}

最后,在pom.xml中添加thymeleafthymeleaf-spring4/thymeleaf-spring5的依赖:

<dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf</artifactId><version>3.0.11.RELEASE</version>
</dependency>
<dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.11.RELEASE</version>
</dependency>

并在SpringMvcConfig中添加关于ViewResolver的配置:

private String characterEncoding = "utf-8";@Bean
public ViewResolver viewResolver() {ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();templateResolver.setCharacterEncoding(characterEncoding);templateResolver.setCacheable(false);templateResolver.setTemplateMode("HTML");templateResolver.setPrefix("/templates/"); // 前缀templateResolver.setSuffix(".html"); // 后缀SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(templateResolver);ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();viewResolver.setCharacterEncoding(characterEncoding);viewResolver.setTemplateEngine(templateEngine);return viewResolver;
}

在以上配置中,需要关注的就是配置“前缀”和“后缀”的2条配置!SpringMVC框架在使用以上视图解析器时,会将“前缀”、“控制器方法返回的视图名称”、“后缀”拼接起来,得到具体用于显示的视图组件,以上代码中,拼接起来的值就是/templates/register.html,能够指向所设计的网页文件!当然,也可以采取其它的组件方式,例如“前缀”和“后缀”都配置为空字符串,而方法的返回值直接返回"/templates/register.html"也是可以的!

另外,以上代码中使用到了ClassLoaderTemplateResolver模版解析器,该模版解析器在工作时,默认会在项目的src/main/resources下查找视图组件,所以,视图文件(HTML)文件必须放在这个位置!还可以使用ServletContextTemplateResolver模版解析器,其查找视图组件的位置是在webapp下。

5. 接收客户端提交的请求参数

在SpringMVC框架中,将“客户端提交的请求参数”直接声明为“处理请求的方法的参数”即可,甚至,还可以将参数直接声明为所期望的类型,例如:

// 【处理注册请求】
@RequestMapping("handle_reg.do")
@ResponseBody
public String handleReg(String username, String password, Integer age, String phone, String email) {System.out.println("UserController.handleReg()");System.out.println("username=" + username);System.out.println("password=" + password);System.out.println("age=" + age);System.out.println("phone=" + phone);System.out.println("email=" + email);return "Over";
}

SpringMVC框架 学习DAY_01:框架概括 / 简易应用 / 核心执行流程图 /在框架下显示HTML模板页面/ 接受请求相关推荐

  1. Spring框架学习day_01: 框架配置方式/ 管理对象的作用域/ 生命周期/ 组件扫描/ 单例模式:“懒汉式“,“饿汉式“

    1. Spring框架的作用 Spring框架的主要作用是创建对象和管理对象. 创建对象:类似于User user = new User(); 管理对象:随时可以通过Spring框架获取对象,甚至Sp ...

  2. MyBatis框架学习DAY_01:概念/创建运行流程

    MyBatis框架 1. MyBatis框架的作用 2. 创建MyBatis项目 3. 连接数据库 4. 创建数据表 5. 插入数据 5.1. 定义抽象方法 5.2. 配置SQL语句 5.3. 获取自 ...

  3. 【移动端vue ui框架学习】vue项目如何使用基于vue的UI框架mint ui

    看了下饿了么团队开发的PC端vue ui框架Element ui之后,顺便看了看同团队开发的移动端的vue ui框架mint ui,那么在vue项目中应该如何使用mint ui呢?以下做简单的记录. ...

  4. 【PC端vue ui框架学习】vue项目如何使用基于vue的UI框架Element

    看了下iView之后,顺便看了看同样基于vuejs的ui框架Element,那么在vue项目中应该如何使用Element呢?以下做简单的记录. 官网定义:Element,一套为开发者.设计师和产品经理 ...

  5. 【PC端vue ui框架学习】vue项目如何使用基于vue的UI框架iview

    今晚看了一下基于vuejs的ui框架iview,感觉UI挺好看的,那么在vue项目中应该如何使用iview呢?以下做简单的记录. 首先安装iview: $ npm install iview --sa ...

  6. Spring框架学习笔记09:基于XML配置方式搭建SSM框架实现用户登录

    文章目录 一.采用MVC架构 二.用户登录运行效果 三.基于XML配置方式搭建SSM框架实现用户登录 (一)创建数据库与表 - simonshop (t_user) 1.创建数据库 - simonsh ...

  7. php tp5框架新特性面试,tp5完整加载执行流程——thinkphp5 框架

    1,入口文件(tp5\public\index.php) 作用: 1)定义目录常量 2)加载框架引导目录 2.加载框架引导文件(tp5\thinkphp\start.php) 作用: 1)引导基础文件 ...

  8. java分布式调度框架_基于Redis的分布式Java任务执行和调度框架

    Redisson是使用Redis实现分布式任务执行和调度的Java开源项目,它是通过标准JDK的ExecutorService和ScheduledExecutorService API实现的,被提交的 ...

  9. SpringMVC框架 学习DAY_03:@RequestMapping注解/拦截器与过滤器

    1. 关于@RequestMapping注解 在控制器中,在处理请求的方法之前添加@RequestMapping注解,可以配置请求路径与处理请求的方法的映射关系! 在@RequestMapping注解 ...

最新文章

  1. Impala使用笔记(一)
  2. Linux网络不可达解决方法
  3. mysql 服务器管理员_mysql 查看数据库管理员
  4. 如何在jsp页面中连接mysql数据库_如何使用JSP访问MySQL数据库
  5. linux 各用户内存_Linux用户空间与内核空间(理解高端内存)
  6. Beta冲刺 day4
  7. linux 文件名加粗,konsole与用粗体绘制强调色
  8. java+mysql 基于ssm205网上购物超市系统#毕业设计
  9. SKLEARN实例:【用随机森林回归填补缺失值】
  10. Linux下oracle数据库备份导出
  11. 桌面计算机图标变黑块,电脑中的文件夹图标变成黑色的方块的四种解决方法
  12. 计算机怎么盲打键盘,如何练习盲打 键盘盲打指法练习技巧-电脑教程
  13. Python通过哈希算法实现文件完整性校验-以及大型文件完整性校验
  14. SSD的priorbox层
  15. PAIRNORM : TACKLING OVERSMOOTHING IN GNNS
  16. Android Service保活方法总结
  17. Dynamics 365 窗体中设置可编辑的子网格
  18. Springboot考研网上辅导系统fu1ei计算机毕业设计-课程设计-期末作业-毕设程序代做
  19. R语言使用epiDisplay包的kap函数(kap.m.raters)计算Kappa统计量的值(总一致性、期望一致性)、对多个评分对象的结果进行一致性分析、评分的类别为多个类别
  20. ProjectDay04

热门文章

  1. c3p0 数据库连接池
  2. 北京赛区总结,以及。。。
  3. php-函数小知识点
  4. matlab 图片批量读取
  5. 关于ASP.NET MVC 项目在本地vs运行响应时间过长无法访问时,解决方法!
  6. go panic recover 异常处理
  7. win10家庭版通过命令gpedit.msc打不开组策略的解决方法
  8. 什么是“.NET Core”?
  9. 什么时候应该在内部联接上使用交叉应用?
  10. Python批量将ppt转换为pdf