JAVA语言实现大量信息的分页显示功能及对象反射(通过参数找到对应的函数)

来源:互联网 发布:淘宝取现手续费多少 编辑:程序博客网 时间:2024/05/17 04:49

1.对象的反射:通过对象找出该类中所有的方法

    Class cla=this.getClass();
    Method method=cla.getDeclaredMethod(methodName,HttpServletRequest.class,HttpServletResponse.class );
   

   例子:通过参数能调用该类中参数所对应的方法

     超链接请求,参数method对应的是要调用的方法,pageNo对应的是分页显示的要显示第几页

   <h3><a href="${pageContext.request.contextPath}/FunctionServlet?method=getUserList&pageNo=1">
       查询所有用户信息。</a></h3>
    反射处理:

     1.首先建立一个父类BaseServlet

@WebServlet("/BaseServlet")public class BaseServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected static int pageNo=1;//设置默认显示的页码protected static int pageSize = 1;//每页有多少条记录      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {try{pageNo=Integer.parseInt(request.getParameter("pageNo"));}catch(Exception e){e.getMessage();}//获取用户传递的请求参数String methodName = request.getParameter("method");//通过方法名获取到方法的对象//获取当前类的Class对象Class cla = this.getClass();//获取cla的的方法(Method对象)//getDeclaredMethod需要两个参数,方法名和参数名//因为在java需要通过方法名和参数列表来确定一个方法try {//获取方法对象Method method = cla.getDeclaredMethod(methodName, HttpServletRequest.class , HttpServletResponse.class);//设置方法的访问权限method.setAccessible(true);//调用方法//invoke用于调用一个方法,第一个参数时要调用方法的对象,剩下是调用方法需要的参数method.invoke(this, request , response);} catch (Exception e) {e.printStackTrace();}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf8");doGet(request, response);}}
            
                  2.    建立一个子类继承BaseServlet父类,定义每个参数对应的要调用的方法
