Java学习日志Day41_过滤器Filter 接口_项目更新:后台管理/前台统一处理全局乱码and用户列表---删除以及分页功能

一、过滤器Filter 接口

过滤器
1.导包:

<groupId>com.qf</groupId>
<artifactId>FilterAndJquery</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
  1. java.servlet.Filter:
  2. 三个重写方法(生命历程)
/* 自定义一个类,实现Filter接口重写里面三个方法
 */
@WebFilter
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init方法被调用了...");
    }

    //过滤任务
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException {
            //可以处理request相关的参数
          System.out.println("请求被过滤器拦截...");

            //过滤的业务需要在这里完成!

            chain.doFilter(request,response);//放行

             //设置响应相关参数
         System.out.println("response来了...");
    }

    @Override
    public void destroy() {
        System.out.println("过滤器被销毁了...");
    }
}

4.servlet:

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {


    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("doGet方法被调用了");

    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);

    }
}

5.使用标签的方式过滤器

注解的方式:
	@WebFilter

@WebFilter(urlPatterns = "/hello",
        设置过滤器的初始化参数
			initParams =@WebInitParam(name = "encoding",value = "utf-8")
        配置过滤规则
			dispatcherTypes = DispatcherType.FORWARD
			dispatcherTypes = DispatcherType.REQUEST :默认 直接浏览器请求
			dispatcherTypes = DispatcherType.INCLUDE :包含当前路径
)


public class MyFilter implements Filter {
    String character ;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //System.out.println("init方法被调用了...");
        String value = filterConfig.getInitParameter("encoding");
        character = value ;
    }
	
	//过滤任务
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException {
            //可以处理request相关的参数
          System.out.println("请求被过滤器拦截...");

            //过滤的业务需要在这里完成!

            chain.doFilter(request,response);//放行


             //设置响应相关参数
         System.out.println("response来了...");
    }

    @Override
    public void destroy() {
        System.out.println("过滤器被销毁了...");
    }
}

二、项目更新:

目标:1). 后台管理/前台统一处理全局乱码;
		   2). 用户删除功能;
		   3). 用户分页功能。

分页逻辑
ulist.jsp:

	<body>
    <%--添加响应式属性:
        防止浏览器分别尺寸不断的进行变化,内容不会紊乱(自动适应屏幕分辨率)
    --%>
    <div class="table-responsive">
       <form id="myForm" action="${pageContext.request.contextPath}/delSelected" method="post">
        <table class="table table-hover table-bordered">
            <tr>
                <td>
                    <input type="checkbox" id="fistCbx" />
                </td>
                <th>用户id</th>
                <th>用户名</th>
                <th>密码</th>
                <th>真实姓名</th>
                <th>邮箱</th>
                <th>电话</th>
                <th>出生日期</th>
                <th>性别</th>
                <th>是否激活</th>
                <th>操作</th>
            </tr>
            <c:forEach items="${userList}" var="u" varStatus="status">
                <tr>
                   <td>
                       <input type="checkbox" name="uid" value="${u.uid}"/>
                   </td>
                    <td>${u.uid}</td>
                    <td>${u.username}</td>
                    <td>${u.password}</td>
                    <td>${u.name}</td>
                    <td>${u.email}</td>
                    <td>${u.telephone}</td>
                    <td>${u.birthday}</td>
                    <td>${u.sex}</td>
                    <td>${u.state}</td>
                    <td>
                       <%-- <input type="button" class="btn-primary" onclick="update()" value="修改"/>--%>
                        <%--
                            将超链接跳转 禁用掉javascript:void(0)
                        --%>
                        <a href="${pageContext.request.contextPath}/findUser?uid=${u.uid}" class="btn btn-primary">修改</a>
                        <a href="${pageContext.request.contextPath}/deleteUser?uid=${u.uid}"   class="btn btn-danger">删除</a>
                        <%--http://localhost:8080/WEB/findUser?uid=xxx--%>
                    </td>
                </tr>

            </c:forEach>

          <%--  <tr>
                <td>1</td>
                <td>旋风小子</td>
                <td>123456</td>
                <td>张三</td>
                <td>zhangsan@163.com</td>
                <td>13366668888</td>
                <td>1990-2-27</td>
                <td></td>
                <td>0</td>
                <td>FC37A67AA02E4C3886D7E0AF0886CDA3</td>
                <td>
                    <input type="button" class="btn-primary" value="修改"/>
                    <input type="button" class="btn-danger" value="删除"/>
                </td>
            </tr>
            <%----%>
             <div style="float: right;margin-right: 30px;font-size: 30px">
        <a class="btn-default" href="javascript:void(0)" id="delSelected" >删除选中</a>
    </div>


    <div class="page-class">
    <%--boostrap的分页组件--%>
        <nav aria-label="Page navigation">
            <ul class="pagination">
                <li>
                    <a href="#" aria-label="上一页">
                        <span aria-hidden="true">&laquo;</span>
                    </a>
                </li>
                <c:forEach begin="1" end="${pb.totalPage}" var="n" varStatus="status">
                       <li><a href="#">${n}</a></li>
                </c:forEach>
               <%-- <li><a href="#">2</a></li>
                <li><a href="#">3</a></li>
                <li><a href="#">4</a></li>
                <li><a href="#">5</a></li>--%>
                <li>
                    <a href="#" aria-label="下一页">
                        <span aria-hidden="true">&raquo;</span>
                    </a>
                </li>
            </ul>
        </nav>
    </div>
