文章目录

  • 一、需求分析
  • 二、前后端交互
    • 1. 注册
      • **前端**
      • **后端**
    • 2、登录
      • 前端
      • 后端
    • 三、项目开发重难点
      • 1.编写一个Servlet
      • 2、session和session会话机制
        • 1)Session(会话)是什么
        • 2)cookie和session
        • 3、WEB开发总结
    • 四、创建对象注意事项
      • 1)tingshu.view_object.UserVO
      • 2)在tingshu.service.UserService
      • 3)在tingshu.data_object.UserDo

一、需求分析

1.用户管理,实现用户的注册、登录和注销。
2.音频管理,实现音频的录制和上传,能够显示音频列表。
3.专辑管理,实现音频和专辑的关联,能够新建专辑,能显示专辑列表。
4.页面跳转

用户角色

1.普通用户:不需要登录就可以使用——数据库中没有这类用户的任何信息
2.音频发布者:需要登录后进行操作——数据库中需要保存相关数据
场景
1.创作中心:给音频发布者使用的场景,进行音频、专辑的编辑和发布
2.首页:普通用户进行音频的播放
元素
音频:一段声音,可以上传可以通过浏览器录制
专辑:一组音频的集合
专辑和音频之间是多对多。
后台管理
用户管理(注册、登录)
音频管理(新增、列表)
专辑管理(新增、列表)
关系管理(音频和专辑之间的关系)
音频管理(上传音频(/upload.html)/studio/track/upload.html POST/studio/track/uoload.do)

URL规则
1、创作中心以/studio/开头,JSON数据以*.json结尾,

2、form表单提交的action加上一个重定向的操作 这个URL一般以*.do作为结尾,准备util底下的DBUtil

二、前后端交互

1. 注册

前端

利用form表单构造HTTP,发送GET请求,完成注册(静态资源)

<form method="post" action="/studio/user/register.do"><input type="text" name="username"><input type="password" name="password"><button>注册</button></form>
后端

进行注册的具体操作,需要多个类配合进行工作。

1、在UsersDO类(处理users表)对象中设置和数据库中相对应的属性名称(方便操作)。
2、在UserServlet类中从前端获取信息并调用UesrSerice来进行插入用户信息。插入完成后重定向到首页。
3、在UesrService类中将从form表单中获取的用户信息调用UserRepo中的方法添加到数据库中,实现数据的整合。
4、在UserRepo类中使用SQL来对数据库进行增删查改,由于是注册操作所以是插入操作。
5、最后将插入好的用户信息转换成UserVo来呈现给前端。

2、登录

前端

利用form表单构造HTTP,发送GET请求,完成注册(静态资源)

</head>
<body><form method="post" action="/studio/user/login.do"><input type="text" name="username"><input type="password" name="password"><button>登录</button></form>
</body>
后端

1、在UserServlet类中从前端获取信息并调用UesrSerice来查询用户输入的用户名和密码是否正确。
2、在UesrService类中将从form表单中获取的用户信息调用UserRepo来查询用户名和密码是否在数据库中并且一一对应。
3、在UserRepo类中使用SQL来对数据库进行增删查改,因为是登录操作所以使用的是查询操作。
4 、登录成功后,使用相对应的UserVo来呈现前端。

三、项目开发重难点

1.编写一个Servlet

servlet
在项目中创建一个继承HttpServlet的类,并重写service(HttpServletRequest req, HttpServletResponse rps)方法

2、session和session会话机制
1)Session(会话)是什么

HTTP协议本身是无状态(stateless)协议,所以需要一些机制+HTTP协议来解决会话管理的问题,通常情况下,使用Cookie+Session机制来一起解决会话管理的问题

2)cookie和session

1.Cookie是浏览器-服务器之间
浏览器∶保存Cookie;在合适的请求中携带Cookie(表现为HTTP请求头的Cookie Header)
服务器∶生成Cookie并传递给浏览器by HTTP响应(表现为HTTP响应头的Set-Cookie Header)
2.使用Cookie+Session解决会话管理时,Cookie的主要职责是携带session-id
3.Cookie本身是一个独立的机制过期时间、限制域、限制路径…
4. Session是只存在于服务器的一套数据,通过 session-id 找到对应的数据
1.Session默认存储于内存中,但实际上不做限制,哪里都可以存储
2.通过 session-id 取到的数据,我们的代码中看到的还是 Map<String,Object>3.只要 session 存储,我们可以跨请求共享数据4.Session可以独立工作

