1.SpringMVC

1.1 SpringMVC框架介绍

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。
小结: Spring内部整合SpringMVC(web的包)

1.2 SpringMVC入门案例

1.2.1 创建项目

1.2.2 添加依赖项

1).添加热部署/lombok包

1.2.3 检查pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.jt</groupId><artifactId>springboot_demo_3</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot_demo_3</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>1.8</java.version></properties><dependencies><!--thymeleaf导入模版工具类--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!--SpringMVCjar包文件--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--热部署工具--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!--lombok插件--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--测试包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!--负责项目打包部署--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

1.2.4 编辑YML配置文件

#配置服务端口
server:port: 8090#配置模版工具类
spring:thymeleaf:#设置页面前缀prefix: classpath:/templates/#设置页面后缀suffix: .html#是否使用缓存cache: false

1.2.5 编辑Html页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>SpringMVC入门案例</title>
</head>
<body><h1>Hello SpringMVC</h1>
</body>
</html>

1.2.6 默认页面跳转机制

说明: SpringMVC项目启动时默认设置一个欢迎页面 并且名称必须为index.

页面效果 如图所示

1.3 @RequestMapping注解测试

说明: 使用@RequestMapping注解拦截用户请求 实现业务调用

1.3.1 编辑HelloController

@Controller //1.将该类交给Spring容器管理 2.同时开启Spring mvc机制
public class HelloController {/*** 需求: http://localhost:8090/hello 访问hello.html* 实现步骤:*      1.拦截用户请求 @RequestMapping("/hello")*      2.String 类型的返回值 表示返回页面名称*      3.根据YML配置文件中的内容 动态的拼接前缀和后缀 形成页面唯一路径*/@RequestMapping("/hello")public String hello(){//动态的拼接前缀+后缀//classpath:/templates/hello.htmlreturn "hello";}
}

1.3.2 页面请求效果

说明: 根据http://localhost:8090/hello测试网站访问是否成功

1.4 实现数据传递

1.4.1 导入头标前

 <!DOCTYPE html><!--导入模板标签!!!!!--><html lang="en" xmlns:th="http://www.thymeleaf.org">

1.4.2 编辑UserController

package com.jt.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;@Controller
public class UserController {/***  mvc底层数据传输原则*  url: http://localhost:8090/user*  ModelAndView:*      1.model 封装数据的*      2.View  封装视图页面的*/@RequestMapping("/user")public ModelAndView toUser(){ModelAndView modelAndView = new ModelAndView();//封装数据modelAndView.addObject("id", 1001);modelAndView.addObject("name", "安琪拉");//封装页面数据modelAndView.setViewName("user");return modelAndView;}}

1.4.3 页面取值

<!DOCTYPE html>
<!--导入模板标签!!!!!-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>SpringMVC测试案例</title>
</head>
<body><h1>用户测试代码</h1><!--从服务器中获取数据 表达式  ${从服务器中的key}--><h3 th:text="${id}"></h3><h3 th:text="${name}"></h3>
</body>
</html>

1.4 SpringMVC 原理说明(!!!)

1.4.0 Servlet作用

说明: servlet是浏览器与服务器(tomcat) 进行交互的一种机制.
核心对象: 1.Request 包含了用户的所有的请求相关信息(参数…协议…地址…)
2.Response 包含了服务器相关的信息(服务器地址,返回的数据)

1.4.1 重要组件

1).前端控制器 DispatcherServlet(内部核心机制) 接收用户所有请求
2).处理器映射器 HandlerMapping 查找用户的请求与业务处理的映射
3).处理器适配器HandlerAdapter 在众多处理器中挑选合适的处理器去执行业务.
4).视图解析器ViewResolver 实现页面的路径的拼接.

1.4.2 SpringMVC调用流程图

1.4.3 SpringMVC调用步骤

1.当用户发起请求时,被SpringMVC框架中的前端控制器拦截.
2.由于前端控制器,并不清楚哪个方法与请求对应,所以查询处理器映射器.
3.当tomcat服务器启动,则处理器映射器会加载所有的@RequestMapping注解,将其中的路径与方法进行绑定. Map</请求路径,包名.类名.方法名(参数)>,将查找到的方法信息回传给前端控制器 进行后续调用.
4.秉承着松耦合的思想,前端控制器将查询得到的方法, 请求处理器适配器(mvc针对不同的配置文件有专门的处理器(运行程序的机制))挑选合适的处理器去执行(程序内置的规则 无需人为干预)
5.当挑选合适的处理器之后,程序开始真正的执行业务方法. Controller-Service-Mapper(Dao),执行业务. 当业务执行成功之后.返回统一的ModelAndView对象.
其中包含2部分数据 1-Model(服务器数据) 2.View(页面逻辑名称)
6.当前端控制器获取ModelAndView对象之后,交给视图解析器 解析View对象的逻辑名称. 动态的拼接前缀 + 页面逻辑名称 + 后缀. 最终形成了用户展现页面的全路径.
7.将Model数据填充到页面中的过程,叫做视图渲染. 渲染之后,将数据交给前端控制器处理.
8.将得到的完整页面 响应给用户进行展现.

