一、过滤器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 {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("init方法被调用了...");}//过滤任务@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {//可以处理request相关的参数System.out.println("请求被过滤器拦截...");//过滤的业务需要在这里完成!chain.doFilter(request,response);//放行//设置响应相关参数System.out.println("response来了...");}@Overridepublic 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.FORWARDdispatcherTypes = DispatcherType.REQUEST :默认 直接浏览器请求dispatcherTypes = DispatcherType.INCLUDE :包含当前路径
)public class MyFilter implements Filter {String character ;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {//System.out.println("init方法被调用了...");String value = filterConfig.getInitParameter("encoding");character = value ;}//过滤任务@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {//可以处理request相关的参数System.out.println("请求被过滤器拦截...");//过滤的业务需要在这里完成!chain.doFilter(request,response);//放行//设置响应相关参数System.out.println("response来了...");}@Overridepublic 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 {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}//过滤任务@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException, ServletException {//将req和resp转换成 ---HttpServletRequest和HttpServletResponseHttpServletRequest 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);}@Overridepublic 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"); //获取所有的uidfor(String uid:uids){// System.out.println(s);//调用AdminServiceAdminService adminService = new AdminServiceImpl() ;adminService.delete(uid);}//请求转发到/ulidrequest.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条数据}//调用AdminServiceAdminService 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;}@Overridepublic 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 {@Overridepublic 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*/@Overridepublic List<User> findUserList() {//调用AdminDaoAdminDao ad = new AdminDaoImpl() ;List<User> list = ad.selectAllUser();//可以加入逻辑:防止NullPointerExceptionif(list!=null){return list ;}return null ;}/*** 通过用户id获取用户* @param uid 用户的uid* @return  返回需要查询的用户*/@Overridepublic User getUser(String uid) {//创建Dao层对象AdminDao adminDao = new AdminDaoImpl() ;User user = adminDao.selectUserByUid(uid);if(user!=null){return user ;}return null;}//更新用户@Overridepublic void update(User user) {//调用DaoAdminDao adminDao = new AdminDaoImpl() ;adminDao.updateCostmUser(user) ;}//根据用uid删除用户@Overridepublic void delete(String uid) {AdminDao adminDao = new AdminDaoImpl() ;int count = adminDao.deleteUserByUid(uid);System.out.println(count);}/*** 分页查询用户* @param curPage  当前页码* @param pageSize    每页显示的条数* @return 返回分页实体*/@Overridepublic PageBean<User> getUserByPage(String curPage, String pSize) {//类型转换int currentPage = Integer.parseInt(curPage);int pageSize = Integer.parseInt(pSize);//调用daoAdminDao 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);//删除用户根据uidint 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*/@Overridepublic AdminUser selectUserByName(String username){//common-dbutils工具类//创建QueryRunner对象try {QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;//准备sqlString 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*/@Overridepublic List<User> selectAllUser() {//创建QueryRunnertry {QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;//准备sqlString 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查询用户@Overridepublic 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;}//更新用户@Overridepublic 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 ;}@Overridepublic 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   用户列表*/@Overridepublic List<User> findUserPage(int start, int pagesize) {//创建执行对象QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;//准备sqlString 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;}@Overridepublic 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);}
}

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

  1. python3 django html 中文乱码_解决django后台管理界面添加中文内容乱码问题

    在学习使用django做一个简单的个人博客项目,通过admin后台添加中文文章内容的时候,遇到中文内容显示乱码的问题. 排除了网上资料中的提到的几个问题: 1.数据上传默认采用的是unicode编码 ...

  2. Java学习日志Day29_数据库的约束_备份和还原_三大设计范式_多表查询

    -- 数据库的约束 -- 就是约束用户操作表的行为 -- 针对一些字段设置用户的限制!-- 默认约束 :default(当用户没有插入指定的这个字段,启用默认约束--->默认值)-- 创建一个张 ...

  3. 题解,java学习日志(3)

    题解 U - 速算24点 D - Bank(标记) E.2xN Grid C.Findand Replace D.Odd Queries 搜索题组 U - 速算24点 思路:map映射将特定字符转化成 ...

  4. Java学习日志(八): 可变参数,debug断点调试,静态导入,集合嵌套

    JavaEE学习日志持续更新----> 必看!JavaEE学习路线(文章总汇) Java学习日志(八) 可变参数 debug断点调试 静态导入 集合嵌套 可变参数 JDK1.5之后的新特性 作用 ...

  5. Java学习笔记(四)——接口

    Java学习笔记(四)--接口 1.格式 2.接口的特点 3.接口举例 1.格式 接口:初期理解,可以认为是一个特殊的抽象类.当抽象类中的方法都是抽象的,那么该类 可以通过接口的方式来表示. clas ...

  6. Java学习之路02_选择方向_旺旺老师

    提示:请您先阅读第一部分:Java学习之路01_软件江湖_旺旺老师 第二部分:帮派之争 就好像玩游戏要先选择角色种族,进入江湖要先选择帮派,那搞软件开发也要选择方向.个人总结的软件开发的方向:嵌入式开 ...

  7. java周志第二周_第二周JAVA学习日志

    从这周老师讲的东西中,我了解了许多以前不懂得东西.这周老师布置的作业,对我来说真的有点困难.通过上课的学习和下来翻书,勉强完成了一个登录界面的制作.这周学习的事件处理和swing组建以及swing组建 ...

  8. (十六)ATP应用测试平台——java应用中的过滤器Filter、拦截器Interceptor、参数解析器Resolver、Aop切面,你会了吗?

    前言 过滤器Filter.拦截器Interceptor.参数解析器Resolver.Aop切面是我们应用开发中经常使用到的技术,到底该如何使用这些web附属功能, 本小节我们就分别介绍一下其各自的用法 ...

  9. Java学习资料汇总(吐血分享)----持续更新中

    java学习攻略: 1.javase  html  css  javascript 历经5年锤炼(史上最适合初学者入门的Java基础视频) Java基础教程(java入门学习第一免费视频下载) Jav ...

最新文章

  1. vb socket的使用
  2. 使用libevent多线程验证Linux上的服务器惊群现象
  3. Python日志教程
  4. python拿什么做可视化界面好-手把手教你用Python做个可视化的“剪刀石头布”小游戏...
  5. 怎么改变光标Cursor(5种方法)
  6. Error:Internal error: org.gradle.tooling.BuildException: Could not run build action using Gradle dis
  7. 【汇编语言】8086汇编语言的debug中,t和p命令的区别
  8. 视频PPT互动问答丨数据驱动的业务实践专题
  9. 数据结构——二叉排序树
  10. iOS-@inerface的11条规范写法
  11. 深度学习算法:AlphaGo 算法
  12. 九大内置对象和四大作用域
  13. 倒立摆的实现 1.前期准备
  14. Go语言中rune方法如何使用
  15. 《计算机网络教程》(微课版 第五版)第七章 网络安全 课后习题及答案
  16. SQL连接MYSQL出现对象名无效_SQL数据库时提示对象名'XXX' 无效
  17. 大师启动u盘pe系统装系统(Win03PE增强版)
  18. 【数据分析与挖掘】数据分析学习及跟课学习 | csdn_Part 02 数据结构基础
  19. WIN7计算机管理里没有便携设备,如何显示及删除Win7设备管理器中隐藏的已用过的硬件设备信息(图)...
  20. python requests 下载文件例子

热门文章

  1. Kettle变量参数传递
  2. 数字孪生有哪些应用价值?
  3. 液体色差仪检测药品溶液颜色的方法和原理
  4. 一家小珠宝店老板的豪赌
  5. 深入学习USB(1)认识USB
  6. 10个提升着陆页设计效果的小技巧
  7. 微信公众号开发(二):利用责任链和模板方法模式设计消息的处理流程
  8. android测试版微信7.0下载地址,微信 7.0.9 for Android 全新发布,低调公布64位测试版下载地址...
  9. python 计算器
  10. itunes能不能php文件,您的账户已在apple store和itunes中被禁用怎么解决