</body>
<script>

    /*function delSingleUser(id){
        //alert(id) ;

        //获取哪些
    }*/


//触发页面载入事件:让所有的body内容加载完毕
window.onload  = function(){
    //删除选中
//id="delSelected"

        document.getElementById("delSelected").onclick = function(){
            if(confirm("您确定要删除这些用户吗?")){

            //定义标记
            var flag = false ;
            //alert("删除选中...") ;
            //获取被选中的哪些条目信息的状态
            var cbx = document.getElementsByName("uid") ;
            //继续遍历
            for(var i = 0 ; i < cbx.length ; i ++){
                if(cbx[i].checked){
                    //选中了
                    //更改标记
                    flag = true ;
                    break ;
                }
            }

            //如果flag为true,执行表单提交
            if(flag){
                document.getElementById("myForm").submit() ;
            }
        }
    }
}


    //全选,反选
    //获取id="fistCbx"的标签对象,给设置点击事件
    document.getElementById("fistCbx").onclick = function(){

        // document.getElementById("fistCbx") ----this
        //通过name="uid"获取所有的  input标签对象
        var cbx = document.getElementsByName("uid") ;
        //遍历
        for(var i = 0 ; i < cbx.length ; i++){
            //让每一个cbx这个对象状态和this的状态一直
            cbx[i].checked = this.checked;
        }
    }
</script>
</html>

CharacterFilter.java:定义过滤器

	/* 定义过滤器:解决全局的中文乱码(get/post)
 */
//直接配置
@WebFilter("/*")
public class CharacterFilter  implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    //过滤任务
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {

        //将req和resp转换成 ---HttpServletRequest和HttpServletResponse
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;

        //获取前台的提交方式
        String method = request.getMethod();
        //判断
        if(method.equalsIgnoreCase("post")){
            //解决post中文路乱码
            request.setCharacterEncoding("utf-8");
        }

        //响应的中文乱码
        response.setContentType("text/html;charset=utf-8");

        //放行
        chain.doFilter(req,resp);

    }
    @Override
    public void destroy() {

    }
}

DeleteSelectedServlet.java:定义删除的servlet

import com.qf.service.AdminService;
import com.qf.service.impl.AdminServiceImpl;

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 java.io.IOException;

@WebServlet("/delSelected")
public class DeleteSelectedServlet extends HttpServlet {


    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取所有的uid的值
        String[] uids = request.getParameterValues("uid"); //获取所有的uid
        for(String uid:uids){
           // System.out.println(s);

            //调用AdminService
            AdminService adminService = new AdminServiceImpl() ;
            adminService.delete(uid);
        }

        //请求转发到/ulid
        request.getRequestDispatcher("/ulist").forward(request,response);



    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);
    }
}

FindUserByPageServlet.java:分页

import com.qf.entity.PageBean;
import com.qf.entity.User;
import com.qf.service.AdminService;
import com.qf.service.impl.AdminServiceImpl;

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 java.io.IOException;