1.5 简单参数传递

1.5.1 服务器向页面传值

 //简化数据传递@RequestMapping("/user")public String toUser(Model model){//将数据通过model进行传递model.addAttribute("id", 1003);model.addAttribute("name", "SpringMVC");return "user";}

1.5.2 编辑提交数据的页面

<tr><td>ID:</td><!--id:标签的唯一标识 不能重复name: 数据传递的必备要素.  不能省略--><td><input id="id" name="id" type="text"/></td></tr><tr><td>姓名:</td><td><input id="name" name="name" type="text"/></td></tr>

1.5.3 Request 对象接收参数

说明: 当用户点击提交按钮时,将数据进行传递. 所以必须编辑Controller的方法进行接收
参数说明: 利用request对象进行参数的接收.

 /*** 请求路径: http://localhost:8090/addUser* 请求参数: id: 100  name: 张三* request/response对象说明  只要用户调用就会自动的赋值* servlet缺点:  接收的参数都是String类型* @param model* @return*/@RequestMapping("/addUser")public String addUser(HttpServletRequest request){//利用工具API进行类型转化Integer id = Integer.parseInt(request.getParameter("id"));String name = request.getParameter("name");System.out.println("参数:"+id+":"+name);return "success";}

1.5.4 利用SpringMVC为属性赋值

2. SpringMVC 高级用法

2.1 @RequestParam

2.1.1 需求说明

有时用户的数据可能为null,如果后端服务器数据有特殊的要求,
要求:
1.数据为必填项
2.如果没有填写数据,可以为其设定默认值.
通过@RequestParam注解实现.

2.1.2 编辑UserController

说明: 图中演示了@RequestParam的注解用法

2.2 同名提交问题

2.2.1 业务描述

SpringMVC中对于页面要求应该保证name属性尽可能唯一.

 <input id="id" name="id" type="text"/></td><input id="name" name="name" type="text"/><td><input  name="hobbys" type="checkbox" value="敲代码"/>敲代码<input  name="hobbys" type="checkbox" value="敲键盘"/>敲键盘<input  name="hobbys" type="checkbox" value="敲主机"/>敲主机</td>

但是如果遇到复选框操作时 重名问题将不能避免,使用如下操作优化.

2.2.2 数据接收

2.3 对象的方式接收参数

2.3.1 需求说明

说明: 如果有大量的页面的提交数据,如果采用单独的参数接收,必然导致Controller方法结构混乱,不便于理解.所以采用对象的方式封装.

2.3.2 封装User对象

//POJO实体对象中 "必须"  使用包装类型
//规则说明:  1.基本类型有默认值  包装类型默认值为null
//          2. 基本类型中没有多余的方法 对后续代码取值有问题
@Data
@Accessors(chain = true)    //几乎不用构造方法赋值
public class User {//页面name属性 id/name/hobbysprivate Integer id;private String name;private String[] hobbys;
}

2.3.3 编辑UserController

实现以对象的方式接收参数

2.4 为对象的引用赋值

2.4.1 业务需求

说明: 有时可能会遇到 name属性重复的问题. 由于业务需要不得不写一个重复的名称.那么这时采用对象的引入赋值.

2.4.2 封装Dog对象

2.4.3 对象引用

说明: 为了实现数据封装,必须将对象进行嵌套(引用)

2.4.4 编辑页面

说明: 通过对象.的方式 封装所属关系.

2.4.5 编辑Controller

3 作业

  1. 将SSM框架 试着整合到一起
  2. 复习Spring/SpringMVC/Mybatis用法 熟练掌握.

CGB2102-京淘项目day04相关推荐

  1. 京淘项目Day-04

    1.关于项目打包/发布问题说明 1.1 利用maven工具项目打包 说明: 父级JT 其中包含了2个子级项目 jt-manager 依赖于jt-common.所以项目打包是有顺序的. 1.2 mave ...

  2. boot sprint 项目结构_京淘项目03 08.28

    JSP动态web资源,打war包 ##spring boot整合JSP 创建项目 spring SpringBoot整合web资源,, 在main文件下,新建webapp文件夹,,把WEBINF目录粘 ...

  3. 京淘项目实战开发-01

    1.京淘项目架构设计 1.1电商网站行业特点 1.1.1 高并发 概念: 同一时间内,有大量的用户访问服务器. 常识: tomcat服务器能够支持的并发链接数 220个/秒 (软件依赖硬件设备) 生产 ...

  4. Lesson9 【LINUX】将京淘项目发布到Linux系统上

    前言 将京淘项目发布到Linux系统上 我在windows系统中已经用IDEA编写好了京淘项目的代码,并且打好了war包. 现在我就想把这个京淘项目发布到linux系统上. 因为在工作中,都是要将项目 ...

  5. 2003京淘项目Day-03京淘后台项目搭建

    1.SpringBoot 整合JSP 1.1 创建项目 1.1.1 创建项目 1.1.2 编辑POM.xml文件 添加继承/依赖/插件 <!--parent标签作用:管理所有被springBoo ...

  6. 【后端结合】新程序猿笔记Day13(京淘项目)

    1. 用户模块管理 1.1 用户列表展现 1.1.1 业务接口文档 请求路径: /user/list 请求类型: GET 请求参数: 后台使用PageResult对象接收 请求案例: http://l ...

  7. 京淘项目业务接口文档

    一 用户登陆 1 用户登录验证接口 请求路径: /user/login 请求方式: POST 请求参数 参数名称 参数说明 备注 username 用户名 不能为空 password 密码 不能为空 ...

  8. 京淘项目模块分析:用户登;三级列表展现

    文章目录 用户登录 用户登录验证接口 返回的SysResult对象 用户登录业务流程 MD5说明 编辑UserController 编辑UserService UserServiceImpl User ...

  9. 关于京淘项目虚拟机IP修改说明

    0. 修改虚拟机MAC地址 当新建虚拟机时,修改mac网络地址. 0.Window 配置IP地址 1).修改IP地址 2).设定IP租用时间 3).检查windowsIP地址 4).检查LinuxIP ...

