客户管理系统
先写原型:只有页面,并没有实际的功能;
功能分析:
添加客户;查询;编辑;删除;多条件组合查询;
创建表
创建包:公司名.项目名.分层
com.haut.damain
com.haut.Dao
com.haut.service
com.haut.servlet
程序流程:
例如删除功能:
从主页面点击链接—>到Servlet中,直接找到delete方法(1 获取参数id,2传递cid给service的方法完成删除,3 保存成功信息到request,4转发到msg.jsp显示成功页面)à到service中(调用Dao中的方法)->到Dao中(执行) 最后Servlet将成功信息传递到msg.jsp页面。
多条件组合查询:
Query.jsp—>到Servlet中找到query方法(1 封装表单数据(表单传递过来的几个参数) 2 调用service方法,返回查询结果集,3保存到request 4 转发到页面中)àservice(调用Dao中的方法)àDao(query(){查询,返回结果list给service})
在Dao中最重要的是SQL语句的编写:
StringBuilder sql = new StringBuilder(select * from stu where 1=1);
List
String name=stu.getName();
If(name!=null&&!name.trim().isEmpty()){
Sql.append(“add name like ?”); param.add(“%” + name +”%”);}
String gender = stu.getGender();
If(gender!=null&&gender.trim().isEmpty()){
Sql.append(“add name like ?”);param.add(“%” + gender+”%”);
}……
执行: return qr.query(sql.toString,newBeanListHandler
Param.toString));
1 分页的优点:只查询一页,
2 分页的数据:页面的数据都是Servlet传过来的
Servlet:当前页:pageCode,pc
总页数:totalPages,tp 总记录数(dao获取)/每页的记录数
当前页数据:beanList
数据的传递:
把分页的数据封装到Javabean中;
数据有:当前页码,总页数(不需要定义这个变量,只需要定义这个get 方法,),总记录数,每页记录数,当前页记录(
List
分页在各层中的处理:
页面:给出分页相关的链接。
Servlet:创建pageBean对象,给所有数据赋值然后传递给页面
Service:
Dao:查询记录数据
行数:select count(*) t 表名
记录数:select * from 表名 limit x,y(第x行开始,一共y 行)
三大组件:Servlet Listener(监听器) filter
Listener:是一个接口,内容有我们来实现,他需要注册,例如注册在按钮上,监听器中的方法,会在特殊事件发生时被调用。
观察者模式:
JavaWeb中的监听器:
事件源:三大域
1 ServletContext
声明周期监听:ServletContextListener接口:他有两个方法,一个出生命时调用,
contextDestroyed(ServletContextEvent sce)
一个结束时调用。
contextInitialized(ServletContextEvent sce)
属性监听:ServletConnectionAttributeListener他有三个方法,一个在添加属性是调用,attributeAdded(ServletContextAttributeEventscab)
一个在死亡时调用,
一个在移除是调attributeRemoved(ServletContextAttributeEventscab)
最后一个是在替换属性是调用。
attributeReplaced(ServletContextAttributeEvent scab)
2 HTTPSession
声明周期监听:HttpSessionListener:他有两个方法,一个出生时调用,一个结束时调用。
属性监听:HTTPSessionAttributeListener他有三个方法,一个在添加属性是调用,一个在死亡时调用,一个在替换是调用,最后一个是在移除属性是调用。
3 ServletRequest
生命周期监听:ServletRequestListener:他有两个方法,一个出生时调用,一个结束时调用。
属性监听:ServletRequestListener他有三个方法,一个在添加属性是调用,一个在死亡时调用,一个在替换是调用,最后一个是在移除属性是调用。
写一个监听器,就必须要去实现某个监听器接口;
注册,在web.xml中配置完成注册
事件对象:八大监听器
ServletContextEvent:ServletContext getservletConnection()
HttpSessionEvent: HttpSession getSession()
ServletRequest:
ServletContextgetServletContext()
ServletRequest getServletRequest()
ServletContextAttributeEven:
HTTPSessionBinding:
ServletRequestAttributeEven:
感知监听:
他用来添加到Javabean,而不是添加到三大域上
这两个监听器都不需要在web.xml中注册
HTTPSessionBindingListener:添加到Javabean上,Javabean就知道自己是否添加到session中了。
国际化
资源文件命名:基本名+locale部分+.properties
例如:stu_zh_CN.properties,其中基本名是stu,而zh_CH是Locale部分,必须所有的资源文件基本名相同。