CGB2102-京淘项目day04
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 作业
- 将SSM框架 试着整合到一起
- 复习Spring/SpringMVC/Mybatis用法 熟练掌握.
CGB2102-京淘项目day04相关推荐
- 京淘项目Day-04
1.关于项目打包/发布问题说明 1.1 利用maven工具项目打包 说明: 父级JT 其中包含了2个子级项目 jt-manager 依赖于jt-common.所以项目打包是有顺序的. 1.2 mave ...
- boot sprint 项目结构_京淘项目03 08.28
JSP动态web资源,打war包 ##spring boot整合JSP 创建项目 spring SpringBoot整合web资源,, 在main文件下,新建webapp文件夹,,把WEBINF目录粘 ...
- 京淘项目实战开发-01
1.京淘项目架构设计 1.1电商网站行业特点 1.1.1 高并发 概念: 同一时间内,有大量的用户访问服务器. 常识: tomcat服务器能够支持的并发链接数 220个/秒 (软件依赖硬件设备) 生产 ...
- Lesson9 【LINUX】将京淘项目发布到Linux系统上
前言 将京淘项目发布到Linux系统上 我在windows系统中已经用IDEA编写好了京淘项目的代码,并且打好了war包. 现在我就想把这个京淘项目发布到linux系统上. 因为在工作中,都是要将项目 ...
- 2003京淘项目Day-03京淘后台项目搭建
1.SpringBoot 整合JSP 1.1 创建项目 1.1.1 创建项目 1.1.2 编辑POM.xml文件 添加继承/依赖/插件 <!--parent标签作用:管理所有被springBoo ...
- 【后端结合】新程序猿笔记Day13(京淘项目)
1. 用户模块管理 1.1 用户列表展现 1.1.1 业务接口文档 请求路径: /user/list 请求类型: GET 请求参数: 后台使用PageResult对象接收 请求案例: http://l ...
- 京淘项目业务接口文档
一 用户登陆 1 用户登录验证接口 请求路径: /user/login 请求方式: POST 请求参数 参数名称 参数说明 备注 username 用户名 不能为空 password 密码 不能为空 ...
- 京淘项目模块分析:用户登;三级列表展现
文章目录 用户登录 用户登录验证接口 返回的SysResult对象 用户登录业务流程 MD5说明 编辑UserController 编辑UserService UserServiceImpl User ...
- 关于京淘项目虚拟机IP修改说明
0. 修改虚拟机MAC地址 当新建虚拟机时,修改mac网络地址. 0.Window 配置IP地址 1).修改IP地址 2).设定IP租用时间 3).检查windowsIP地址 4).检查LinuxIP ...
最新文章
- hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (背包问题)
- 生成路径 vs 设置_Simulink代码生成之模型配置
- 用Keepalived实现PostgreSQL高可用
- 堪称奇迹!8 天诞生一个产品,这家创业公司做到了
- 如何在ppt下面加入讲解内容_如何批量查找并修改替换 Word、PPT、Excel、PDF、TXT等文件的内容——我的ABC...
- java keypad game,关于java:Custom Keypad – 如何使这些按钮正常工作?
- 超越界限,定义未来-- HP刀片工作站WS460c Gen9无惧4K挑战
- TensorFlow游乐场及神经网络简介
- 大数据测试之hadoop命令大全
- SVN服务器搭建--Subversio与TortoiseSVN的配置安装(Windows)
- Loadrunner2021安装教程
- 小玩意 - 银行业务的模拟系统(C++)
- Keil5 编译时显示..\OBJ\TPAD.axf: error: L6002U: Could not open file ..\obj\main.o: No such file or direct
- 用Photoshop制作1寸和2寸的照片
- UED、UCD、UE、UI、交互设计这 5 个名词有哪些区别?
- hbuilder前端需要的插件_这两款HTML5开发工具,前端开发工程师用了直呼内行
- 有利可图网_公布有利可图的辅助项目手册
- MIT赵选贺再发《Nature Biomedical Engineering》​!
- ART运行时垃圾收集(GC)过程分析
- yum安装telnet详解
热门文章
- JavaScript 的 怪癖
- java有什么作用_Java有什么用
- 文献阅读二—Robsut Wrod Reocginiton via Semi-Character Recurrent Neural Network
- rocksdb介绍之compaction流程
- G1D51-审稿意见回复论文写作时态
- MySQL-explain-extra字段详解
- Ubuntu编译cpp文件报错“teat.cpp:45:2: error: stray ‘\344’ in program” 解决方法
- 抖音、微信关闭个性化推荐功能上线,用户真能摆脱“算法牢笼”吗?
- 浅谈perspective(透视)效果
- gmt php,php转换GMT标准时间函数