3、WEB开发总结

一个 Web 应用 是由多个场景组成,每个场景下又会有多个功能组成,简单说,是由多个页面(html页面)组成的。有n个css、js资源,一个页面包含 1个HTML资源,n个*.do资源,n个json资源,一个页面是由多个web资源组成的。
资源
1.路径(path)=context path+servlet path
2.内容格式类型(content-type)∶ text/plain、text/html、text/css、application/javascript、application/json 3.静态vs动态
4.支持的HTTP方法(主要是动态资源)
浏览器-服务器以资源(resource)为单位,进行HTTP协议的沟通1.HTTP协议是应用层协议2.请求方法∶ get vs post 3.请求头∶Cookie头
4.响应状态∶ 1xx、2xx、3xx、4xx、5xx 200、404、405、500、301、302、307
5.响应头∶ Content-Type、Set-Cookie 场景总结
服务器浏览器
1.页面和其他资源产生关系(发起新的请求)1.浏览器地址栏输入URL回车——发起GET请求2.通过标签让浏览器自动发起GET请求
图片 CSS

+ 5.通过JS手动控制发起GET/POST请求 (ajax)XMLHttpRequest 对象控制 2.浏览器需要读取服务器的数据(通过GET请求实现),以ajax处理为主3.浏览器向服务器提交数据——学习了两种方法 1.通过 form 表单实现 的关键属性∶ action、method、enctype 80% 2.通过 ajax 进行提交20% 1.直接携带在query string 中提交数据。 open('get',/some.do?username=xx&password=yy)2.以JSON格式,放置在请求体中进行提交 var data = {…} //将对象变成JSON字符串var jsonString = JSON.stringify(data)//通过 ajax 方式提交 JSON 数据var xhr = new XMLHttpRequest()xhr.open('post','/some.do')xhr.onload = function(){…} xhr.setRequestHeader('Content-Type','application/json')xhr.send(jsonString) JS中对DOM的操作1.如何查询需要的结点 第一个 document.querySelector(选择器字符串) 所有的 document.querySelectorAll(选择器字符串)class 选择器∶'.some' 元素选择器∶'body'选择器∶ id选择器∶'#some' 100% 2.元素对象,常见属性之间读取或者修改 input.value = '..';img.src='..'; Hello元素的文本 e.textContent | e.innerText 元素的内联css 属性e.style.height 元素的class 属性e.classList add(...)remove(...) contains(..) 3.修改html结构(插入孩子、删除孩子) e.outerHTML='...' 1. e.innerHTML='...'2.以对象的方式 var e = document.createElement('div');parent.appendChild(e);parent.removeChild(e); 所有前端的内容(HTML、CSS、JS)都要善用去MDN查询 后端场景∶1.响应内容 resp.setCharacterEncoding("utf-8");resp.setContentType("….");PrintWriter writer = resp.getWriter();//利用write写响应2.读取用户输入 1.以 form表单方式提交(放在 query string 或者 请求体(x-www-urlencoded、multipart/form-data)) req.setCharacterEncoding("utf-8");String value = req.getParameter(name); 如果是文件上传@MultipartConfig修饰类req.getPart(name) 2.直接从 req.getInputStream()请求体输入流读取 借助jackson提供的方法 User user = objectMapper.readValue(req.getInputStream(),User.class)输出 text/html可以采用模板技术 输入 application/json,可以使用jackson 提供的方法 User user = new User(); String jsonString = objectMapper.writeValueAsString(user); 关于数据————放在数据库中JDBC的操作(DAO类型对象、model类型对象、Service类型对象)流程型对象 Servlet 对象 -> Service 对象 -> Dao 对象 大 model对象 数据库直接的增删查改的操作读取用户输入 做数据的结构化工作 响应输出 会话管理 1.登录…2.判断用户是否登录… 工程角度(源码组织) 1.静态资源 src/main/webapp 下,并且不能再 src/main/webapp/WEB-INF下2.动态资源,放在 src/main/java 下的任意包下都可以 备注∶这里的路径只是Servlet Path。Context Path是配置在启动配置中的 1.@WebServlet(路径) 1.必须以/开头2.不能重复 首页3."" 所有路径4."/"5."*.html"2.继承HttpServlet 3.重写 doGet、doPost、doHead

