学到这里,差不多,可以自主完成一个简单的系统了。所以接下来需要总结,然后设计一个简单的系统。分别使用Java和Java Web来实现。(目标:实现简单的购物系统)
要求:能注册,并登录。登录成功,转到商品信息页面。在添加一个商品查询功能,和购物车功能,可以实现添加商品到购物车,以及删除商品。
参考《Java2 实用教程 》书本P348,先把这个例子的UML图画好。
思路分析:
1.数据模型:只存放数据,提供设置数据和获取数据的方法。
注册模型:存放注册需要的,账号,密码,姓名,性别。
登录模型:存放登录需要的,账号,密码,是否登录成功的数据。
2.数据处理:
注册处理:连接数据库,将数据库内容写入注册模型。
登录处理:连接数据库,查询数据库内容的注册模型是否有该数据。
进行测试。
3.功能分析:
登录成功则显示顾客姓名。(跳转页面)
2.UML图设计:
注册模型(Login.java):account:String 、password:String 、sex:、
登录模型(Register.java):account:String 、password:String
注册处理(HandleRegister):writeRegister(Register ):void
登录处理(HandleLogin):queryLogin(Login ):Login
测试页面(ceshi):main():void
功能页面(Showname):main():void
3.代码分析:
1.遗忘插入语句的使用:
insert into 表 values();
2.在rs.next()语句里面,忘记如何输出数据库的内容。
使用rs.getString("name") //注意这个括号里面表示的是数据库里面的varchar。必须加“”。有些表示是string类型的不用加双引号。
比如:conn.statement(sql); //sql也是一个string类型,它不用再额外加双引号。但上面需要
3.预处理语句结合通配符的使用:
一开始看书,我是这样写的:name like '%?%' ;
第一次出现的错误是,问号用成中文符号。(×)
第二次出现的错误是:不能这样'%?%' 。因为如果用%%来表示,它匹配的是单个字符,而不是字符串里面的字符。
正确用法:name like ? ;
stat.setString(1,"%"+name+"%"); //把通配符放到外面。
1.beans(Vo类)负责封装数据。:Login、Register
2.Dao类负责连接数据库。
3.Servlet类负责处理数据。接收来自jsp的数据。返回数据给jsp。
补充知识点:
可以不用servlet类,jsp可以直接获取Dao类的数据。(将Dao类变成一个集合类型)
如果使用servlet类的方法。我们来看看到底怎么使用:
基本用法:
添加元素:session.setAttribute("名字",Object); //String类型的名字不能相同。
但是Object可以是一个集合。这是使用session的关键!!!
存:session.setAttribute("名字",Object);
ArrayList 对象 = new ArrayList();
对象.add(String ); //请牢记!!!
session.setAttribute("名字",Object);//最后可以通过Object添加到session里面。
取:session.getAttribute("名字");
ArrayList 对象 = (ArrayList)session.getAttribute("名字");
for(int i=0;i<对象.seze();i++){
String 子对象 = (String)对象.get(i);
out.println(子对象)
}
小结:session存的方法放在后面。取的方法放在前面。
代码分析:
主要错误在Servlet的用法上,建议在学一遍Servlet的方法,然后再去构建错误点。
1.遗忘购物车的用法。(看前面的存和取的方法)
2.遗忘跳转链接的用法:
response.sendRedirect(url);
3.使用request.getParameter(“”)的方法如果没有得到数据。有可能的原因是需要重新部署。因为如果是这个里面的字符写错的原因。字节码是不会发生改变的。
4.在类的方法里面定义的属性需要重新赋值,比如赋值null。但是如果你把这个属性放在类之下,方法之外,相当于全局变量。它就不需要赋值。
1.功能分析没分析好,应该在划分一个叫做查询功能的jsp。
(为什么你会觉得,要把查询功能放在login的下方?。用session就可以做到吗?习惯问题,以为这是一个类一样。定义一个类就是一个方法。但这里不太一样。你要想查询功能会用到哪些组件。很明显会用到提交按钮。你觉得一个<%%>表达式可以实现吗?)
(下次注意,如果你要实现登录成功才能进入到查询功能的话,而查询功能的语法是html,那么就需要在创建一个jsp)
2.同理,在jsp里面,既然创建了query的功能,那么应该也要对应一个查询功能的servlet程序。而不是在registerservlet里面放查询模块。
5.students.add()方法。有两个易错点。第一个是students类型的错误。它的类型必须是ArrayList。不是泛型。如果写成泛型。那么add括号里面就不能是对象。
第二个错误是student对象的错误。括号里面只能写对象。不能写其它的。这样才会得到每遍历一次获得一个集合空间。
第三个错误是它所在的循环rs.next。只能用while循环。因为是模糊查询。可能有多个符合条件的集合。
6.卡住点:Register类型,它本身是一个集合。可以直接输出。将它看作一种集合类型去使用。于是可以在jsp里面,将从session取出来的数据赋给Register的对象。但前提是,赋予方也必须是一个单集合。(去看‘取’和‘存’的用法。)