最新文章

  1. hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (背包问题)
  2. 生成路径 vs 设置_Simulink代码生成之模型配置
  3. 用Keepalived实现PostgreSQL高可用
  4. 堪称奇迹!8 天诞生一个产品,这家创业公司做到了
  5. 如何在ppt下面加入讲解内容_如何批量查找并修改替换 Word、PPT、Excel、PDF、TXT等文件的内容——我的ABC...
  6. java keypad game,关于java:Custom Keypad – 如何使这些按钮正常工作?
  7. 超越界限,定义未来-- HP刀片工作站WS460c Gen9无惧4K挑战
  8. TensorFlow游乐场及神经网络简介
  9. 大数据测试之hadoop命令大全
  10. SVN服务器搭建--Subversio与TortoiseSVN的配置安装(Windows)
  11. Loadrunner2021安装教程
  12. 小玩意 - 银行业务的模拟系统(C++)
  13. Keil5 编译时显示..\OBJ\TPAD.axf: error: L6002U: Could not open file ..\obj\main.o: No such file or direct
  14. 用Photoshop制作1寸和2寸的照片
  15. UED、UCD、UE、UI、交互设计这 5 个名词有哪些区别?
  16. hbuilder前端需要的插件_这两款HTML5开发工具,前端开发工程师用了直呼内行
  17. 有利可图网_公布有利可图的辅助项目手册
  18. MIT赵选贺再发《Nature Biomedical Engineering》​!
  19. ART运行时垃圾收集(GC)过程分析
  20. yum安装telnet详解

热门文章

  1. JavaScript 的 怪癖
  2. java有什么作用_Java有什么用
  3. 文献阅读二—Robsut Wrod Reocginiton via Semi-Character Recurrent Neural Network
  4. rocksdb介绍之compaction流程
  5. G1D51-审稿意见回复论文写作时态
  6. MySQL-explain-extra字段详解
  7. Ubuntu编译cpp文件报错“teat.cpp:45:2: error: stray ‘\344’ in program” 解决方法
  8. 抖音、微信关闭个性化推荐功能上线,用户真能摆脱“算法牢笼”吗?
  9. 浅谈perspective(透视)效果
  10. gmt php,php转换GMT标准时间函数