@WebServlet("/findUserByPage")
public class FindUserByPageServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //接收两个参数
        //当前页码
        String currentPage = request.getParameter("curPage");
        String pageSize = request.getParameter("pSize") ;
        //判断
        if(currentPage==null || currentPage==""){
            currentPage = "1" ; // 赋值第一页
        }
        if(pageSize ==null || pageSize ==""){
            pageSize = "2" ; //每页显示2条数据
        }

        //调用AdminService
        AdminService adminService = new AdminServiceImpl() ;
        PageBean<User> pb = adminService.getUserByPage(currentPage, pageSize);
        System.out.println(pb);



        //将PageBean对象存储在request域中
        request.setAttribute("pb",pb);
        //请求转发到ulist.jsp中进行数据展示
        request.getRequestDispatcher("/admin/ulist.jsp").forward(request,response);
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);
    }
}

PageBean.java:分页实体类

/* 自定义分页实体
 */
public class PageBean<T> {
    private int currentPage ; //当前页码
    private int totalPage ;//总页数
    private int totalCount ;//总记录数
    private int pageSize ; //每页显示条数
    private List<T> list ;//针对哪个实体进行分页

    public int getCurrentPage() {
        return currentPage;
    }

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


    //总页数
    public int getTotalPage() {
        return ((totalCount% pageSize)==0 ? totalCount/pageSize : totalCount/pageSize+1  ) ;
    }

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

    public int getTotalCount() {
        return totalCount;
    }

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

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

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

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

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

AdminService.java:删除业务抽象方法

import com.qf.entity.User;

import java.util.List;

/* 针对管理员操作业务接口层
 */
public interface AdminService {

    //定义功能
    //根据用户名查询用户
    boolean isLogin(String username, String password) ;

    /**
     * 查询用户列表
     * @return
     */
    List<User>   findUserList() ;

    /**
     * 通过用户id获取用户
     * @param uid
     * @return
     */
    User getUser(String uid) ;

    /**
     * 更新用户
     * @param user
     */
    void update(User user) ;

    //更加uid删除用户
    void delete(String uid) ;

	//最终需要返回给客户端:PageBean

    /**
     * 分页查询功能
     * @param currentPage  当前页码
     * @param pageSize    每页显示的条数
     * @return   返回的分页实体
     */
    PageBean<User> getUserByPage(String curPage,String pSize) ;
}

AdminServiceImpl.java:重写删除的用户方法

import com.qf.dao.AdminDao;
import com.qf.dao.impl.AdminDaoImpl;
import com.qf.entity.AdminUser;
import com.qf.entity.User;
import com.qf.service.AdminService;

import java.util.List;

/* 针对管理员用户业务接口实现层
 */
public class AdminServiceImpl implements AdminService {
    @Override
    public boolean isLogin(String username,String password) {


            //调用dao层:完成数据的查询
            AdminDao ad = new AdminDaoImpl() ;

            AdminUser adminUser = ad.selectUserByName(username);
            //逻辑判断
            //获取查询到的用户的密码
            if(adminUser.getAdminPassword().equals(password)){
                    //一致
                return true ;
            }
            return false ;
    }

    /**
     * 查询用户列表
     * @return
     */
    @Override
    public List<User> findUserList() {
        //调用AdminDao
        AdminDao ad = new AdminDaoImpl() ;
        List<User> list = ad.selectAllUser();
        //可以加入逻辑:防止NullPointerException
        if(list!=null){
            return list ;
        }
        return null ;
    }

    /**
     * 通过用户id获取用户
     * @param uid 用户的uid
     * @return  返回需要查询的用户
     */
    @Override
    public User getUser(String uid) {
        //创建Dao层对象
        AdminDao adminDao = new AdminDaoImpl() ;
        User user = adminDao.selectUserByUid(uid);
        if(user!=null){
            return user ;
        }
        return null;
    }

    //更新用户
    @Override
    public void update(User user) {

        //调用Dao
        AdminDao adminDao = new AdminDaoImpl() ;
        adminDao.updateCostmUser(user) ;
    }

    //根据用uid删除用户
    @Override
    public void delete(String uid) {
        AdminDao adminDao = new AdminDaoImpl() ;

        int count = adminDao.deleteUserByUid(uid);
        System.out.println(count);
    }

