Jsp页面分页技术实现文档
来源:互联网 发布:windows是什么系统 编辑:程序博客网 时间:2024/05/18 16:18
Jsp页面分页技术实现文档
<1>分页的设计思路:
1.1:在jsp中直接分页
这种分页方法将分页代码统一编写在jsp中,开发比较简单,但是在页面比较多的时候维护起来比较麻烦复杂。
1.2:在Servlet中实现分页
这种方法采用JSP+Servlet进行开发,页面显示代码与控制代码分离。
1.3:在JavaBean中实现分页
这种方法采用JSP+JavaBean进行开发,页面显示代码与业务逻辑代码相分离。
1.4:万能分页技术
一般分页时需要考虑具体的数据表的读写以及显示,采用万能分页技术,则可以对任意的表(或者任意查询SQL)进行分页。
1.5:结合不同是数据库实现方式,上述4中方法都是基于ResultSet里的数据来进行分页,存在性能和资源占用等问题,结合不同数据库的特点和功能,设计出性能优良好占用资源较少的分页程序。
第一种分页
1.1:在jsp中直接分页(代码)
Page.jsp
<%@ pagecontentType="text/html;charset=UTF-8"%>
<%
java.sql.Connection sqlCon; //数据库连接对象
java.sql.Statement sqlStmt; //SQL语句对象
java.sql.ResultSet sqlRst; //结果集对象
java.lang.String strCon; //数据库连接字符串
java.lang.String strSQL; //SQL语句
int intPageSize; //一页显示的记录数
int intRowCount; //记录总数
int intPageCount; //总页数
int intPage; //待显示页码
java.lang.String strPage;
int i;
//设置一页显示的记录数
intPageSize = 10;
//取得待显示页码
strPage = request.getParameter("page");
if(strPage==null){
//表明在QueryString中没有page这一个参数,此时显示第一页数据
intPage = 1;
} else {
//将字符串转换成整型
intPage =java.lang.Integer.parseInt(strPage);
if(intPage<1) intPage = 1;
}
//装载JDBC驱动程序
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String username = "sa"; //用户名
String password = "ambow"; //密码
String url="jdbc:sqlserver://localhost:1433;databaseName=ambow";
//连接数据库
sqlCon=java.sql.DriverManager.getConnection(url,username,password);
//创建语句对象
sqlStmt =sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
//创建查询语句
strSQL = "select * from userinfo";
//执行SQL语句并获取结果集
sqlRst = sqlStmt.executeQuery(strSQL);
//获取记录总数
sqlRst.last();
intRowCount = sqlRst.getRow();
//记算总页数
intPageCount = (intRowCount+intPageSize-1) /intPageSize;
//调整待显示的页码
if(intPage>intPageCount) intPage = intPageCount;
%>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>数据分页显示</title>
</head>
<body>
<center><tableborder=1 cellspacing=0 cellpadding=0>
<tr>
<tdalign=centerwidth=100% colspan=5 bgcolor=#3399ff>
<fontcolor=#ffffff>成员列表</font>
</td>
</tr>
<tr>
<th>登录名称</th>
<th>登录密码</th>
<th>电子邮件</th>
</tr>
<% if(intPageCount>0) {
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage-1)* intPageSize + 1);
//显示数据
i = 0;
while(i<intPageSize &&!sqlRst.isAfterLast()){
%>
<tr>
<td><%= sqlRst.getString(2) %> </td>
<td><%= sqlRst.getString(3) %> </td>
<td><%= sqlRst.getString(4) %> </td>
</tr>
<% sqlRst.next();
i++;
}
}
%>
</table></center><br>
<center>
第<%=intPage%>页 共<%=intPageCount%>页
<% //以下是分页的“上一页”“下一页”,有上一页就有链接,没有就为文字,下一页同理%>
<% if(intPage>1){%>
<ahref="page.jsp?page=<%=intPage-1%>">上一页</a>
<% }else{%>
上一页
<%}%>
<% if(intPage<intPageCount){%>
<ahref="page.jsp?page=<%=intPage+1%>">下一页</a>
<% }else{%>
下一页
<%}%>
<center>
</body>
</html>
<%
//关闭结果集
sqlRst.close();
//关闭SQL语句对象
sqlStmt.close();
//关闭数据库
sqlCon.close();
%>
结论:
1.优点:直观,易于理解,并且比较灵活
2.缺点:这种方式只适合对单一的或极少量的结果集进行分析,实现代码不能够被重用,不适合用于实现数据量大、数据表多的结果集的分页显示。
第二种分页技术
1.2:在Servlet中实现分页
1.JSP当中调用
<%@ pagecontentType="text/html;charset=UTF-8"%>
<%@ pagepageEncoding="UTF-8"%>
<%@ pagelanguage="java"%>
<%@ pageimport="java.util.Collection,java.util.Iterator"%>
<%@ pageimport="com.ambow.xmk.page.DBConn.DB_Conn"%>
<%@ pageimport="com.ambow.xmk.page.Entity.DB_User"%>
<%@ pageimport="com.ambow.xmk.page.Entity.User"%>
<tablealign=centerborder=0 width=100% cellspacing=1 cellpadding=1>
<tr>
<tdwidth=100% colspan=5 bgcolor=#3399ff>
<center><fontcolor=#ffffff>成员列表</font></center>
</td>
</tr>
<tr>
<tdwidth=10% bgcolor=#fcfcfc>用户名</td>
<tdwidth=10% bgcolor=#fcfcfc>登录密码</td>
<tdwidth=15% bgcolor=#fcfcfc>邮件地址</td>
</tr>
<%
if (request.getAttribute("c") ==null) {
%>
<tr>
<tdwidth= 75% colspan=5 bgcolor=#fcfcfcalign=center>没有用户数据!</td>
</tr>
<%
} else {
Collection c = (Collection) request.getAttribute("c");
if (c ==null) {
%>
<tr>
<tdwidth=100% colspan=5 bgcolor=#fcfcfcalign=center>没有用户数据!</td>
</tr>
<%
} else {
int totalPageNum =((Integer) (request.getAttribute("totalPageNum"))).intValue();
int currentPage = 1;
if(request.getParameter("page") !=null) {
currentPage =Integer.parseInt(request.getParameter("page"));
}
//输出用户数据
Iterator iterator =c.iterator();
while(iterator.hasNext()) {
User user = (User) iterator.next();
%>
<tr>
<tdwidth=10% bgcolor=#fcfcfc><%=user.getUsername()%></a></td>
<tdwidth=15% bgcolor=#fcfcfc><%=user.getPassword()%></td>
<tdwidth=15% bgcolor=#fcfcfc><%=user.getEmail()%></td>
</tr>
<%}%>
<formname="list" action="./UserListServlet"method="post">
<tr>
<tdwidth=100% colspan=5 align=rightbgcolor=#efefef>
<%for (int i = 1; i <= totalPageNum; i++) {%>
<ahref="UserListServlet?page=<%=i%>">[<%=i%>]</a>
<% } %>共[<%=request.getAttribute("totalPageNum")%>]页
<inputtype="text"size="2"name="page"value="">
<inputtype="submit"name="go"value="Go">
</td>
</tr>
</form>
<%}
}
%>
<tr>
<tdcolspan=2 align=right> </td>
</tr>
</table>
2.JAVA类:从数据库中调用数据,根据不同的DB来选定不同的分页函数来分页
public class DB_User {
DB_Conn db_conn=new DB_Conn();
//获得用户数量
public int getCount() {
db_conn.ConnectDB();
ResultSet rs = null;
try {
String sql = "selectcount(id) from userinfo";
rs = db_conn.sm.executeQuery(sql); //执行sql语句
if (rs.next()) {
return rs.getInt(1);
}
return 0;
} catch (SQLException SqlE) {
SqlE.printStackTrace();
return 0;
} catch (Exception E) {
E.printStackTrace();
return 0;
} finally {
// 关闭连接,释放数据库资源:
db_conn.CloseDB();
}
}
//
public Collection getAll(int pagesize,int page) {
db_conn.ConnectDB();
ResultSet rs = null;
try {
// sql语句:
int startCursor=(page - 1) *pagesize+1;
int endCursor=(page - 1) *pagesize+pagesize;
System.out.println("start:"+startCursor);
System.out.println("end:"+endCursor);
String sql = "SELECT* FROM (select *,ROW_NUMBER() Over(order by id) as rowNum from (select * fromuserinfo) as resultTable) as unionTable where rowNum between "+startCursor+" and"+endCursor;
// 执行sql语句,返回一个记录集到rs:
rs=db_conn.sm.executeQuery(sql);
Collection c = new ArrayList();
User user = null;
while (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("UserName"));
user.setPassword(rs.getString("password"));
user.setEmail(rs.getString("Email"));
user.setRealname(rs.getString("RealName"));
user.setGender(rs.getInt("Gender"));
user.setQuestion(rs.getString("Question"));
user.setAnswer(rs.getString("Answer"));
user.setPhone(rs.getString("Phone"));
user.setPage(rs.getString("page"));
user.setHobbies(rs.getString("Hobbies"));
user.setSelfintro(rs.getString("Selfintro"));
c.add(user);
user = null;
}
return c;
} catch (SQLException SqlE) {
SqlE.printStackTrace();
return null;
} catch (Exception E) {
E.printStackTrace();
return null;
} finally {
// 关闭连接,释放数据库资源:
db_conn.CloseDB();
}
}
3.在Servlet中怎么样去控制
public class UserListServlet extends HttpServletimplements Servlet {
public UserListServlet() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
int pagesize = 5;
String page = request.getParameter("page");
DB_User dbuser = new DB_User();
int count = dbuser.getCount();// 记录总数
int totalPageNum = count / pagesize;// 计算总页数
// 如果纪录总数除以每页的显示个数,余数大于0,那么
// 总页数应该为商+1
if ((count % pagesize) > 0) {
totalPageNum += 1;
}
if (page ==null) {
page = "1";
}
request.setAttribute("totalPageNum",new Integer(totalPageNum));
Collection c = dbuser.getAll(pagesize, Integer.parseInt(page));
request.setAttribute("c", c);
try {
request.getRequestDispatcher("userlist.jsp").forward(request,
response);
}
catch (Throwable t) {
getServletContext().log(t.getMessage());
}
第三种是通过JavaBean来进行分页
1.建一个Java类
public class Page
{
//获得查询返回结果集
public Vector getResultSet()
{
DB_Conn db_conn=new DB_Conn();
ResultSet rs=null;
try
{
db_conn.ConnectDB();
String sql="select *from goods";
rs=db_conn.sm.executeQuery(sql);
Vector vector=new Vector();
while(rs.next())
{
Goods goods=new Goods();
goods.setGoods_id(rs.getInt("goods_id"));
goods.setGoods_name(rs.getString("goods_name"));
goods.setTypeid(rs.getInt("typeid"));
goods.setGoods_price(rs.getFloat("goods_price"));
goods.setGoods_discount(rs.getFloat("goods_discount"));
goods.setGoods_desc(rs.getString("goods_desc"));
goods.setSupplier(rs.getString("supplier"));
goods.setQty(rs.getInt("qty"));
goods.setIspreferred(rs.getInt("ispreferred"));
goods.setGoods_pic(rs.getString("goods_pic"));
vector.addElement(goods);
}
return vector;
}
catch(SQLException SqlE)
{
SqlE.printStackTrace();
return null;
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
finally
{
db_conn.CloseDB();
}
}
public String int2str(int id)
{
String new_str="";
if(id==0)
{
new_str="No";
}
if(id==1)
{
new_str="Yes";
}
return new_str;
}
2.一个JavaBean类封装是一个属性
public class Goods
{
private int goods_id;//对应于商品表中字段goods_id
private Stringgoods_name;// 对应于商品表中字段goods_name
private int typeid;//对应于商品表中字段typeid
private float goods_price;//对应于商品表中字段goods_price
private float goods_discount;//对应于商品表中字段goods_discount
private Stringgoods_desc;// 对应于商品表中字段goods_desc
private Stringsupplier;// 对应于商品表中字段supplier
private int qty;//对应于商品表中字段qty
private int ispreferred;//对应于商品表中字段ispreferred
private Stringgoods_pic;// 对应于商品表中字段goods_pic
private int goods_number;//中间变量,用于存储商品的数量
private double goods_amount;//中间变量,用于存储商品的消费额
// 类的构造函数
public Goods() {
}
// 获取商品的编号
public int getGoods_id() {
returngoods_id;
}
// 设置商品的编号
public void setGoods_id(int goods_id) {
this.goods_id = goods_id;
}
// 获取商品的名称
public String getGoods_name() {
returngoods_name;
}
// 设置商品的名称
public void setGoods_name(String goods_name) {
this.goods_name = goods_name;
}
// 获取商品的类别编号
public int getTypeid() {
returntypeid;
}
// 设置商品的类别编号
public void setTypeid(int typeid) {
this.typeid = typeid;
}
// 获取商品的价格
public float getGoods_price() {
returngoods_price;
}
// 设置商品的价格
public void setGoods_price(float goods_price) {
this.goods_price = goods_price;
}
// 获取商品的折扣率
public float getGoods_discount() {
returngoods_discount;
}
// 设置商品的折扣率
public void setGoods_discount(float goods_discount) {
this.goods_discount = goods_discount;
}
// 获取商品的描述信息
public String getGoods_desc() {
returngoods_desc;
}
// 设置商品的描述信息
public void setGoods_desc(String goods_desc) {
this.goods_desc = goods_desc;
}
// 获取商品的生产制造商
public String getSupplier() {
returnsupplier;
}
// 设置商品的生产制造商
public void setSupplier(String supplier) {
this.supplier = supplier;
}
// 获取商品的库存数量
public int getQty() {
returnqty;
}
// 设置商品的库存数量
public void setQty(int qty) {
this.qty = qty;
}
// 获取该商品是否为推荐商品
public int getIspreferred() {
returnispreferred;
}
// 设置该商品是否为推荐商品
public void setIspreferred(int ispreferred) {
this.ispreferred = ispreferred;
}
// 获取商品图片对应字符串
public String getGoods_pic() {
returngoods_pic;
}
// 设置商品图片对应字符串
public void setGoods_pic(String goods_pic) {
this.goods_pic = goods_pic;
}
// 获取商品的数量
public int getGoods_number() {
returngoods_number;
}
// 设置商品的数量
public void setGoods_number(int goods_number) {
this.goods_number = goods_number;
}
// 获取商品的消费额
public double getGoods_amount() {
returngoods_amount;
}
// 设置商品的消费额
public void setGoods_amount(double goods_amount) {
this.goods_amount = goods_amount;
}
3.一个负责接受的数据的JSP页面进行分页
<%@ pagecontentType="text/html;charset=UTF-8"%>
<%@ pageimport="java.util.Vector"%>
<%@ pageimport="java.lang.*"%>
<jsp:directive.pageimport="com.ambow.xmk.page.Entity.Goods;"/>
<jsp:useBeanid="page_sep"class="com.ambow.xmk.page.Entity.Page"scope="session"/>
<jsp:useBeanid="db_type"class="com.ambow.xmk.page.Entity.DB_type"scope="session"/>
<%!
int intPageSize=4; //每页显示的记录数
int currPageBegin; //起始记录索引
int intPageCount; //总页数
int intPage; //待显示页码
String strPage; //用户请求页码
%>
<%
Goods goods=new Goods();
Vector vector=new Vector();
vector=page_sep.getResultSet();
//取得待显示页码
strPage = request.getParameter("pagenumber");
if(strPage==null)
{
//表明在QueryString中没有pagenumber这一个参数,此时显示第一页数据
intPage = 1;
}
else
{
//将字符串转换成整型
intPage = Integer.parseInt(strPage);
if(intPage<1)
intPage = 1;
}
//计算总页数
intPageCount = (vector.size()+intPageSize-1)/ intPageSize;
//调整待显示的页码
if(intPage>intPageCount)
intPage = intPageCount;
//计算每一页的起始记录索引
currPageBegin =intPage*intPageSize-intPageSize;
%>
<tablealign=centerborder=1 cellspacing=0 width=90%>
<trbgcolor="#ffccff">
<tdalign=center>商品名称</td><td>商品类别</td>
<tdalign=center>商品价格</td><td>商品折扣率</td>
<tdalign=center>商品描述</td><td>生产制造商</td>
<tdalign=center>库存量</td><tdalign=center>是否推荐商品</td>
<tdalign=center>商品图片</td></tr>
<%
for(inti=currPageBegin;i<intPage*intPageSize&&i<vector.size();i++)
{
goods=(Goods)vector.elementAt(i);
%>
<trbgcolor="#f0ffff">
<tdalign=center><fontsize=2>
<%=goods.getGoods_name()%></font></td>
<tdalign=center><fontsize=2>
<%=db_type.getTypename(goods.getTypeid())%></font></td>
<tdalign=center><fontsize=2>
<%=goods.getGoods_price()%></font></td>
<tdalign=center><fontsize=2>
<%=goods.getGoods_discount()%></font></td>
<tdalign=left><fontsize=2>
<%=goods.getGoods_desc()%></font></td>
<tdalign=center><fontsize=2>
<%=goods.getSupplier()%></font></td>
<tdalign=center><fontsize=2>
<%=goods.getQty()%></font></td>
<tdalign=center><fontsize=2>
<%=page_sep.int2str(goods.getIspreferred())%></font></td>
<tdalign=center>
<imgsrc=<%=goods.getGoods_pic()%>width=50 height=50></td></tr>
<%
}
%>
<br>
<tablealign=center>
<tr><tdalign=right> 第<%=intPage%>页 共<%=intPageCount%>页
<% //以下是分页的“上一页”“下一页”,有上一页就有链接,没有就为文字,下一页同理%>
<% if(intPage>1){%>
<ahref="page_sep.jsp?pagenumber=<%=intPage-1%>">上一页</a>
<% }else{%>
上一页
<%}%>
<% if(intPage<intPageCount){%>
<ahref="page_sep.jsp?pagenumber=<%=intPage+1%>">下一页</a>
<% }else{%>
下一页
<%}%>
</tr>
</center>
第四种分页技术
1.Jsp中的调用
<%@ pagecontentType="text/html;charset=gb2312"%>
<br>
<h3>
<center>
万能分页测试
</h3>
<hr color="#000032" size=2 width=75%>
<br>
<tablealign=center>
<tr>
<tdalign=center>
输入分页SQL:
</td>
<tdalign=center>
<formaction="pagetoall.jsp"method="post">
<inputtype="text"name="sqlcmd"size=50>
</td>
</tr>
<tr>
<tdalign=centercolspan=2>
<inputtype="submit"name="submit"value="分页显示">
</td>
</tr>
2. 处理分页的过程
<%@ pagecontentType="text/html;charset=UTF-8"%>
<%@ pageimport="java.util.Vector"%>
<%@ pageimport="java.lang.*"%>
<jsp:directive.pageimport="com.ambow.xmk.page.Entity.Goods;"/>
<jsp:useBeanid="page_sep"class="com.ambow.xmk.page.Entity.Page"scope="session"/>
<jsp:useBeanid="db_type"class="com.ambow.xmk.page.Entity.DB_type"scope="session"/>
<%!
int intPageSize=4; //每页显示的记录数
int currPageBegin; //起始记录索引
int intPageCount; //总页数
int intPage; //待显示页码
String strPage; //用户请求页码
%>
<%
Goods goods=new Goods();
Vector vector=new Vector();
vector=page_sep.getResultSet();
//取得待显示页码
strPage = request.getParameter("pagenumber");
if(strPage==null)
{
//表明在QueryString中没有pagenumber这一个参数,此时显示第一页数据
intPage = 1;
}
else
{
//将字符串转换成整型
intPage = Integer.parseInt(strPage);
if(intPage<1)
intPage = 1;
}
//计算总页数
intPageCount = (vector.size()+intPageSize-1)/ intPageSize;
//调整待显示的页码
if(intPage>intPageCount)
intPage = intPageCount;
//计算每一页的起始记录索引
currPageBegin =intPage*intPageSize-intPageSize;
%>
<tablealign=centerborder=1 cellspacing=0 width=90%>
<trbgcolor="#ffccff">
<tdalign=center>商品名称</td><td>商品类别</td>
<tdalign=center>商品价格</td><td>商品折扣率</td>
<tdalign=center>商品描述</td><td>生产制造商</td>
<tdalign=center>库存量</td><tdalign=center>是否推荐商品</td>
<tdalign=center>商品图片</td></tr>
<%
for(int i=currPageBegin;i<intPage*intPageSize&&i<vector.size();i++)
{
goods=(Goods)vector.elementAt(i);
%>
<trbgcolor="#f0ffff">
<tdalign=center><fontsize=2>
<%=goods.getGoods_name()%></font></td>
<tdalign=center><fontsize=2>
<%=db_type.getTypename(goods.getTypeid())%></font></td>
<tdalign=center><fontsize=2>
<%=goods.getGoods_price()%></font></td>
<tdalign=center><fontsize=2>
<%=goods.getGoods_discount()%></font></td>
<tdalign=left><fontsize=2>
<%=goods.getGoods_desc()%></font></td>
<tdalign=center><fontsize=2>
<%=goods.getSupplier()%></font></td>
<tdalign=center><fontsize=2>
<%=goods.getQty()%></font></td>
<tdalign=center><fontsize=2>
<%=page_sep.int2str(goods.getIspreferred())%></font></td>
<tdalign=center>
<imgsrc=<%=goods.getGoods_pic()%>width=50 height=50></td></tr>
<%
}
%>
<br>
<tablealign=center>
<tr><tdalign=right> 第<%=intPage%>页 共<%=intPageCount%>页
<% //以下是分页的“上一页”“下一页”,有上一页就有链接,没有就为文字,下一页同理%>
<% if(intPage>1){%>
<ahref="page_sep.jsp?pagenumber=<%=intPage-1%>">上一页</a>
<% }else{%>
上一页
<%}%>
<% if(intPage<intPageCount){%>
<ahref="page_sep.jsp?pagenumber=<%=intPage+1%>">下一页</a>
<% }else{%>
下一页
<%}%>
</tr>
</center>
1.5根据不同的DB来实现分页技术
1.1 OracleDB分页
Oracle中获得当前页面数据的SQL片段代码;
Select * from
(
Select a.*,rownum rcfrom
(
select * from student order by student_numberasc
) a where rownum<=endrow
) b whererc>=statrow
其中,startrow、endrow 分别为当钱页面的起始行与终止行,具体应用是可用start=(intpage-1)*perpagesize+1,endrow=intpage*perpagesize进行计算
1.2 DB2 DB 分页
Select * from
(
select rownumber() over() as rc,a.*from
(
select * from student order by student_numberasc
)as a
)where rc betweenstartrow and endrow
1.3 SQL Server 2000DB 分页
Select topperpagesize * from student where
(
student_id not int
(
Select top perpagesize*intpage student_id fromstudent order by student_id order student_id
)
)
Order by Student_id
1.4 SQL Server 2005DB 分页
利用2005 的新功能 可以获得更好的分页查询性能并简化SQL 语句的编写。
Select * from
(
selectstudent_id,row_number() over(order by student_name)as curr from student
)as t wheret.curr>=startrow and t.curr<=endrow
1.5 MySQl DB 分页
MySQL数据库的生气了最为简单 ,以下为在MySQL数据库获得当前页数的SQl片段代码
Select * fromstudent limit startrow,perpagesize
其中,startrow 为当前页的起始页,具体应用是也可用startrow=(intpage-1)*perpagesize+1进行计算,而perpagesize为每页显示记录数量。
1.6 PostgreSQL 数据库分页
数据库分页比较简单,以下是代码片段
Select * fromstudent limit perpagesize offset startrow
其中,perpagesize,startrow的计算MYSQL中是一致的
- Jsp页面分页技术实现文档
- JSP页面分页技术实现
- jsp页面实现分页
- jsp实现页面分页。
- JSP分页技术实现
- JSP分页技术实现
- JSP分页技术实现
- JSP分页技术实现
- jsp实现分页技术
- JSP分页技术实现
- JSP分页技术实现
- JSP分页技术实现
- JSP分页技术实现
- JSP分页技术实现
- JSP分页技术实现
- JSP分页技术实现
- JSP分页技术实现
- JSP分页技术实现
- 无入侵的开屏广告插入方式
- Link和@import的区别
- 从输入 URL 到页面加载完的过程中都发生了什么事情
- 大牛之作_appwidget
- 史上最全的maven pom.xml文件教程详解
- Jsp页面分页技术实现文档
- 二维码 生成、读取, 以及调整图片大小,截屏
- js获得input的实时输入值
- mac安装scipy,anaconda
- 图像编码中的小白问题sps ,pps ,nalu ,frame ,silce ect....
- Nutch1.12源代码导入Eclipse 报错The type java.nio.file.Path cannot be resolved.
- C# 连接 Oracle 的几种方式
- Best Time to Buy and Sell Stock
- sscanf意想不到的强大