项目实例:

客户管理系统

先写原型:只有页面,并没有实际的功能;

功能分析:

添加客户;查询;编辑;删除;多条件组合查询;

创建表

创建包:公司名.项目名.分层

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<Objece>  param = newarrayList<Object>;
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<Stu>(stu.class)
Param.toString));

分页显示:

1 分页的优点:只查询一页,

2 分页的数据:页面的数据都是Servlet传过来的

Servlet:当前页:pageCode,pc

        总页数:totalPages,tp 总记录数(dao获取)/每页的记录数

        当前页数据:beanList

数据的传递:

把分页的数据封装到Javabean中;

数据有:当前页码,总页数(不需要定义这个变量,只需要定义这个get 方法,),总记录数,每页记录数,当前页记录(

List<T> beanList)

分页在各层中的处理:

页面:给出分页相关的链接。

Servlet:创建pageBean对象,给所有数据赋值然后传递给页面

Service:

Dao:查询记录数据

行数:select count(*)  t  表名

记录数:select * from 表名 limit x,y(第x行开始,一共y 行)

JavaWeb监听器

三大组件: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他有三个方法,一个在添加属性是调用,一个在死亡时调用,一个在替换是调用,最后一个是在移除属性是调用。

Javaweb中,完成编写监听器

写一个监听器,就必须要去实现某个监听器接口;

注册,在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部分,必须所有的资源文件基本名相同。