黑马程序员JAVA综合案例课程笔记
黑马程序员java培训就业班笔记:day02总结

第二天总结:1、java语言基础组成关键字:什么是关键字:java赋予了特殊意义的单词;特点如何:所有的字母都要小写,java是严格区分大小写的,eg: public static void class interfaced等注释:作用是什么?1、注解说明程序;2、调试程序代码Java中常用的三种注释方式:1、//单行注释,能嵌套多行注释;2、/**/多行注释:能嵌套单行注释,不能嵌套多行注释,因为结尾不对,3、/***/文档注释,可以通过javadoc 来提取,生成说明书,放到网页文中,这也是和/**/的区别,注意:在面试的时候,如果有上机题,一定要写注释,体现其自己的专业性;增加获胜的几率;总结了注释在程序代码中的体现,详细见课程笔记标示符:程序当中自己定义的一些名称,规则:0-9数字,a-z26个字母,_以及$组成,注意区分特殊的标示符是否合法,不能以数字开头,不能使用关键字,(扩展:_和$符号的使用;eg:Demo_1$Test)扩展:java基础当中一些常见规范:包、类以及接口、变量、常量、等书写要注意哪些规范提到了一种思想,也就是在日后写代码中自己应该养得成习惯,如下大体步骤:1、进行需求分析2、整理思路3、设计步骤4、测试以后编写程序的时候应该耐着性子把这些步骤写出来,要知道,万丈高楼平地起,这对自己打下鉴定的基础是非常有必要的总结:代码仅仅是思想的一种体现,先思想在写代码;下午:1、常见的8中基本数据类型:byte short int long float double char boolean 掌握其中每一种的基本特性,包括取值范围,所占内存空间,以及平常应用中应该注意的细节,比如针对long float double等类型的数据的时候要在后面标注清楚。
2、为什么要对数据进行分类?就是为了方便运算3、常量和变量的定义以及区别:4、为什么要定义变量?什么时候定义变量?怎么使用变量?如何在内存中开辟空间给变量?5、区别字符常量和字符串常量?6、进制由来?二进制、十进制、八进制、十六进制之间的转换?(注意负数的二进制的获取,该正数取反+1)7、理解自动类型提升和强制类型转换8、算术运算符+ - * / %等(注意+与字符串一起使用的时候是连接符号eg:"5+5="+5+5)同是要重点注意++ --等类似的运算符。
黑马程序员java培训就业班笔记:day01总结

