自定义标签的开发及使用步骤
- 创建一个标签助手类继承(BodyTagsuppore)
- 创建标签库描述文件(tld)添加自定义标签配置
- 在jsp通过Taglib指令导入标签库描述文件,并通过指定后缀访问此自定义标签
自定义的生命周期思维导图
通用分页核心思路
将上一次查询请求再发一次,只不过页码变了
select * from t_student LTMIT 0,10;
//10 代表每页显示多少条数据
// 0 代表其实记录下标
dao方法
- 第一次查满足条件的总记录数
- 第二次查指定页码并满足条件的记录
- 二次查询的条件要一致
项目演示
- 实现类:
package com.test.action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mvc.framework.DispatcherAction;
import com.mvc.framework.ModelDriver;
import com.test.dao.JobDao;
import com.test.entity.Job;
import com.test.util.PageBean;
public class JobAction extends DispatcherAction implements ModelDriver<Job> {
private JobDao jd = new JobDao();
private Job job = new Job();
@Override
public Job getModel() {
return job;
}
public String find(HttpServletRequest req, HttpServletResponse resp) {
PageBean pageBean = new PageBean();
pageBean.setRequest(req);
req.setAttribute("pageBean", pageBean);
List<Job> jobList = jd.find(job, pageBean);
req.setAttribute("jobList", jobList);
String frowardName = "list";
return frowardName;
}
}
- 封装数据库连接类
package com.test.util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* 提供了一组获得或关闭数据库对象的方法
*
*/
public class DBAccess{
private static String driver;
private static String url;
private static String user;
private static String password;
static {// 静态块执行一次,加载 驱动一次
try {
InputStream is = DBAccess.class
.getResourceAsStream("config.properties");
Properties properties = new Properties();
properties.load(is);
driver = properties.getProperty("driver");
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("pwd");
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 获得数据连接对象
*
* @return
*/
public static Connection getConnection() {
try {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static void close(ResultSet rs) {
if (null != rs) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
public static void close(Statement stmt) {
if (null != stmt) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
public static void close(Connection conn) {
if (null != conn) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
public static void close(Connection conn, Statement stmt, ResultSet rs) {
close(rs);
close(stmt);
close(conn);
}
public static boolean isOracle() {
return "oracle.jdbc.driver.OracleDriver".equals(driver);
}
public static boolean isSQLServer() {
return "com.microsoft.sqlserver.jdbc.SQLServerDriver".equals(driver);
}
public static boolean isMysql() {
return "com.mysql.jdbc.Driver".equals(driver);
}
public static void main(String[] args) {
Connection conn = DBAccess.getConnection();
DBAccess.close(conn);
System.out.println("isOracle:" + isOracle());
System.out.println("isSQLServer:" + isSQLServer());
System.out.println("isMysql:" + isMysql());
System.out.println("数据库连接(关闭)成功");
}
}
- Dao方法
package com.test.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.entity.Job;
import com.test.util.DBAccess;
import com.test.util.PageBean;
import com.test.util.StringUtils;
public class JobDao extends BaseDao<Job>{
/* *//**
* 增加方法
*
* @param stu
*//*
public void Add(Job stu) {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "insert into t_solr_job(sname,sname_pinyin,age,remark) values(?,?,?,?)";
try {
con = DBAccess.getConnection();
ps = con.prepareStatement(sql);
ps.setString(1, stu.getSname());
ps.setString(2, stu.getSname_pinyin());
ps.setInt(3, stu.getAge());
ps.setString(4, stu.getRemark());
ps.executeUpdate();
} catch (Exception e) {
throw new RuntimeException();
} finally {
DBAccess.close(con, ps, rs);
}
}*/
/**
* 查询方法 模糊查询和查询全部
*
* @param stu
* @return
*//*
public List<Job> find(Job stu) {
List<Job> stuls = new ArrayList<Job>();
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "select * from t_student where 1=1 ";
if (StringUtils.isNotBlank(stu.getSname())) {
sql += "and sname like '%" + stu.getSname() + "%' or sname_pinyin like '%" + stu.getSname() + "%' ";
}
try {
con = DBAccess.getConnection();
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
Job stu1 = null;
while (rs.next()) {
stu1 = new Job();
stu1.setSid(rs.getInt("sid"));
stu1.setSname(rs.getString("sname"));
stu1.setSname_pinyin(rs.getString("sname_pinyin"));
stu1.setAge(rs.getInt("age"));
stu1.setRemark(rs.getString("remark"));
stuls.add(stu1);
}
} catch (Exception e) {
throw new RuntimeException();
} finally {
DBAccess.close(con, ps, rs);
}
return stuls;
}*/
/**
* 查询方法 模糊查询和查询全部
*
* @param stu
* @return
*/
public List<Job> find(Job job, PageBean pageBean) {
List<Job> jobList = new ArrayList<Job>();
String sql = "select * from t_solr_job where 1=1 ";
return this.executeQuery(sql, pageBean, new Callback<Job>() {
@Override
public List<Job> foreach(ResultSet rs) throws SQLException {
List<Job> jobList = new ArrayList<Job>();
Job job1 = null;
while (rs.next()) {
job1 = new Job();
job1.setId(rs.getString(1));
job1.setJob(rs.getString(2));
job1.setCompany(rs.getString(3));
job1.setAddress(rs.getString(4));
job1.setSalary(rs.getString(5));
job1.setUrl(rs.getString(6));
job1.setLimit(rs.getString(7));
job1.setTime(rs.getString(8));
job1.setDesc(rs.getString(9));
job1.setJobHandle(rs.getString(10));
job1.setAddressHandle(rs.getString(11));
jobList.add(job1);
}
return jobList;
}
});
}
/**
* 修改方法
*
* @param stu
*//*
public void edit(Job stu) {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "update t_solr_job(sname,sname_pinyin,age,remark) values(?,?,?,?)";
try {
con = DBAccess.getConnection();
ps = con.prepareStatement(sql);
ps.setString(1, stu.getSname());
ps.setString(2, stu.getSname_pinyin());
ps.setInt(3, stu.getAge());
ps.setString(4, stu.getRemark());
ps.executeUpdate();
} catch (Exception e) {
throw new RuntimeException();
} finally {
DBAccess.close(con, ps, rs);
}
}*/
}
- 分页生产类
public class PageTag extends BodyTagSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
//定义pageBean数属性
private PageBean pageBean;
public PageBean getPageBean() {
return pageBean;
}
public void setPageBean(PageBean pageBean) {
this.pageBean = pageBean;
}
public PageTag() {}
@Override
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
JspWriter out = pageContext.getOut();
try {
out.println(toHtml());
} catch (IOException e) {
throw new RuntimeException(e);
}
return SKIP_BODY;
}
public String toHtml() {
StringBuffer bf=new StringBuffer();
//生产分页按钮
bf.append("当前第:"+this.pageBean.getPage()+"页 共"+this.pageBean.getMaxPage()+"页 共"+this.pageBean.getTotal()+"条");
bf.append("<a href='javascript:doForward(1)'>首页</a>");
bf.append("<a href='javascript:doForward("+this.pageBean.getFrontPage()+")'>上一页</a>");
bf.append("<a href='javascript:doForward("+this.pageBean.getNextPage()+")'>下一页</a>");
bf.append("<a href='javascript:doForward("+this.pageBean.getMaxPage()+")'>末页</a>");
bf.append("<input type='text' id='gotoPage'><a href='javascript:gotoPage()'>go..</a>");
//生成分页的表单
bf.append("<form id='form' action='"+this.pageBean.getUrl()+"' method='post'>");
bf.append("<input id='page' type='hidden' name='page' />");
Map<String, String[]> parameterMap=pageBean.getParameterMap();
Set<Entry<String, String[]>> entrySet = parameterMap.entrySet();
for (Entry<String, String[]> entry : entrySet) {
String name=entry.getKey();
String values[]=entry.getValue();
if(name.equals("page")) {
continue;
}
for(String value : values) {
bf.append("<input type='hidden' name='"+name+"' value='"+value+"'/>");
}
}
bf.append("</form>");
//生产js
bf.append("<script type='text/javascript'>\r\n" +
" function doForward(page){\r\n" +
" console.info(page);\r\n" +
" document.getElementById('page').value=page;\r\n" +
" document.getElementById('form').submit();\r\n" +
" }\r\n" +
" \r\n" +
" function gotoPage(){\r\n" +
" var page=document.getElementById('gotoPage').value;\r\n" +
" if(isNaN(page)){\r\n" +
" alert(\"请输入一个数字\");\r\n" +
" }else if(page<1 || page>"+this.pageBean.getMaxPage()+"){\r\n" +
" alert(\"请输入1-"+this.pageBean.getMaxPage()+"之间的数字\");\r\n" +
" }else{\r\n" +
" doForward(page) \r\n" +
" }\r\n" +
" }\r\n" +
" </script> ");
return bf.toString();
}
}