【中软国际实习】Day 4:分页管理与查询

本文介绍了在Java Web项目中如何实现分页查询用户信息,每个页面显示5位用户,同时提供了搜索功能。还详细讲解了如何通过登录过滤器确保只有登录用户才能访问特定资源,防止未登录用户直接访问查询接口。
摘要由CSDN通过智能技术生成

之前已经完成了管理系统的“增、删、查、改”操作,今天对查询用户显示界面做分页处理,按固定数量分页展示用户信息;同时实现“搜索”按钮的功能。
当用户数量过多时,我们无法在同一界面显示所有用户信息,需要分页展示,因此我们可以规定每个页面显示的用户数,使界面更加美观规整。在该项目中,我们设置每个页面展示五位用户的信息,在界面右下角显示分页的首页,尾页,下一页,上一页,以及每页的页数。

一、分页管理与查询

user-list.jsp

在这里截取了搜索与分页的页面实现部分

<!-- 搜索 -->
<form action="${pageContext.request.contextPath}/user/findAll.do?type=1"
	  method="post">
    <div class="col-md-4 data1">
	    <input type="text" class="form-control" name="username"
		    placeholder="username" value="">
    </div>
        <button type="submit" class="btn bg-maroon">搜索</button>
</form>

<!-- 分页 -->
</div>
<!-- /.box-body -->
	<div class="box-tools pull-right">
		<ul class="pagination">
			<li><a href="/user/findAll.do" aria-label="Previous">首页</a></li>
			<li><a href="/user/findAll.do?currentPage=${pageInfo.totalPage-1}">上一页</a></li>
			<c:forEach begin="1" end="${pageInfo.totalPage}" var="pageNum">
				<li><a href="/user/findAll.do?currentPage=${pageNum}">${pageNum}</a></li>
			</c:forEach>
			<li><a href="/user/findAll.do?currentPage=${pageInfo.currentPage+1}">下一页</a></li>
			<li><a href="/user/findAll.do?currentPage=${pageInfo.totalPage}" aria-label="Next">尾页</a></li>
		</ul>
	</div>

</div>
<!-- /.box-footer-->

PageInfo.java

实体类,保存分页的各属性:
包括用户列表、用户数、每页显示用户数、总页数和当前页;
我们通过这个实体类的对象来实现用户信息的显示和分页显示。

public class PageInfo<T> {
    private List<T> list;     //用户列表
    private int totalCount;   //用户数
    private int size;         //每页显示用户数
    private int totalPage;    //总页数
    private int currentPage;  //当前页

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    @Override
    public String toString() {
        return "PageInfo{" +
                "list=" + list +
                ", totalCount=" + totalCount +
                ", size=" + size +
                ", totalPage=" + totalPage +
                ", currentPage=" + currentPage +
                '}';
    }
}

UserController.java

通过参数将当前页传递过来
参数currentPage获取要展示的用户信息;参数username用户搜索功能。

@RequestMapping("findAll.do")
public ModelAndView findAll(@RequestParam(defaultValue = "1") int currentPage,String username,
                            @RequestParam(defaultValue = "0") int type,HttpSession session){

    if(type==1){
        session.setAttribute("searchname",username);
    }else if(type==0){
        username = (String) session.getAttribute("searchname");
    }else if(type==2){
        session.removeAttribute("searchname");
    }

    PageInfo<User> pageInfo = userService.findAll(currentPage,username);
    ModelAndView mv = new ModelAndView();
    mv.setViewName("user-list");
    mv.addObject("pageInfo",pageInfo);
    return mv;
}

IUserDao.java

IUserDao提供一个接口,说明要实现什么功能

List<User> findAll(@Param("start") int start, @Param("size")int size, @Param("username") String username);

int getTotalCount(@Param("username") String username);

UserMapper.xml

具体实现IUserDao接口的功能

<select id="findAll" resultType="user">
    select * from tb_user
    <if test="username!=null and username != '' ">
        where username like concat("%",#{username},"%")
    </if>
    limit #{start},#{size}
</select>

<select id="getTotalCount" resultType="int">
    select count(*) from tb_user
</select>

结果展示

1、分页显示用户信息,在此展示首页与尾页的分页面
首页
尾页
2、输入用户名,点击查询按钮即可查询用户信息
在此以用户Juddy为例展示查询功能
在这里插入图片描述

二、过滤器

在之前的项目介绍中,我们通过登录进入主界面,点击“用户管理”即可查询所有用户信息,在这个过程中访问路径为 /user/findAll.do,但当我们直接输入/user/findAll.do时,也成功查询到了用户信息,这样使得登录功能形同虚设,因此,我们通过过滤器来解决这种问题。
在过滤器类中,init()函数时初始化,destroy()函数用于销毁,doFilter()函数是拦截后需要执行的部分,我们在此函数内判断用户是否登录,如果用户已登录,则程序继续执行;如果用户未登录,则跳转至登录界面。

LoginFilter.java

public class LoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException{

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request= (HttpServletRequest) servletRequest;
        HttpServletResponse response= (HttpServletResponse) servletResponse;
        HttpSession session = request.getSession();
        User user= (User) session.getAttribute("user");
        String url=request.getRequestURL().toString();
        if(user==null && url.indexOf("login.do")==-1){
            response.sendRedirect("../login.jsp");
        }else {
            filterChain.doFilter(request,response);
        }
    }

    @Override
    public void destroy() {

    }
}

web.xml

<filter>
  <filter-name>loginFilter</filter-name>
  <filter-class>com.Augenstern.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>loginFilter</filter-name>
  <url-pattern>*.do</url-pattern>
</filter-mapping>

结果展示

在添加过滤器后,系统主界面访问路径为http://localhost:8081/,手动添加 /user/findAll.do并不能查询到用户信息,系统跳转至登录界面,访问路径变为http://localhost:8081/login.jsp
如下图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值