目录
一、jsp标签(下拉框、复选框、页码)
1、下拉框
2、复选框
3、页码
配置
二、通用分页
三、界面应用与展示
一、jsp标签(下拉框、复选框、页码)
1、下拉框
package com.cxy.tag;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.apache.commons.beanutils.PropertyUtils;
public class Select extends BodyTagSupport{
private List
2、复选框
package com.cxy.tag;
import java.lang.reflect.Field;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.apache.commons.beanutils.PropertyUtils;
public class CheckboxTag extends BodyTagSupport{
private List items;
private String cknr;
private String ckval;
private List cked;
private String id;
private String name;
@Override
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
try {
out.print(toHTML());
} catch (Exception e) {
e.printStackTrace();
}
return super.doStartTag();
}
private String toHTML() throws Exception {
StringBuffer sb = new StringBuffer();
for (Object obj : items) {
//反射:
Field ckvalField = obj.getClass().getDeclaredField(ckval);
//打开权限
ckvalField.setAccessible(true);
//复选框展示值
Object value = ckvalField.get(obj);
//判断
if(cked!=null) {
if(cked.contains(value)) {
sb.append(""+PropertyUtils.getProperty(obj, cknr));
}
else {
sb.append(""+PropertyUtils.getProperty(obj, cknr));
}
}
else {
sb.append(""+PropertyUtils.getProperty(obj, cknr));
}
}
return sb.toString();
}
public List getItems() {
return items;
}
public void setItems(List items) {
this.items = items;
}
public String getCknr() {
return cknr;
}
public void setCknr(String cknr) {
this.cknr = cknr;
}
public String getCkval() {
return ckval;
}
public void setCkval(String ckval) {
this.ckval = ckval;
}
public List getCked() {
return cked;
}
public void setCked(List cked) {
this.cked = cked;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public CheckboxTag() {
// TODO Auto-generated constructor stub
}
public CheckboxTag(List items, String cknr, String ckval, List cked, String id, String name) {
super();
this.items = items;
this.cknr = cknr;
this.ckval = ckval;
this.cked = cked;
this.id = id;
this.name = name;
}
}
3、页码
package com.cxy.tag;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import com.cxy.tag.PageBean;
public class PageTag extends BodyTagSupport{
private PageBean pagebean;
public PageBean getPagebean() {
return pagebean;
}
public void setPagebean(PageBean pagebean) {
this.pagebean = pagebean;
}
@Override
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
try {
out.print(toHTML());
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
private String toHTML() {
StringBuffer sb = new StringBuffer();
//隐藏的form表单,作用保存上一次查询条件
sb.append("
");
//分页条
sb.append("首页 ");
sb.append("上一页 ");
sb.append(""+pagebean.getPage()+"");
sb.append(" 下一页");
sb.append(" 尾页");
sb.append(" 到第页");
sb.append(" 确定");
sb.append(" 共"+pagebean.getTotal()+"条");
//分页js代码
sb.append("");
return sb.toString();
}
}
package com.cxy.tag;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.apache.commons.beanutils.PropertyUtils;
public class Select extends BodyTagSupport{
private List
2、复选框
package com.cxy.tag;
import java.lang.reflect.Field;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.apache.commons.beanutils.PropertyUtils;
public class CheckboxTag extends BodyTagSupport{
private List items;
private String cknr;
private String ckval;
private List cked;
private String id;
private String name;
@Override
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
try {
out.print(toHTML());
} catch (Exception e) {
e.printStackTrace();
}
return super.doStartTag();
}
private String toHTML() throws Exception {
StringBuffer sb = new StringBuffer();
for (Object obj : items) {
//反射:
Field ckvalField = obj.getClass().getDeclaredField(ckval);
//打开权限
ckvalField.setAccessible(true);
//复选框展示值
Object value = ckvalField.get(obj);
//判断
if(cked!=null) {
if(cked.contains(value)) {
sb.append(""+PropertyUtils.getProperty(obj, cknr));
}
else {
sb.append(""+PropertyUtils.getProperty(obj, cknr));
}
}
else {
sb.append(""+PropertyUtils.getProperty(obj, cknr));
}
}
return sb.toString();
}
public List getItems() {
return items;
}
public void setItems(List items) {
this.items = items;
}
public String getCknr() {
return cknr;
}
public void setCknr(String cknr) {
this.cknr = cknr;
}
public String getCkval() {
return ckval;
}
public void setCkval(String ckval) {
this.ckval = ckval;
}
public List getCked() {
return cked;
}
public void setCked(List cked) {
this.cked = cked;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public CheckboxTag() {
// TODO Auto-generated constructor stub
}
public CheckboxTag(List items, String cknr, String ckval, List cked, String id, String name) {
super();
this.items = items;
this.cknr = cknr;
this.ckval = ckval;
this.cked = cked;
this.id = id;
this.name = name;
}
}
3、页码
package com.cxy.tag;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import com.cxy.tag.PageBean;
public class PageTag extends BodyTagSupport{
private PageBean pagebean;
public PageBean getPagebean() {
return pagebean;
}
public void setPagebean(PageBean pagebean) {
this.pagebean = pagebean;
}
@Override
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
try {
out.print(toHTML());
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
private String toHTML() {
StringBuffer sb = new StringBuffer();
//隐藏的form表单,作用保存上一次查询条件
sb.append("
package com.cxy.tag;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import com.cxy.tag.PageBean;
public class PageTag extends BodyTagSupport{
private PageBean pagebean;
public PageBean getPagebean() {
return pagebean;
}
public void setPagebean(PageBean pagebean) {
this.pagebean = pagebean;
}
@Override
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
try {
out.print(toHTML());
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
private String toHTML() {
StringBuffer sb = new StringBuffer();
//隐藏的form表单,作用保存上一次查询条件
sb.append("配置
JSTL 1.1 core library
JSTL core
1.1
z
http://jsp.veryedu.cn
Provides core validation features for JSTL tags.
org.apache.taglibs.standard.tlv.JstlCoreTLV
demo1
com.cxy.tag.DemoTag
JSP
var
false
false
if
com.cxy.tag.IfTag
JSP
test
true
true
set
com.cxy.tag.SetTag
JSP
var
true
false
value
true
false
out
com.cxy.tag.OutTag
JSP
value
true
true
select
com.cxy.tag.Select
JSP
items
true
true
textVal
true
false
textKey
true
false
headerTextVal
false
false
headerTextKey
false
false
selectedVal
false
true
id
false
false
name
false
false
page
com.cxy.tag.PageTag
JSP
pagebean
true
true
checked
com.cxy.tag.CheckboxTag
JSP
items
true
true
cknr
true
false
ckval
true
false
cked
false
true
id
false
false
name
false
false
二、通用分页
PageBean.java(页码参数)
package com.cxy.tag;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
public class PageBean {
private int page = 1;// 页码
private int rows = 10;// 页大小
private int total = 0;// 总记录数
private boolean pagination = true;// 是否分页
//新增变量
private String url;//保存上一次的地址
//保存上一次查询条件
private Map p = new HashMap();
//获取最大页码
public int maxPage() {
return this.total%this.rows==0?
this.total/this.rows:
this.total/this.rows+1;
}
//获取上一页的页码
public int previousPage() {
return this.page>1 ? this.page-1 : this.page;
}
//获取下一页的页码
public int nextPage() {
return this.page getP() {
return p;
}
public void setP(Map p) {
this.p = p;
}
public PageBean() {
super();
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public void setTotal(String total) {
this.total = Integer.parseInt(total);
}
public boolean isPagination() {
return pagination;
}
public void setPagination(boolean pagination) {
this.pagination = pagination;
}
public int getStartIndex() {
return (this.page - 1) * this.rows;
}
@Override
public String toString() {
return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination
+ ", url=" + url + ", p=" + p + "]";
}
}
StudentDao.java(dao方法)
package com.cxy.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import com.cxy.biz.StudentBiz; import com.cxy.entity.Hobby; import com.cxy.entity.Student; import com.cxy.tag.PageBean; import com.cxy.tag.StringUtils; import com.cxy.util.DBHelper; public class StudentDao extends BaseDaoimplements StudentBiz{ Connection con = null; Statement stmt = null; ResultSet rs = null; PreparedStatement ps = null; @Override public int addstu(Student stu) { int n = 0; try { //创建连接 con = DBHelper.getConnection(); //定义SQL语句 String sql ="insert into tb_stu(sname,tid,cid,hid) values(?,?,?,?)"; //获得执行对象 stmt = con.prepareStatement(sql); //给占位符赋值 ps = con.prepareStatement(sql); ps.setString(1, stu.getSname()); ps.setInt(2, stu.getJs().getTid()); ps.setInt(3, stu.getBj().getCid()); ps.setString(4, stu.getHid()); //获得影响行数 n=ps.executeUpdate(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally { DBHelper.close(con, stmt, rs, ps); } return n; } @Override public int deletestu(int sid) { int n = 0; try { //创建连接 con = DBHelper.getConnection(); //定义SQL语句 String sql ="delete from tb_stu where sid="+sid; //获得执行对象 stmt = con.prepareStatement(sql); //获得影响行数 n = stmt.executeUpdate(sql); } catch (Exception e) { e.printStackTrace(); }finally { DBHelper.close(con, stmt, null, ps); } return n; } @Override public int updatestu(int sid, Student stu) { int n = 0; try { //创建连接 con = DBHelper.getConnection(); //定义SQL语句 String sql ="update tb_stu set sname=?,tid=?,cid=?,hid=? where sid="+sid; //获得执行对象 stmt = con.prepareStatement(sql); //给占位符赋值 ps = con.prepareStatement(sql); ps.setString(1, stu.getSname()); ps.setInt(2, stu.getJs().getTid()); ps.setInt(3, stu.getBj().getCid()); ps.setString(4, stu.getHid()); //获得影响行数 n=ps.executeUpdate(); } catch (Exception e) { e.printStackTrace(); }finally { DBHelper.close(con, stmt, null,ps); } return n; } @Override public int getcount(String strt,String strc,String strh) { int n=0; try { //创建连接 con = DBHelper.getConnection(); //定义SQL语句 String sql = "SELECT count(*) from (rn" + "SELECt * from (rn" + "SELECt * from (rn" + "SELECt a.*,b.tname,c.cname,d.hname from tb_stu a,tb_js b,tb_class c,tb_hobby d where a.tid=b.tid and a.cid=c.cid and a.hid=d.hid rn" + ")t "+strt+"rn" + ")c "+strc+"rn" + ")h "+strh+"rn"; //获得执行对象 stmt = con.prepareStatement(sql); //获得结果集 rs = stmt.executeQuery(sql); //遍历 if(rs.next()) { n=rs.getInt(1); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally { DBHelper.close(con, stmt, rs, ps); } return n; } @Override public Student getdg(int sid) { Student s =null; try { //创建连接 con = DBHelper.getConnection(); //定义sql语句 String sql = "SELECt a.*,b.tname,c.cname,d.hname from tb_stu a,tb_js b,tb_class c,tb_hobby d where a.tid=b.tid and a.cid=c.cid and a.hid=d.hid and a.sid="+sid; //获得执行对象 stmt = con.prepareStatement(sql); //获得结果集 rs = stmt.executeQuery(sql); if(rs.next()) { s = new Student(); //编号 s.setSid(rs.getInt(1)); //姓名 s.setSname(rs.getString(2)); //教师 s.setJs(new JsDao().getdg(rs.getInt(3))); //班级 s.setBj(new ClassDao().getdg(rs.getInt(4))); //爱好 String str = rs.getString(5); s.setHid(str); } } catch (Exception e) { e.printStackTrace(); }finally { DBHelper.close(con, stmt, rs, ps); } return s; } public List getAll(){ List lh = new ArrayList (); try { //创建连接 con = DBHelper.getConnection(); //定义sql语句 String sql = "select * from tb_hobby"; //获得执行对象 stmt = con.prepareStatement(sql); //获得结果集 rs = stmt.executeQuery(sql); while(rs.next()) { Hobby h = new Hobby(); h.setHid(rs.getInt(1)); h.setHname(rs.getString(2)); lh.add(h); } } catch (Exception e) { e.printStackTrace(); }finally { DBHelper.close(con, stmt, rs, null); } return lh; } public List getdAll() { List la = new ArrayList<>(); Hobby h = new Hobby(); try { con = DBHelper.getConnection(); //定义SQL语句 String sql ="select * from tb_hobby"; //获得执行对象 stmt = con.prepareStatement(sql); //获得结果集 rs = stmt.executeQuery(sql); //遍历 while(rs.next()) { h.setHid(rs.getInt(1)); h.setHname(rs.getString(2)); la.add(h); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally { DBHelper.close(con, stmt, rs, ps); } return la; } public Hobby getdgh(int hid) { Hobby h = new Hobby(); try { con = DBHelper.getConnection(); //定义SQL语句 String sql ="select * from tb_hobby where hid="+hid; //获得执行对象 stmt = con.prepareStatement(sql); //获得结果集 rs = stmt.executeQuery(sql); //遍历 if(rs.next()) { h.setHid(rs.getInt(1)); h.setHname(rs.getString(2)); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally { DBHelper.close(con, stmt, rs, ps); } return h; } // ----------------------------------------------------------------------------- public List list(Student stu,PageBean p) throws Exception{ String sql = "SELECt a.* from tb_stu a,tb_js b,tb_class c,tb_hobby d where a.tid=b.tid and a.cid=c.cid and a.hid=d.hid"; int cid = stu.getBj().getCid(); if(cid!=0) { sql+=" and a.cid ="+cid; } int tid =stu.getJs().getTid(); if(tid!=0) { sql +=" and a.tid="+tid; } String hid = stu.getHid(); if(StringUtils.isNotBlank(hid)) { sql +=" and a.hid like '%"+hid+"%'"; } System.out.println("班级:"+cid+"教师:"+tid+"爱好:"+hid); return super.list(sql, p, rs ->{ List list = new ArrayList<>(); try { while(rs.next()) { String ah = rs.getString(5); String[] split = ah.split(" "); String ah1=""; for (String hids : split) { //查询单个 Hobby hh = getdgh(Integer.parseInt(hids)); ah1+=hh.getHname()+" "; } list.add(new Student(rs.getInt(1), rs.getString(2),new JsDao().getdg(rs.getInt(3)), new ClassDao().getdg(rs.getInt(4)),ah1)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; }); } }
三、界面应用与展示
IndexServlet.java
package com.cxy.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.cxy.biz.ClassBiz;
import com.cxy.biz.JsBiz;
import com.cxy.biz.StudentBiz;
import com.cxy.dao.ClassDao;
import com.cxy.dao.JsDao;
import com.cxy.dao.StudentDao;
import com.cxy.entity.Class;
import com.cxy.entity.Hobby;
import com.cxy.entity.Js;
import com.cxy.entity.Student;
import com.cxy.tag.PageBean;
@WebServlet("/index.do")
public class IndexServlt extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码方式
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
//接收
//教师
String strt = request.getParameter("tid");
if(strt==null) {
strt="0";
}
//班级
String strc = request.getParameter("cid");
if(strc==null) {
strc="0";
}
//爱好
String[] str = request.getParameterValues("hid");
System.out.println(str);
String str2 ="";
if(str==null) {
str2="";
}
else {
for (String string : str) {
StudentDao s = new StudentDao();
Hobby hh = s.getdgh(Integer.parseInt(string));
str2+=hh.getHid()+" ";
}
}
System.out.println("爱好"+str2);
PageBean p = new PageBean();
Student s = new Student();
p.setReq(request);
s.setJs(new JsDao().getdg(Integer.parseInt(strt)));
s.setBj(new ClassDao().getdg(Integer.parseInt(strc)));
s.setHid(str2);
System.out.println("学生:"+s);
StudentDao stu = new StudentDao();
JsBiz j = new JsDao();
ClassBiz c = new ClassDao();
//教师
List ls = j.getAll();
//班级
List lc = c.getAll();
//爱好
List ah1 = stu.getAll();
List list =null;
try {
list = stu.list(s, p);
} catch (Exception e) {
e.printStackTrace();
}
request.setAttribute("list", list);
request.setAttribute("pagebean", p);//页码
request.setAttribute("js", ls);//教师
request.setAttribute("bj", lc);//班级
request.setAttribute("ha", ah1);//爱好
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://jsp.veryedu.cn" prefix="z" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
主界面
主界面
界面展示