四、创建对象注意事项

1)tingshu.view_object.UserVO

注意,这个类的对象是准备传给前端的数据,不要把密码传上去

2)在tingshu.service.UserService

1、UserService下面有一个注册,所以要对密码进行加密,加密操作…
2、完成数据库表的insert操作,用userRepo方法

3)在tingshu.data_object.UserDo

注意,由于这里是数据库操作的,所以属性名最好跟数据库字段名一样

1.Cookie和Session
1.Session(会话)是什么,为什么需要会话这个概念2.HTTP协议本身是无状态(stateless)协议
3.所以需要一些机制+HTTP协议来解决会话管理的问题
4.通常情况下,使用Cookie+Session机制来一起解决会话管理的问题
1.Cookie是浏览器-服务器之间
浏览器∶保存Cookie;在合适的请求中携带Cookie(表现为HTTP请求头的Cookie Header)服务器∶生成Cookie并传递给浏览器by HTTP响应(表现为HTTP响应头的Set-Cookie Header)2.使用Cookie+Session解决会话管理时,Cookie的主要职责是携带session-id 3.Cookie本身是一个独立的机制过期时间、限制域、限制路径…
4. Session是只存在于服务器的一套数据,通过 session-id 找到对应的数据
1.Session默认存储于内存中,但实际上不做限制,哪里都可以存储
2.通过 session-id 取到的数据,我们的代码中看到的还是 Map<String,Object>3.只要 session 存储,我们可以跨请求共享数据4.Session可以独立工作
用户管理
1.用户注册(添加新用户)2.用户登录(验证你是不是“你”)3.获取当前登录用户信息
1.将用户管理在内存中
用户∶ int uid, String username(唯一), String password
List allUsers;
登录场景/login.html
提供 form 表单,收集用户填写的用户名+密码信息,并且提交到服务器
/login.do
读取用户提交的用户名+密码,完成验证。
如果成功,进行登录(会话中保存当前用户),响应登录成功如果失败,重定向回/login.html
2.获取当前登录用户
1.如果没有当前登录用户,重定向(跳转)到/login.html 2.如果用户登录了,则显示当前登录用户信息/publish.html
GET
动态
3.将用户数据持久化到MySQL中
create table users (
根据用户名+密码查找用户
uid int primary key auto_increment, username varchar(60) not null unqiue,
selectfrom users where username = ?password varchar(60) not null and password = ?;¥
3.1建表
3.2 操作数据库的对象 DAO(Data Access Object)
UserDao.selectOneByUsernameAndPassword(…)
4.注册
form 提交 username + password
/register.html
读取用户名+密码,完成用户的添加(插入表中)
/register.do
注册后直接登录 or 跳转到登录页让用户登录
永远不要用明文去保存用户的密码
Web开发
一个 Web 应用 是由多个场景,每个场景下又会有多个功能组成!
由多个页面(html页面)组成的
n个css、js资源
一个页面consist of 1个HTML资源
n个
.do资源n个json资源
一个页面是由多个web资源组成
资源
1.路径(path)=context path+servlet path
2.内容格式类型(content-type)∶ text/plain、text/html、text/css、application/javascript、application/json 3.静态vs动态
4.支持的HTTP方法(主要是动态资源)
浏览器-服务器以资源(resource)为单位,进行HTTP协议的沟通1.HTTP协议是应用层协议2.请求方法∶ get vs post 3.请求头∶Cookie头
4.响应状态∶ 1xx、2xx、3xx、4xx、5xx 200、404、405、500、301、302、307
5.响应头∶ Content-Type、Set-Cookie 场景总结
服务器浏览器
1.页面和其他资源产生关系(发起新的请求)1.浏览器地址栏输入URL回车——发起GET请求2.通过标签让浏览器自动发起GET请求
图片 CSS

+ 5.通过JS手动控制发起GET/POST请求 (ajax)XMLHttpRequest 对象控制 2.浏览器需要读取服务器的数据(通过GET请求实现),以ajax处理为主3.浏览器向服务器提交数据——学习了两种方法 1.通过 form 表单实现 的关键属性∶ action、method、enctype 80% 2.通过 ajax 进行提交20% 1.直接携带在query string 中提交数据。 open('get',/some.do?username=xx&password=yy)2.以JSON格式,放置在请求体中进行提交 var data = {…} //将对象变成JSON字符串var jsonString = JSON.stringify(data)//通过 ajax 方式提交 JSON 数据var xhr = new XMLHttpRequest()xhr.open('post','/some.do')xhr.onload = function(){…} xhr.setRequestHeader('Content-Type','application/json')xhr.send(jsonString) JS中对DOM的操作1.如何查询需要的结点 第一个 document.querySelector(选择器字符串) 所有的 document.querySelectorAll(选择器字符串)class 选择器∶'.some' 元素选择器∶'body'选择器∶ id选择器∶'#some' 100% 2.元素对象,常见属性之间读取或者修改 input.value = '..';img.src='..'; Hello元素的文本 e.textContent | e.innerText 元素的内联css 属性e.style.height 元素的class 属性e.classList add(...)remove(...) contains(..) 3.修改html结构(插入孩子、删除孩子) e.outerHTML='...' 1. e.innerHTML='...'2.以对象的方式 var e = document.createElement('div');parent.appendChild(e);parent.removeChild(e); 所有前端的内容(HTML、CSS、JS)都要善用去MDN查询 后端场景∶1.响应内容 resp.setCharacterEncoding("utf-8");resp.setContentType("….");PrintWriter writer = resp.getWriter();//利用write写响应2.读取用户输入 1.以 form表单方式提交(放在 query string 或者 请求体(x-www-urlencoded、multipart/form-data)) req.setCharacterEncoding("utf-8");String value = req.getParameter(name); 如果是文件上传@MultipartConfig修饰类req.getPart(name) 2.直接从 req.getInputStream()请求体输入流读取 借助jackson提供的方法 User user = objectMapper.readValue(req.getInputStream(),User.class)输出 text/html可以采用模板技术 输入 application/json,可以使用jackson 提供的方法 User user = new User(); String jsonString = objectMapper.writeValueAsString(user); 关于数据————放在数据库中JDBC的操作(DAO类型对象、model类型对象、Service类型对象)流程型对象 Servlet 对象 -> Service 对象 -> Dao 对象 大 model对象 数据库直接的增删查改的操作读取用户输入 做数据的结构化工作 响应输出 会话管理 1.登录…2.判断用户是否登录… 工程角度(源码组织) 1.静态资源 src/main/webapp 下,并且不能再 src/main/webapp/WEB-INF下2.动态资源,放在 src/main/java 下的任意包下都可以 备注∶这里的路径只是Servlet Path。Context Path是配置在启动配置中的 1.@WebServlet(路径) 1.必须以/开头2.不能重复 首页3."" 所有路径4."/"5."*.html"2.继承HttpServlet 3.重写 doGet、doPost、doHead

听书项目开发过程及重难点总结(用户管理)相关推荐

  1. web聊天室项目开发过程及重难点整理

    目录 一.需求分析 二.业务背景 1.张三要发消息给李四 2.WebSocket实现消息推送流程 三.前后端接口和数据库系统设计 1.用户相关的接口 2.频道相关接口 3.数据库表的设计 四.功能交互 ...

  2. “听书”项目大纲+梳理

    一次在使用听书软件喜马拉雅时,觉得这个软件做的很好,给用户提供了极大的方便和帮助,特别是晚上睡不着的时候,在喜马拉雅上听一段郭德纲的相声,非常加速入眠时间,好的睡眠等于好的生产力,.我很喜欢喜马拉雅, ...

  3. 小熊听书项目的详细介绍

    目录 一.项目概述 二.项目需求 2.1功能需求 2.2 其他需求 2.3系统功能流程图 2.4总体设计 三.开发环境 四.准备工作 五.介绍文件的存放规则 六.各部分功能的详细介绍 1.建立数据库与 ...

  4. 不爱听书项目测试细则

    前言 软件测试流程:需求分析->测试计划->测试设计->测试执行->测试报告 一.需求分析 "不爱听书"是一个为用户提供创作音乐和收听音频的平台.对于该项目 ...

  5. 浙江理工大学信息学院本科生创新项目总结报告——简单的后台用户管理项目

    信息学院本科生创新项目总结报告 研究目的与意义 基于Spring Boot框架等技术实现一个简单的后台用户管理系统项目,具有良好的用户交互体验.良好的信息反馈能力.安全防护措施,包括用户登录.用户注册 ...

  6. 潭州课堂25班:Ph201805201 django 项目 第四十三课 后台 用户管理前后功能实现 (课堂笔记)...

    用户的展示,编辑,删除, 把用户显示出来,用户名,员工(是,否), 超级用户(是, 否) 活跃状态,(非活跃示为删除) 在前台要显示该用户所属的用户组,在前台代码中是调用类的属性,所以在 user 的 ...

  7. PWA项目实战分享(听书APP)

    PWA项目实战分享 - BookPlayer 每天听本书App 因为自己有个需求,特别的痒,昼夜难免.第二天就开始起手做这个项目,利用业余时间,大概持续了10天时间(因为边学边做),从设计到数据(包括 ...

  8. 关于自己项目(听书系统)的简介

    听书系统(类似于喜马拉雅) 文章目录 前言 准备工作 1.库表的创建 (1)用户表users(做主表): (2) 音频表track : (3)专辑表albums: (4)关系表relations: 2 ...

  9. 我的项目——不爱听书系统

    一.项目简介 访问不爱听书系统,用户可以根据自己的喜好选择对应的专辑进行内容播放:若想录制并上传自己的音频,创建专属专辑就需要在创作中心进行注册登录. 二.准备工作 1.库表的创建 2.后端对象(类) ...

最新文章

  1. spring学习12 -Spring 框架模块以及面试常见问题注解等
  2. C#之windows桌面软件第十一课:电脑ADC值显示(上位机)(多通道显示)
  3. python访问数据库oracle_python连接oracle数据库
  4. python面试经典题_16道Python经典面试题及答案
  5. 45岁码农用不到2年时间撸出100款扑克游戏
  6. 2013年的财务预算
  7. 无法读取iis redirection.config
  8. WinCC归档数据报表控件
  9. 【哈利波特】Sherbert Lemon对HP的解读之11
  10. medoo update mysql_Medoo Update的使用:修改更新数据
  11. html css考试题选择题,html_JavaScript_css试题
  12. chrome的timeline的问题?
  13. php与web页面交互
  14. Flutter之Flutter-Redux框架源码解析
  15. CentOS 7.0 关闭防火墙
  16. java坦克大战项目
  17. 计算机发邮件试题,计算机考试题库:计算机网络模拟练习题(4)
  18. 谁先倒(15 分) 划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒
  19. 热启动计算机的快捷键,电脑怎么设置U盘启动 各品牌电脑热启动快捷键大全-电脑教程...
  20. 爱奇艺面向海量设备的边缘计算PAAS平台及应用实践

热门文章

  1. 五一影视圈的神仙打架,揭开了内容市场暗自角力的真相
  2. 公司搬迁后第一次到新公司上班
  3. java面向对象基础
  4. win10下Anaconda虚拟环境安装pycocotools
  5. 在等吴恩达深度学习第5课的时候,你可以先看看第4课的笔记
  6. 使用 Gitbook 打造你的电子书
  7. eclipse的plugins导入hadoop-eclipse-plugin-2.6.0.jar后Preference下没有hadoop Map/Reduce的解决方法
  8. 小丑改造计划之复习一
  9. 仿知乎日报图文小程序模板
  10. SQL基础1--select