JAVA基础之JDBC开发、JSTL语法、EL表达式与数据分页
一、直接使用JDBC开发的问题
1.当表中的列很多时,需要写很长的SQL语句
还需要写大量 setXXX()
设置参数语句
读取数据时还需要写大量setXXXX()设置属性语句
2.非常容易出错,而且不方便修改
如:某个字段需要去掉,就需要调整后续序号
大量时间都花在“搬砖”上面
而且很容易埋下bug,后期测试和修复时间大大增加!!!
3.效率很差,质量不高
解决方法:将容易出错,大量繁琐的代码封装起来。
给程序员提供更加高级API(Application Programming Interface)
一套完整的,能够解决某个方面问题的API,可以称为框架(framework)、库(library)
二、关于JSTL部门语法
<c:forTokens items =”字符串列表” delims=”字符串中的分隔符” var = “变量名”
varStatus =”迭代状态数据对象名”>
${s.index} 索引(从0开始)
${s.count} 序号(从1开始)
${s.current} 当前值 与var相等
${s.first} 布尔值 是否是第一项
${s.last} 布尔值 是否是最后一项
</c:forTokens>
varStatus 这个属性在<c:forEach>中也存在
JSTL的下拉列表、单选框、复选框的选中问题
<select>
<option value=”3” ${变量==
值?”selected”:””}>要选中的项</option>
<option value=”3” ${变量 eq值?”selected”:””}>要选中的项</option>
<input type=”radio” value=”3” ${变量==值?”checked”:””}>要选中的项
</select>
三、关于Getter/Setter方法
如果属性以is开头,Eclipse生成的getter/setter如下
getter: isXXX
setter : isXXX
举例:isMale、isAdmin
isMale()、setMale()、isAdmin()、setAdmin()
使用EL表达式时,应该写成
${obj.male} ${obj.admin}
四、EL表达式
1、语法结构
${expression}
2、[ ]与.运算符
EL 提供“.“和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如 .
或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:
${ user. My-Name}应当改为${user["My-Name"]}
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
${sessionScope.user[data]}中data是一个变量
3、变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
五、数据分页
数据分页的必要性
1.一次性把所有数据(如果很多的话)从数据库中查出来回给数据带来很大的IO开销,而IO是最慢的操作,结果是数据库并发了大大降低!
2.一次性把大量的数据从数据库传到应用服务器,再从应用服务器传到用户浏览器会大大占用服务器宝贵的带宽资源,导致服务器能够处理请求大大减少!
3.查询和传送大量数据需要时间必然很长,结果导致页面反应速度变慢
用户体验变差
4.人类可读的数据不超过几十条,传送成百上千条数据没有意义
分页数据的查询
pageNo 页码(从1开始)
pageSize 每页条数(默认10条)
能够计算出来任意pageNo对应的数据的起始索引位置
start =(pageNo-1)*pageSize -----起始索引位置
count = pageSize -----数据条数
MySQL数据库的Limit子句:
Limit start,count
示例:含义是从role这个表中取从索引为0开始的6条数据
六、Pager类的设计
1. Pager类的职责: 根据pageNo、total、pageSize、showPageNos计算pageCount、start、end
这些数据用来支持在页面上显示分页信息和页码:
如下所示:
页/共13页
1 2 4 5 6 7 8 9
2.区分哪些数据时传过来的,哪些数据是算出来的
将传过来的数据当做构造方法的参数
根据参数的变化频率调整参数的位置(Eclipse重构功能支持)
将变化频率高的参数放在前面,同时增加构造方法重载,对变化频率低的设置默认值
3.内部类
如果需要把多个类定义在一个文件中,尤其是这些类都需要public的时候,可以把一个类作为主类,其他类定义在它的内部
------内部类
4.自定义异常类
如果希望通过自定义异常向外部提示错误,则需要让自定义异常类从Throwable继承
自定义异常类从Throwable继承或从Throwable的子类继承
常用的子类有Exception、RuntimeException
从Exception继承类是受查异常,必须try/catch或throws
从RuntimeException继承的是非受查异常,不必显式地try/catch或throws
编程时更加自由
使用throw抛出异常
JAVA基础之JDBC开发、JSTL语法、EL表达式与数据分页的更多相关文章
- java基础(11) -JDBC
java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...
- 【转】JSP中的JSTL与EL表达式用法及区别
对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念JSTL一般要配合EL ...
- jsp中的JSTL与EL表达式用法及区别
对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念 JSTL一般要配合E ...
- jstl,el表达式
在上一篇中,我们写了将数据传到jsp页面,在jsp页面进行展示数组,但是我们发现,在jsp页面写代码是一件很烦的事,一个循环要拆成两部分,例如for循环,在例如if语句: <%int a=22; ...
- JSTL与EL表达式(为空判断)
JSTL与EL表达式(为空判断) 一.循环遍历集合 1.在jsp中引入标准函数声明 <%@ taglib uri="http://java.sun.com/jsp/jstl/cor ...
- EL表达式获取数据
EL 全名为Expression Language. EL主要作用 获取数据: •EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.(某个web域 ...
- EL表达式读取数据(在Map,javaBean,List)
<%@page import="cn.hncu.domain.User"%><!--这里是进行导包--><%@ page language=" ...
- 一、jsp和Servlet基础理论及jstl和EL表达式用法
1.题外话:使用JSP有近一年半的时间了,但是开发量不大.昨天部门突然让做个读取EXCLE文件,然后在前台页面进行展示.并通过点击查看按钮可以对每条明细记录进行跳转后进行详情查看,并按照页面原型进行页 ...
- Java基础一(开发环境、注释、关键字、标识符、数据)
1.Java开发环境搭建2.HelloWorld案例3.注释.关键字.标识符4.数据(数据类型.常量) ###01java语言概述 * A: java语言概述 * a: Java是sun公司开发的一门 ...
随机推荐
- Atitit.软件仪表盘(0)--软件的子系统体系说明
Atitit.软件仪表盘(0)--软件的子系统体系说明 1. 温度检测报警子系统 2. Os子系统 3. Vm子系统 4. Platform,业务系统子系统 5. Db数据库子系统 6. 通讯子系统 ...
- CM本地Yum源的搭建
CM本地Yum源的搭建 以本地yum源安装CM5为例,解释本地yum源的安装和利用本地yum源安装CM5. Cloudera Manager 5(以下简称CM)默认采用在线安装的方式,给不能联互联网或 ...
- jquery 怎么触发select的change事件
可以使用jQuery的trigger() 方法来响应事件 定义和用法 trigger() 方法触发被选元素的指定事件类型. 语法 $(selector).trigger(event,[param1,p ...
- a标签去掉下划线
转载自:http://jingyan.baidu.com/article/a17d52853095838099c8f24e.html <a>是默认有下划线的.所以有时候为了美观,我们需要去 ...
- php服务器环境变量
可以把一些配置写到apache或nginx的配置里,然后在代码里判断环境变量来实现开发环境和线上环境的切换. 比如在本地可以 SetEnv APP_ENV local线上则 SetEnv APP_EN ...
- [开机启动]Linux开机自启和运行级别
嵌入式系统中程序自启动方法 在很多嵌入式系统中,由于可用资源较少,常常在系统启动后就直接让应用程序自动启动,以减少用户操作和节省资源.如何让自己的应用程序自动启动呢? 在Linux系统中,配置应 ...
- Memcache内存分配策略
一.Memcache内存分配机制 关于这个机制网上有很多解释的,我个人的总结如下. Page为内存分配的最小单位. Memcached的内存分配以page为单位,默认情况下一个page是1M,可以通过 ...
- "crsctl check crs" command hangs at EVMD check
Pre-11gR2: "crsctl check crs" command hangs at EVMD check (文档 ID 1578875.1) APPLIES TO: ...
- etl工具,kettle实现循环
Kettle是一款国外开源的ETL工具,纯Java编写,可以在Window.Linux.Unix上运行,绿色无需安装,数据抽取高效稳定. 业务模型: 在关系型数据库中有张很大的数据存储表,被设计成奇偶 ...
- opencv 摄像头人脸检测
PYTHON ubuntu16.04 默认安装的Python版本2.7.12,当用pip install opencv-python 安装了opencv for python 3.3.0.10后,运行 ...