Day01总结:1、计算机常识:包括了软件的简单划分:系统软件windos等和应用软件QQ、迅雷等2、人机交互方式:图形化界面GUI、命令行方式CLI:3、常常利用的命令:cd:进入目标路径、cd..退出当前路径、mk:创建文件、rd:删除文件,dir:列出当前目录、cls:清屏、exit:退出dos窗口cd\回到根目录rd\s删除根目录下所有的文件〔这里是比拟牛的地方,因为windos都是从里到外的删除,在dos命令下必需首先删除里面的文件保证没有任何文件下才能删除当前的文件目录〕*:代表通配符、notepad:记事本;4、Help/?为dos中寻觅帮忙的工具,可以帮忙列出所有的dos命令5、Java的三种技术架构:javaSE:标准版:是为了开发桌面和商务应用程序提供的解决方案javaEE:企业版:为了开发企业环境下的应用程序而提供的一套解决方案;javaME:小型版:是为了开发电子消费品和嵌入式设备提供的解决方案;6、Java的简单特性:跨平台性(平台在此所指的是操作系统,而操作系统指的是平台)怎么做到跨平台?因为有jVM的出现,只要计算机上安装上虚拟机就可以够运行不同的程序jVM作用:能解释java语言的程序;正是因为有了JVM才使java语言具有了良好的移植性;7、java语言的开发环境:JRE:java Runtime Enviroment Java运行环境:包括javaJVM和核心类库简单:JRE=JVM+核心类库JDK:java Development kit java 开发工具:包括java工具包例如:javac 编译器java 运行总的说来就是一句话:利用JDK开发完的程序交给JRE运行;8、下载JDk和安装JDK 详细见:下载JDK和安装JDK专题下午:1、环境变量的配置:三个步骤:下载安装、配置环境变量、javac编译运行〔若是dos窗口显示出javaJVM中所有的参数信息代表已经配置成功〕2、path环境变量有什么作用?用于记录应用程序所在的路径;3、配置Path环境变量目的:为了方便任何情况下都能执行应用程序4、区别:不用找路径了,windos找路径5、临时配置环境变量:Set path:6、在原有的根底上添加新的参数值:set path=E:\javaJDK\jdk1.7_0_3\bin%path%:注意后面的局部〔注意:配置时要尽可能配置在前端,否那么JDK会优先运行其他程序〕7、Java程序:Class Demo{Public static void main(String[] args){System.out.println("HelloWorld!");}}从上面的程序中可得:一、java文件的扩展名为:.java二、javac 对该java文件进展编译;3、java对生成的class文件进展运行;类就是存储代码的地方;关键字:class类名的书写标准:英文和数字的组合,英文单词第一个字母大写若是有几个组成,每一个英文字母的首字母大写〔回忆变量名书写标准----已经忘记了〕--------------------------------------------------------------------自己写好的文件称之为源代码或源文件,必需翻译成计算性能识别的文件NoSuchMethodError:main ;没有main方式〔缺少主函数〕回忆最多见的几个异样(已经忘记,java面试中这么一道题:说出你常常碰到的异样,至少五个)-------------------------------------------------------------------------------------------------------------public static void main(String[] args)main函数可以保证该类独立运行;它是程序的入口;它会被JVM所挪用;argments:args;参数作用:可让一个类可以独立运行;java程序的主函数,程序的开场;执行的起始点;面试题:一个java程序中是不是只能有一个main函数?〔自己查找--已经忘记〕可以重载main()函数〔重载和覆盖知识点已经忘记,晚上补齐〕补习:重载:什么是重载:Overload表示同一个类中可以有多个名称一样的方式,重载的特点:参数列表的方式各不一样〔参数个数和参数列表〕为何用重载:是静态多态性,即同名不同参,比如一个人可以用不同的餐具一样;重写:override覆盖一个方式,而且对其重写,以求抵达不同的作用,----------------------------------------------------------------------------------------------------------System.out.println("");println与print的区别:前者换行也就是回车,后者没有回车;作用:显示效果不一样;java的输出语句:输出在控制台上;java对应的程序就是java虚拟机弄清楚编译时期和运行时期出现的机制和错误:〔后期的异样机制中涉及到〕---------------------------------------------------------------------------------------------------------初学者在初学的时候碰到的问题:一、文件名保留错误;二、目录不对eg:只进入了盘符,没有进入文件中;3、扩展名保留不对;eg:123.java.txt扩展名隐藏;解决方式,用dir查看文件详细信息,显示其扩展名;4、主函数找不到;五、编译失败;八、classpath:类文件路径set classpath=c:\myclass将java的类文件告知系统,java虚拟机在执行时就会制定的目录下查找;作用:简单一句话:告知java虚拟机要运行类文件的位置;没告知位置就在当前文件下找,告知位置就去告知位置查找!set classpath=c:\mycalss;多了一个分号,表示告知虚拟机依照所指定的目录下查找的java程序,若是没找到会在当前目录下再次查找;一般情况下不加分号;若是加分号和自己指定的意愿有悖;set calsspath=.;c:\myclass表示当前路径和指定的目录;九、path与classpath的区别?path是用于概念系统中的可执行程序的所在路径。
黑马程序员_javaweb讲义和笔记资料