@WebServlet("/FunctionServlet")public class FunctionServlet extends BaseServlet {private static final long serialVersionUID = 1L;     private Userservice userservice=new UserserviceImp();     public void loginByNameAndPwd(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{   String username=request.getParameter("username");   String password=request.getParameter("password");   request.setAttribute("username", username);   int resule=userservice.findByNameAndPwd(username, password);   if(resule==1){ response.sendRedirect(request.getContextPath()+"/login-success.jsp?username="+username+"");   //request.getRequestDispatcher("/login-success.jsp").forward(request, response);   }else{   response.sendRedirect(request.getContextPath()+"/login-error.html");   }   }      public void getUserList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{   String url=WEBUtils.getPath(request);   Page<User> page=userservice.getUserList(pageNo, pageSize);   page.setPath(url);  request.setAttribute("page", page);  request.getRequestDispatcher("/WEB-INF/pages/list.jsp").forward(request, response);   }}

以后在参数中写上要调用的方法名即可调用


二、信息分页处理

1.建立page实体类,用到泛型

public class Page<T> {private List<T> data;   //后台数据库查询出来private int totalRecord; //表示总共有多少记录,从数据库中查询出来//private int totalPage;  // 表示总共有多少页,计算得到!//private int index;   //表示当前索引值,计算出来的!private int pageNumber; //表示的是当前页码,这个参数是从页面传递过来的!private int pageSize;  //表示的是每页显示多少条数据 ,在servlet中设置的!private String path;//表示超链接地址URLpublic Page() {super();}public Page(int totalRecord, int pageNumber, int pageSize) {super();this.totalRecord = totalRecord;this.pageNumber = pageNumber;this.pageSize = pageSize;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public List<T> getData() {return data;}public void setData(List<T> data) {this.data = data;}public int getTotalRecord() {return totalRecord;}public void setTotalRecord(int totalRecord) {this.totalRecord = totalRecord;}public int getTotalPage() {/** * totalPage:表示总共有几页! *  * 总页数          totalRecord[总记录数]    pageSize *                     5        10                     2 *                     5         9                     2 *                     4         8                     2 */if(totalRecord % pageSize ==0){return totalRecord / pageSize;}return (totalRecord / pageSize + 1);}public int getIndex() {/** * index表示的是当前索引值,是计算得到的! *             当前索引值           每页显示几条数据               当前页是第几页 *                0           3                 1 *                3           3                 2 *        index  = (pageNumber -1)*pageSize; */return (getPageNumber() -1)*pageSize;}public int getPageNumber() {if(pageNumber < 1){return 1;}else if(pageNumber > getTotalPage()){return getTotalPage();}return pageNumber;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}}

2.怎么获取URL?

 String url=WEBUtils.getPath(request);
  WEBUtils类中的getPath方法

public static String getPath(HttpServletRequest request){String requestURI = request.getRequestURI();String queryString = request.getQueryString();String url = requestURI+"?"+queryString;if(url.contains("&pageNo")){url = url.substring(0, url.indexOf("&pageNo"));}return url;}

3.显示列表的Servlet中的方法

protected void getStuList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String url = WEBUtils.getPath(request);Page<Student> page=stuService.getStudentList(pageNo,pageSize);page.setPath(url);request.setAttribute("page",page );request.getRequestDispatcher("/WEB-INF/view/list.jsp").forward(request, response);}

业务层Service中的函数

public Page<Student> getStudentList(int pageNo, int pageSize){//第一步:查询当前表的所有记录数int totalRecord=  stuDao.getTotalRecord();//第二步:创建page对象Page<Student> page = new Page<Student>(totalRecord,pageNo,pageSize);//第三步:查询分页列表数据并设置到page对象中!List<Student> list = stuDao.getLimitStuList(page.getIndex(),page.getPageSize());page.setData(list);return page;}

持有层Dao中要有1.获取所有记录的方法2.分页显示的方法

视图层页面显示代码:将页表显示分离到另一个页面,通过静态引入

   总体显示页面  list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><c:choose><c:when test="${empty page.data }"><h1 align="center">没有学生数据</h1></c:when><c:otherwise><h1 align="center">学生列表</h1><table border="1" align="center" width="50%"><tr><th>姓名</th><th>密码</th><th>邮箱</th><th colspan="2">操作</th></tr><c:forEach items="${page.data}" var="stu"><tr><td>${stu.username }</td><td>${stu.password }</td><td>${stu.mail }</td><td><a href="${pageContext.request.contextPath}/StudentServlet?method=toUpdatePage&id=${stu.id}" >修改</a></td><td><a href="#?${stu.id}">删除</a></td></tr></c:forEach><tr><td colspan="5" align="center"><a href="#">添加</a></td></tr></table><br/><%@ include file="/WEB-INF/pages/paging.jsp" %></c:otherwise></c:choose></body></html>
页表显示页面  paging.jsp       显示5页的数据

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><div id="page_nav" align="center"><a href="${page.path}&pageNo=1">首页</a><a href="${page.path}&pageNo=${page.pageNumber -1 }">上一页</a><c:choose><c:when test="${page.totalPage <= 5 }" ><c:set var="begin" value="1"></c:set><c:set var="end" value="${page.totalPage}"></c:set></c:when><c:when test="${page.pageNumber <= 3 }"><c:set var="begin" value="1"></c:set><c:set var="end" value="5"></c:set></c:when><c:otherwise><c:set var="begin" value="${page.pageNumber-2}"></c:set><c:set var="end" value="${page.pageNumber+2}"></c:set><c:if test="${end > page.totalPage }"><c:set var="begin" value="${page.totalPage-4}"></c:set><c:set var="end" value="${page.totalPage}"></c:set></c:if></c:otherwise></c:choose><c:forEach begin="${begin }" end="${end}" var="num"><c:if test="${page.pageNumber == num }">【${num}】</c:if><c:if test="${page.pageNumber != num }"><a href="${page.path}&pageNo=${num}">${num }</a></c:if></c:forEach><a href="${page.path}&pageNo=${page.pageNumber +1}">下一页</a><a href="${page.path}&pageNo=${page.totalPage}">末页</a>共${page.totalPage }页,${page.totalRecord }条记录到,去第<input value="${page.totalPage }" name = "pn" id ="pn_input"/>页<input type="button" value="确定" id="btn_id"/><script type="text/javascript">$("#btn_id").click(function(){var value= $("#pn_input").val();window.location="${page.path}&pageNo="+value;});</script></div>


阅读全文
0 0
原创粉丝点击