	/**
     * 分页查询用户
     * @param curPage  当前页码
     * @param pageSize    每页显示的条数
     * @return 返回分页实体
     */
    @Override
    public PageBean<User> getUserByPage(String curPage, String pSize) {
        //类型转换
        int currentPage = Integer.parseInt(curPage);
        int pageSize = Integer.parseInt(pSize);

        //调用dao
        AdminDao dao = new AdminDaoImpl() ;
        //定义变量start:起始索引
        int start = (currentPage-1)*pageSize ;
        List<User> list = dao.findUserPage(start,pageSize) ;

        //查询总记录数
        int totalCount = dao.getUserTotalCount() ;
        
        PageBean<User> pb = new PageBean<User>() ;
        pb.setCurrentPage(currentPage);
        pb.setList(list);
        pb.setPageSize(pageSize);
        pb.setTotalCount(totalCount);
        return pb;
    }
}

AdminDao.java:操作数据库的访问层的删除抽象方法

import com.qf.entity.AdminUser;
import com.qf.entity.User;

import java.util.List;

/* 针对管理员操作的数据库访问接口层
 */
public interface AdminDao {

    //根据用户名查询用户
    AdminUser selectUserByName(String username) ;

    /*
    * 查询用户列表
    * */
    List<User> selectAllUser() ;

    //查询用户
    User selectUserByUid(String uid);

    //更新用户
    int updateCostmUser(User user);

    //删除用户根据uid
    int deleteUserByUid(String uid);

	/**
     * 根据起始索引以及每页显示条数
     * @param start   起始索引
     * @param pagesize 每页显示条数
     * @return   用户列表
     */
    List<User> findUserPage(int start, int pagesize);

    /**
     * 查询总记录数
     * @return
     */
    int getUserTotalCount();
}

AdminDaoImpl.java:重写操作数据库的访问层的删除抽象方法

import com.qf.dao.AdminDao;
import com.qf.entity.AdminUser;
import com.qf.entity.User;
import com.qf.utils.MyJdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.SQLException;
import java.util.List;

/* 针对管理用户的数据库访问接口实现层
 */
public class AdminDaoImpl implements AdminDao {


    /**
     * 根据用户名查询用户
     * @param username
     * @return
     */
    @Override
    public AdminUser selectUserByName(String username){
        //common-dbutils工具类
        //创建QueryRunner对象
        try {
            QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;
            //准备sql
            String sql = "select * from admin_user  where  adminName=  ? " ;

            //执行查询
            AdminUser adminUser = qr.query(sql, new BeanHandler<AdminUser>(AdminUser.class), username);
            System.out.println(adminUser);

            return adminUser;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null ;
    }

    /**
     * 查询用户列表
     * @return
     */
    @Override
    public List<User> selectAllUser() {
        //创建QueryRunner
        try {
            QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;
            //准备sql
            String sql = "select * from user" ; //开发中*(不要出现,全表字段)
            List<User> list = qr.query(sql, new BeanListHandler<User>(User.class));
            return list ;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    //根据uid查询用户
    @Override
    public User selectUserByUid(String uid) {

        try {
            QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;
            String sql = "select * from user where uid = ?" ;
            User user = qr.query(sql, new BeanHandler<User>(User.class), uid);
            return user ;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    //更新用户
    @Override
    public int updateCostmUser(User user) {
        QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;
        String sql = "update user set username = ?,password = ?, name = ? ,sex=?,state=? where uid = ? " ;
        try {
            int count = qr.update(sql, user.getUsername(), user.getPassword(), user.getName(), user.getSex(), user.getState(), user.getUid());
            System.out.println(count);
            return count ;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0 ;
    }

    @Override
    public int deleteUserByUid(String uid) {
        QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;
        String sql = "delete from user where  uid = ?" ;
        try {
            int count = qr.update(sql, uid);
            return count ;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0 ;
    }

	/**
     * 根据起始索引以及每页显示条数
     * @param start   起始索引
     * @param pagesize 每页显示条数
     * @return   用户列表
     */

    @Override
    public List<User> findUserPage(int start, int pagesize) {
        //创建执行对象
        QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;

        //准备sql
        String sql = "select * from user  limit ?,?" ;
        try {
            List<User> list = qr.query(sql, new BeanListHandler<User>(User.class), start, pagesize);
            return list ;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public int getUserTotalCount() {

        QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;
        String sql = "select count(*) from user" ;
        try {
           ;
            String value = qr.query(sql, new ScalarHandler<>()).toString();
            int count = new Integer(value).intValue();


            return count ;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    public static void main(String[] args) {
        AdminDao dao = new AdminDaoImpl() ;
        int userTotalCount = dao.getUserTotalCount();
        System.out.println(userTotalCount);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

igfff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值