黑马程序员_javaweb讲义和笔记资料一、简介黑马程序员是一家专业的IT培训机构,提供全面的编程技术培训服务。
javaweb是其中的一门重要课程,本文为黑马程序员_javaweb讲义和笔记的资料整理。
二、javaweb基础知识1. Java语言概述Java语言的特点和优势,Java开发环境的搭建等。
2. Servlet技术Servlet的基本概念、生命周期、Servlet容器等。
3. JSP技术JSP的基本语法、JSP指令、JSP内置对象等。
4. MVC设计模式MVC设计模式在javaweb开发中的应用和实践。
三、javaweb开发流程1. 需求分析分析项目需求,明确开发目标和功能要求。
2. 数据库设计设计数据库表结构,确定数据存储方式和关系。
3. 技术选型根据项目需求和开发要求,选择合适的技术框架和工具。
4. 编码实现使用Java语言和相关技术进行编码实现。
5. 测试调试运行和调试项目,确保功能的正确性和稳定性。
6. 部署上线将项目部署到服务器上线,提供给用户访问和使用。
四、javaweb开发常用框架和工具1. Spring框架Spring框架的介绍和核心特性,以及在javaweb开发中的应用。
2. SpringMVC框架SpringMVC框架的详细讲解,包括请求映射、数据绑定、视图解析等。
3. MyBatis框架MyBatis框架的使用方法和技巧,以及与数据库的集成。
4. Maven工具Maven的基本使用和配置,常用插件介绍。
五、javaweb开发中的常见问题和解决方案1. 数据库连接异常分析数据库连接异常的原因和解决方法。
2. 页面跳转问题页面跳转的实现方式和常见错误排查。
3. 表单数据验证表单数据验证的常用技术和插件,提高数据输入的准确性和安全性。
4. 性能优化优化javaweb应用的性能,减少响应时间和资源占用。
六、实例项目提供一个实例项目,通过对该项目的讲解和分析,帮助学员理解和掌握javaweb开发的方法和技巧。
黑马程序员java培训就业班笔记:day11总结

Day11知识总结:1、异常处理细节:1、定义功能时,功能中有什么问题,都应该进行预先的处理比如try catch.如果处理不了,应该通过throws声明抛出,让调用者进行处理。
2、调用了抛出异常的功能的函数,应该进行处理,如果使用try catch处理的话,被调用的功能上抛出几个异常,就应该对应几个catch语句,必须要对多个异常进行针对性的处理。
3、如果出现多个catch中存在着父类异常的catch,那么这个catch一定放在catch的最后,通常这种情况在面试很多见。
4、如果函数内抛出异常,那么一定要在函数上声明,否则编译失败,但是要注意函数内抛出的异常是运行时异常(RuntimeException),那么函数上是可以不用throws声明的。
5、如果函数内抛出了异常,进行了本功能内部的处理,但是处理的并不完全,这时应该在异常处理中,继续将异常抛出,让在函数上声明让调用者知道问题的存在,但是有可能需要将异常进行转换,尽量抛出调用者识别的异常,处理起来更方便。
6、当子类覆盖父类中的异常声明的方法时,子类方法只能声明父类的异常或者该异常的子类。
如果父类抛出了多个异常,那么子类在覆盖时买智能抛出父类异常的子集。
7、如果父类和接口中的方法没有声明抛出过异常,那么子类的覆盖父类方法时,也不能抛出异常,如果子类中的方法发生了异常,那么子类只能try catch不能用throws声明,只能try,不能抛,如果非要在函数内抛出异常,那么只能抛出RuntimeException,因为这种异常不用在函数声明上。
2、finally:定义一定会被执行的代码。
通常用来关闭资源,异常处理的三种格式:1、try catch finally2、Try catch//可以多个catch3、Try finally记住:catch是用于处理异常的,如果没有catch就代表异常没有被处理过,如故哦该异常是检测时异常,必须被声明。
代码体现:3、异常总结:异常是什么?是对问题的描述,将问题进行对象的封装。
黑马程序员java培训就业班笔记day17(集合框架set)总结

