SpringMVC框架 学习DAY_01:框架概括 / 简易应用 / 核心执行流程图 /在框架下显示HTML模板页面/ 接受请求
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 Project,Group Id为cn.tedu
,Artifact Id为springmvc01
,Packaing必须选择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中添加thymeleaf
和thymeleaf-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模板页面/ 接受请求相关推荐
- Spring框架学习day_01: 框架配置方式/ 管理对象的作用域/ 生命周期/ 组件扫描/ 单例模式:“懒汉式“,“饿汉式“
1. Spring框架的作用 Spring框架的主要作用是创建对象和管理对象. 创建对象:类似于User user = new User(); 管理对象:随时可以通过Spring框架获取对象,甚至Sp ...
- MyBatis框架学习DAY_01:概念/创建运行流程
MyBatis框架 1. MyBatis框架的作用 2. 创建MyBatis项目 3. 连接数据库 4. 创建数据表 5. 插入数据 5.1. 定义抽象方法 5.2. 配置SQL语句 5.3. 获取自 ...
- 【移动端vue ui框架学习】vue项目如何使用基于vue的UI框架mint ui
看了下饿了么团队开发的PC端vue ui框架Element ui之后,顺便看了看同团队开发的移动端的vue ui框架mint ui,那么在vue项目中应该如何使用mint ui呢?以下做简单的记录. ...
- 【PC端vue ui框架学习】vue项目如何使用基于vue的UI框架Element
看了下iView之后,顺便看了看同样基于vuejs的ui框架Element,那么在vue项目中应该如何使用Element呢?以下做简单的记录. 官网定义:Element,一套为开发者.设计师和产品经理 ...
- 【PC端vue ui框架学习】vue项目如何使用基于vue的UI框架iview
今晚看了一下基于vuejs的ui框架iview,感觉UI挺好看的,那么在vue项目中应该如何使用iview呢?以下做简单的记录. 首先安装iview: $ npm install iview --sa ...
- Spring框架学习笔记09:基于XML配置方式搭建SSM框架实现用户登录
文章目录 一.采用MVC架构 二.用户登录运行效果 三.基于XML配置方式搭建SSM框架实现用户登录 (一)创建数据库与表 - simonshop (t_user) 1.创建数据库 - simonsh ...
- php tp5框架新特性面试,tp5完整加载执行流程——thinkphp5 框架
1,入口文件(tp5\public\index.php) 作用: 1)定义目录常量 2)加载框架引导目录 2.加载框架引导文件(tp5\thinkphp\start.php) 作用: 1)引导基础文件 ...
- java分布式调度框架_基于Redis的分布式Java任务执行和调度框架
Redisson是使用Redis实现分布式任务执行和调度的Java开源项目,它是通过标准JDK的ExecutorService和ScheduledExecutorService API实现的,被提交的 ...
- SpringMVC框架 学习DAY_03:@RequestMapping注解/拦截器与过滤器
1. 关于@RequestMapping注解 在控制器中,在处理请求的方法之前添加@RequestMapping注解,可以配置请求路径与处理请求的方法的映射关系! 在@RequestMapping注解 ...
最新文章
- Impala使用笔记(一)
- Linux网络不可达解决方法
- mysql 服务器管理员_mysql 查看数据库管理员
- 如何在jsp页面中连接mysql数据库_如何使用JSP访问MySQL数据库
- linux 各用户内存_Linux用户空间与内核空间(理解高端内存)
- Beta冲刺 day4
- linux 文件名加粗,konsole与用粗体绘制强调色
- java+mysql 基于ssm205网上购物超市系统#毕业设计
- SKLEARN实例:【用随机森林回归填补缺失值】
- Linux下oracle数据库备份导出
- 桌面计算机图标变黑块,电脑中的文件夹图标变成黑色的方块的四种解决方法
- 计算机怎么盲打键盘,如何练习盲打 键盘盲打指法练习技巧-电脑教程
- Python通过哈希算法实现文件完整性校验-以及大型文件完整性校验
- SSD的priorbox层
- PAIRNORM : TACKLING OVERSMOOTHING IN GNNS
- Android Service保活方法总结
- Dynamics 365 窗体中设置可编辑的子网格
- Springboot考研网上辅导系统fu1ei计算机毕业设计-课程设计-期末作业-毕设程序代做
- R语言使用epiDisplay包的kap函数(kap.m.raters)计算Kappa统计量的值(总一致性、期望一致性)、对多个评分对象的结果进行一致性分析、评分的类别为多个类别
- ProjectDay04