/*
*主键id如果是varchar类型时,怎样保证唯一?
*使用UUID工具类来完成
*完成页面上全选 与全不选操作
function change()
{
//1.得到id为main的这个checkbox
var main=document.getElementById("main");
var flag=main.checked;
//2.得到所有name=ck的checkbox
var cks=document.getElementsByName("ck");
//3.将cks中所有的checkbox的checked值设置为flag
for(var i=0;i
*问题: select的名称叫什么?每一个option的值是什么?
select可以任意起名.
option的value名称需要与customer表中的字段名称对应.
因为在后端使用request.getParameter("select的名字")获取到的值就是选中的详细的值
*创建CustomerSimpleSelectServlet完成条件查询
*注意sql语句问题:
String sql="select * from customer where "+field+" like ?";
字段名称不能使用占位符,再去添加参数,
因为只要是占位符的地方,就会默认用''引起来,而字段名在sql语句中是不能使用单引号引起来的。
所以,在拼接sql语句的时候要注意
*分页:
*将数据以多页的形式去展示,使用分页可以提高客户的感受
*分类
*物理分页:在sql查询时,只从数据库中查询出当前页的数据
*优:不占用太多内存
*缺:效率较低
java开发领域一般使用物理分页,因为java一般用于处理大数据的
*实现:
*直接使用jdbc完成
*使用滚动结果集
*优:跨数据库
*缺:性能低
*使用数据库本身提供的分页操作
*使用每一个数据库特定的分页函数
*优:性能高
*缺:不跨数据库
mysql:limit
sqlserver:top
oracle:rownum
*逻辑分页:在sql查询时,将所有数据查询出来,存储到内存中,
要想展示当前页数据,直接从内存中获取
*优:效率高
*缺:占用内存高
*使用数据库本身提供的分页操作
*limit
select * from 表名 limit m,n;
m:代表从第几条记录开始,(下标从0开始)
n:代表查询的记录数
eg:分页查询,每页显示6条,要查询第5页的数据
select * from 表名 limit (5-1)*6,6;
select * from 表名 limit (页码-1)*没页条数,每页条数;
*设定每页显示条数
*在showCustomerByPage.jsp页面上添加一个
function changeCurrentPage(value)
{
location.href="/day20_1/findAllByPage?currentPage="+value;
};
*只做上面的操作,点击上一页等曹组之后,显示的条数又变回选择前了?怎样解决呢?
*其实就是在首页,上一页,下一页,尾页的连接上把每页显示条数作为参数传会后端进行处理
例如:
首页
*页码显示:
*
// 从1开始 到总页数 当前页数 每次增加1
${n}
*此处的页码显示,也做和之前选上下一页一样的操作,用jstl标签判断一下,如果显示到当前页
就把当前的页码变成其他颜色或者变成非超链接标签
*页码数较多的时候,限定页码数。
但是在jsp页面代码很麻烦,就使用自定义标签来完成
但是,我觉得自定义标签更麻烦,哈哈哈。。。。。
*Listener监听器
*事件 ActionEvent
*事件源 JButton
*监听器 ActionListener
*注册监听 addActionListener
*监听器:可以监听某一个事物在执行特定操作时,可以触发另一个操作
可以在满足特定的条件下执行一段操作
*Javaweb中有什么监听器?
*javaweb中的servlet规范中,定义了三种技术:servlet,listener,filter
*作用:监听web对象(request[HttpServletRequest],session[HttpSession],application[ServletContext])的三种操作
*对此的创建与销毁
*HttpServletRequest 对应监听器 ServletRequestListener
*HttpSession 对应监听器 HttpSessionListener
*ServletContext 对应监听器 ServletContextListener
*application对象什么时候创建,什么时候销毁
*服务器启动时创建,服务器关闭时销毁
*session对象什么时候创建,什么时候销毁
*创建
*request.getSession():用于获取session,是否创建分以下几种情况:
*如果请求中没有sessionid,那么就创建session
*如果请求头中有sessionid,
*如果在服务器端,有一个sessionid与其相同,则直接使用,不创建
*如果在服务器端没有这个sessionid,则创建
*销毁
*默认超时,30分钟
*设置session超时时间
setMaxInactiveInterval(int interval)
*invalidate()手动销毁
*关闭服务器
*request对象什么时候创建,什么时候销毁
*创建:请求发生时
*销毁:响应产生时
*对象属性的变化
*HttpServletRequest 对应监听器 ServletRequestAttributeListener
*HttpSession 对应监听器 HttpSessionAttributeListener
*ServletContext 对应监听器 ServletContextAttributeListener
*在监听器中是否可以获取属性的值呢?
*常识:在java监听机制中,是可以获取事件源的
*ActionEvent.getSource()可以获取事件源
*在Javaweb中也一样,事件对象可以直接获取事件源
在开发中如果用到了时间触发机制,一般情况下,都可以使用方法的参数来获取想要的信息
*监听器的作用:主流开发中一般不用,监听器一般用于统计性能等信息
*session绑定javabean
*HttpSessionBindingListener
*这个监听器可以让javabean对象,感知它被绑定到session中或从session中移除
*HttpSessionActivationListener
*这个监听器可以让javabean感知,被钝化或活化
*钝化:将session中的javabean保存到文件中
*活化:从文件中将javabean直接获取
*需要创建一个配置文件 context.xml
*文件防止在META-INF目录下
*这两个监听器的特点
*有javabean实现
*不需要在web.xml中配置
**javabean还有一个特点:必须序列化,实现serializable接口。恩,上次遇到这个问题了,实现这个接口就好了,但是忘了问题是啥子了。。。
*创建监听器的步骤
*创建一个类实现指定的监听器
*重写接口中的方法
*在web.xml文件中配置注册监听
监听器类对象的全类名
*案例:扫描程序中的session,如果session在指定时间内没有使用,则对其进行人为销毁,为了释放内存
*怎样标识session多长时间没有使用呢?
当前时间-最后使用的时间(getLastAccessedTime())
*什么时候开始扫描,扫描多长时间
*Timer
*步骤:
*得到所有session,存入集合中
*一个程序中的session,应该全部存在于一个集合中,所以集合应该是在程序启动时创建一个
所以集合对象应该在程序一启动时就创建在servletContext对象中,所以就在对应的监听器中,对象建立时,创建一个集合存入域中
*定时扫描:时间到了,不仅仅是销毁session,还要从集合中移除session
*操作集合时,因为代码是多线程的,考虑到线程安全问题,使用Collections.synchronizedList(new ArrayList<>());
变成一个线程安全的集合
遍历集合时,考虑到并发的问题,也应该使用迭代器使得线程安全
*/
监听器了解,真正开发用不到,但是也要知道。