Day17总结1、LinkedList:特有方法:1、增加:addFirst()addLast()JDk1.6之后出现了替代方法Boolean offerFirst()Boolean offerLast()实现代码:Public static void main(String[] args){LinkedLis link=new LinkedList();Link.addFirst("abc1");Link.addFirst("abc2");Link.addFirst("abc3");Link.addFirst("abc4");While(!link.isEmpty()){//此方法可以按照顺序取出元素,但是被删除,可以去模拟一些简单的数据结构Sop(link.removeLast());//abc1、abc2、abc3、abc4}}重点:模拟堆栈、队列这两种常见的数据结构;实现代码:队列:先进先出Public static void main(String[] args){DuiLie d=new DuiLie();d.myAdd("abc1");d.myAdd("abc2");d.myAdd("abc3");While(!d.isNull()){//判断是否有元素Sop(d.myGet());}}Class DuiLie{Private LinkedList link;DuiLie(){Link=new LinkedList();}提供添加元素的方法Public void myAdd(Object obj){link.addFirst(obj);//这里修改为link.addLast()就是堆栈}提供获取元素的方法Public Object myGet(){Return link.removeLast();}判断集合中是否有内容Public boolean isNull(){Return link.isEmpty();}}2、获取:Object getFirst()获取对象,不删除,如果集合中没有元素会抛出NoSuchElementException;Object getLast();JDK1.6后Object peekFirst()Object peeklast()3、获取对象:Object removeFirst()获取到元素,但是删除了。
黑马程序员java培训就业班笔记集合体系地的总结

精彩文档
lhs.add( "A" );
lhs.add( "D" );
lhs.add( "E" );
lhs.add( "C" );
lhs.add( "F" ); System. out .println( "LinkedHashSet:" +lhs); TreeSet<String> ts= newTreeSet<String>();
实用标准文案
1、Collection :
集合框架的由来: 因为每个容器对象的自身的数据结构不同, 所以对它们进行单独的描
述和对象封装,并不断的向上抽取共性内容,这样变形成了集合框架。
定义: 集合就是一个容器、用来存储对象、长度可变。
理解: 其实班级就是一个容器, 班上的每一个学生都是单独封装了功能的对象, 因为班
重点掌握上述保证唯一性的方法以及哈希表内存原理实现。
|--linkedHashSet
以元素的插入顺序来维护集合的连接表,允许以插入的顺序的集合中迭代的
怎么去理解?
HashSet<String> hs= newHashSet<String>();
hs.add( "B" );hs.a来自d( "A" );
for (int i = 0; i < array.length; i++)
list.add(new Double(array[i])); } Collections.sort(list); for (int i = 0; i < array.length; i++)
黑马程序员java培训就业班笔记day03总结

Day03知识总结:上午:1、逻辑运算符:就是指的是一种关系,作用:用于连接两个布尔类型的表达式包括以下几种:&:与,特点:两边为真才为真,一边为假那么为假| 或,特点:一边为真那么为真,两边为假才为假! 非,特点:非真为假,非假为真^ 异或特点:同为假,异为真规律:一个数同时异或这个数两次结果仍是这个数。
用于加密&& 双与特点:与&一样,可是有点小区别,在下面单独讨论。
|| 双或特点:与|一样,可是有点小区别,在下面单独讨论。
<<:左移规律:左移几位就是该数乘以2的几回方,>>:右移:规律:右移几位就是除以2的几回方注意对于左移和右移中高位的问题,总结为一句话:简单一句话:最高是什么就拿什么补,高位为0就拿0补,高位为1就拿1补;>>>:无符号右移:区别于>>就是高位出现的空位,无论高位原来是什么都用0补;2、&与&&的区别:一路点:二者都可以作为逻辑与的运算符,表示逻辑与,不同点:&&有短路的功能,若是第一个表达式为false时,不需要进展第二个表达式的运算,当&操作符两边的表达式不是boolean类型时,表示按位与操作。
Eg:咱们通常利用0x0f来与一个整数进展&运算,获取低四位;3、|和||的区别:|:无论左侧的运算结果是什么,右边都参与运算。
||:当左侧为真时,右边不参与运算的。
4、练习题:1、最有效率的方式算出2乘以8等于几?2*8:在内存中的运算0010* 1000------0000000000000010-------0010000=16;想要运算变的高效首先2进制位;00000000000000000000000000000010 2--左移三位2、对两个整数变量进展互换;不概念三方变量;〔用三种方式〕int a=3,b=5;a=a+b;//a=3+5; a=8b=a-b;//b=3+5-5;b=3a=a-b;//a=3+5-3;a=5这种方式不建议用,若是两个整数的数值过大,会超出Int范围,会强制转换,数据会转变a=a^b;//a=3^5b=a^b;//b=(3^5)^5;b=3a=a^b;//a=(3^5)^3;a=5以上方式用于面试第三方变量:int cc=a;a=b;b=c;实际开发顶用此种方式;3、对于一个整数的最后一个字节,高四位和低四位进展换位;〔画出图〕思路:一、首先用该数与1进展与保证唯一的有效位;0000-0000 0000-0000 0000-0000 1011-01100000-0000 0000-0000 0000-0000 1111-1111----------------------------------------0000-0000 0000-0000 0000-0000 1011-0110再用取得的与&15进展与运算0101 1100& 1111----低位b:0000 1100用位运算&15掏出低四位;0101 1100&1111 0000 0x0f<<4;----------0101 0000高位c: 0101 0000低位右移4位c>>4;高位左移4位b<<4;最后或运算保留有效位c|b;int a,b(低位),c(高位);a=a&0xFF;b=a&0x0f;c=a&(0xof<<4);b=b<<4;c=c>>>4;a=b|c;用在加密解密当中;5、三元运算符:特点:只如果运算符就得有结果。
黑马程序员java培训就业班笔记:day05总结

Day05上午:1、数组的静态初始化多种定义格式:Int[] arr=new int[]//标准格式,可以明确数组的数据类型,和数组名,但是不知道数组的长度Int arr[]=new int[]Int[] arr=new int[]{2,1,3,4,5,}//通过大括号可以标示出数组中的内容,此处最好别写长度,因为容易出错,因为即初始化实体,又初始化实体中的元素。
Int[] arr={2,1,3,4,5};//可以明确数组的数据类型,和数组名,也可以知道数组中的内容。
2、arr.length:方便获取数组中的元素个数的方式。
3、操作数组的最基础的思想以及核心思想:a)最基础的思想:就是遍历。
什么是遍历。
Eg:int[] arr = new int[3];int[] arr = {4,8,9,2,6,9};//明确了数组的类型和长度,并明确了数组中元素的内容。
// int[] arr1 = new int[]{4,8,9};//方便获取数组中的元素个数的方式,可以使用数组实体一个属性。
lengthSystem.out.println("len:"+arr.length);for(int x=0; x<arr.length; x++){if(x%2==1)System.out.println("arr["+x+"]="+arr[x]);//arr[0] = 4;}这就是遍历的思想,获取数组中的元素,通常会用到遍历。
b)核心思想:就是操作数组中元素的角标,角标即索引,因为存数据的最终目的就是取出数据使用,就是操作角标,操作动作:1、给数组角标上的元素赋值,2、获取角标上元素的值,存储都得用角标4、数组中常见的操作:a)获取最值:思路:1、首先我们要定义一个功能完成获取数组中最大值的动作;2、定义个函数来实现这一功能;明确结果,整数数组中的最大值,int,明确是否有未知内容参与运算,参数列表中有一个参数,数组类型int[],一定要注意这里是数组类型,不是int型;3、如何实现功能细节呢?1、对数组中的元素进行比较,将比较后比较大的值进行记录,并参与下一次比较,当数组中的元素都比较完成后,最大值就已经被记录下来了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
bid VARCHAR(100) PRIMARY KEY,/*主键*/ bname VARCHAR(100),/*图书名*/ price DECIMAL(5,1),/*单价*/ author VARCHAR(20),/*作者*/ imgurl VARCHAR(200),/*图片地址*/ category VARCHAR(100)/*所属分类*/ );
第三 把返回的 list 集合传递到页面中, 第四 在 service 里面调用 dao,在 dao 里面实现具体查询的方法
第五 在 jsp 中使用 jstl 里面 forEach 标签获取域对象里面 list 集合内容 根据 forEach 里面的属性判断换行
显示图书的详情功能
点击图片,或者点击图书名称,到一个页面中显示当前点击图书的详情内容 第一 在图片和图书名称上添加超链接,同时传递当前图书的 id 值 第二 创建 servlet,在 servlet 得到传递的图书的 bid 值,根据 bid 查询
第三 把返回 book 传递到页面中显示
第四 在 jsp 页面中,使用 el 表达式获取域对象里面 book 对象中的值
完成任务
1 把网上商城项目环境搭建出来 2 完成用户模块功能
* 登录 * 注册 * 退出 * 修改用户信息 3 完成图书模块 * 显示所有图书 * 显示图书的详情 4 掌握多表之间的操作 5 完成根据分类查询(有余力)
开发模式 Mvc+dao 开发模式
网上商城数据库的设计
创建数据库 Create database bookstore;
创建数据库表 1 创建用户表 user /*用户表*/ create table user (
uid varchar(100) primary key, username varchar(100), password varchar(100), email varchar(255), telephone varchar(100), sex varchar(20), remark varchar(255) );
3 一对一 在中国,一个男人只能有一个妻子,一个女人只能有一个丈夫
网上商城开发环境的搭建
第一 创建 web 项目
第二 导入页面原型
第三 导入相关的 jar 包 Mysql 数据库的 jar 包(1 个) Dbutils 的 jar 包(1 个) Beanutils 的 jar 包(2 个) C3p0 的 jar 包(1 个) Jstl 的 jar 包(2 个) fileUpload 的 jar 包(2 个)
网上商城页面切分
前台和后台 前台:用户操作 后台:管理员操作
网上商城功能模块的划分
前台功能
用户模块 1 用户登录功能 2 用户注册的功能 3 用户信息的修改 4 用户退出功能
图书模块 1 查询所有图书(分页) 2 根据分类查询图书
3 查询图书的详情
购物车模块 1 添加商品到购物车 2 修改购物车商品的数量 3 删除购物车的商品
黑马程序员JAVA综合案例第22天课程笔记
day22
——网上商城篇
上节内容回顾
1 jdk 里面的三个注解 方法重写、方法过时、抑制警告
2 自定义注解属性类型要求 基本数据类型、字符串、Class、枚举、注解、一维数组
3 反射 首先得到类 Class 得到 Class 有三种方式
4 自定义注解 自定义注解默认范围是源代码阶段,使用元注解设置
第四 划分包的结构 cn.itcast.bean cn.itcast.servlet cn.itcast.service
cn.itcast.dao cn.itcast.utils 第五 复制数据库操作工具类和配置文件
网上商城用户模块 用户登录功能
实现步骤分析(画图) 看 01-登录功能分析 图
使用图片提交表单 <input type=”image” src=”图片路径”/> 第一 修改登录页面 第二 创建 javabean 和 servlet 第四 在 servlet 里面获取数据封装到到 javabean,调用 service 里面的方法
iid VARCHAR(100) PRIMARY KEY,/*主键*/ `count` INT,/*数量*/ subtotal DECIMAL(10,0),/*小计*/ oid VARCHAR(100),/*所属订单*/ bid VARCHAR(100)/*订单项所指的商品 FOREIGN KEY (oid) REFERENCES orders (oid),建立主外键关系 FOREIGN KEY (bid) REFERENCES book (bid)建立主外键关系*/ );
订单模块 1 生成订单 2 订单结算
后台功能
商品管理 1 查询所有的商品 2 添加商品(上传是商品图片) 3 修改商品 4 删除商品 5 多条件查询商品
订单管理 1 查询所有用户订单 2 根据条件查询订单
网上商城的技术的选择
技术的选择 Jsp Servlet Dbutils C3P0 Javabean JSTL EL 表达式 Mysql 数据库
已结束*/ uid VARCHAR(100),/*订单的所属的用户*/ address VARCHAR(200),/*订单的收货地址*/ FOREIGN KEY (uid) REFERENCES user(uid)/*建立主外键关系*/
);
4 创建订单项表(图书和订单关系) orderItem CREATE TABLE orderitem (
5 动态代理
6 类加载器 引导、扩展、应用
今天内容介绍
1 软件开发流程 2 案例页面的切分 3 案例功能模块的划分 4 数据库设计和技术的选择 5 案例环境的搭建 6 实现基本的功能
软件开发流程(了解)
软件需求的分析 软件要做什么功能 软件页面原型设计 把实现功能画出功能图 把原型转换成静态页面 把功能图转换成 html 页面 数据库设计和技术选型 系统的编码 系统的测试 系统的部署和维护
3 创建订单表 orders 用户和订单的关系 一对多关系
CREATE TABLE orders ( oid VARCHAR(100) PRIMARY KEY,/*主键*/ ordertime DATETIME,/*订单生成时间*/ total DECIMAL(10,0),/*订单合计*/ state SMALLINT(1),/*订单状态:未付款、已付款但未发货、已发货但未确认收货、收货
第五 在 service 里面创建登录的方法,在登录方法中调用 dao 里面的方法
第六 创建 dao 接口和实现类,在实现类实现查询的方法
第七 在 servlet 根据返回 user 对象判断
完善的地方 1 表单校验
Submit 提交表单时候,onsubmit 事件 onsubmit=”return checkUser();” Js 判断用户名不为空 document.getElementById(“id 值“); 2 提交中文数据的乱码 Request.setCharacterEncoding(“utf-8”) 3 传递错误信息到登录页面
用户注册功能
最终目的:向 user 表里面添加一条记录
实现的步骤 第一步 创建注册页面,写表单,输入用户的信息,提交到 servlet 中 第二步 创建 servlet,在 servlet 获取表单提交的数据,封装到 javabean 中,调用 service 里 面的方法实现操作
第三步 在 service 里面调用 dao 里面的方法,在 dao 里面真正实现插入的操作
不能添加相同名称的用户 在 servlet 里面得到输入的用户名,到数据库里面查询,如果能查出数据说明有相同的用户, 不进行添加
用户退出功能
最终目的:销毁 session 销毁 session 有三种方式,一般都使用调用方法
用户信息修改功能
第一 点击用户显示名称,到用户信息页面 第二 点击用户信息修改时候,在页面中显示当前登录用户的信息 第三 在修改用户信息页面,输入新的密码和电话,提交表单,
修改用户根据用户 id 修改,把当前用户的 uid 放到隐藏项里面
第四 提交表单到 servlet 中,在 servlet 获取值,调用方法实现修改
网上商城图书模块 显示所有图书功能
第一 点击 全部商品 在页面中显示所有的商品 第二 创建 servlet,在 servlet 实现操作,直接调用 service 里面的方法,返回 List 集合, List<Book>
订单和图书的关系是 多对多关系 一个订单里面可以有多本图书,一本图书可以属于多个订单
表之间的关系
1 一对多 一个部门里面有多个员工,一个员工只能属于一个部门 建表原则:在多的那一方创建外键,指向一的主键
2 多对多 一个学生可以选择多门课程,一门课程可以被多个学生选择 建表原则:创建第三张表,写两个外键,分别指向两个表主键
黑马程序员JAVA综合案例第22天课程笔记