训练大纲(第051天)
大家如果想快速有效的学习,思想核心是“以建立知识体系为核心”,具体方法是“守破离”。确保老师课堂上做的操作,反复练习直到熟练。
第97次(过滤器filter)
学习主题:过滤器filter
学习目标:
1 掌握 filter的作用
2 掌握filter的编写
对应文档:
无
对应作业
- 过滤器的介绍
根据视频中的讲解,完成以下内容
- 视频中的引入过滤器提到的项目中存在的问题是什么问题?
大多数网站中很多数据都是依赖session取出来的,但是session是有时 效的,如果session失效,所有依赖session获取到的数据都会失效。
- 根据视频讲解说说你对过滤器的理解,以及你觉得过滤器的作用是什么?
过滤器就是浏览器与服务器之间的一道过滤网,满足条件的可以向服务器发送请求,然后调用对应的servlet进行请求处理;不满足条件的不允许发送请求。
- 过滤器的创建和配置
- 视频中在代码注释中描述的问题是什么?
目前我们访问servlet,是可以直接进行访问的,没有进行任何防护。可能会造成服务器资源的浪费,以及安全性不高。我们希望真的在请求被servlet处理之前,进行一次请求的校验,符合要求再调用对应的servlet进行处理请求。
- 创建过滤器要实现的接口是?
Filter接口
- 创建的过滤器类中需要实现的三个方法是?
init(FilterConfig filterConfig)
doFilter(ServletRequest request, ServletResponse response,FilterChain chain)
destroy()
- 在web.xml中配置过滤器的代码是?
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.bjsxt.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 过滤器之doFilter和init和destory方法
- doFilter方法的作用是?参数是及作用是?
doFilter方法
服务器在接收到浏览器发过来的请求后,先解析请求信息,创建对象request和response,然后根据请求url地址判断如果符合过滤器的过滤范围,则会调用过滤器中的doFilter方法来进行请求拦截,并将request和response对象作为实参传递给doFilter方法。我们可以在doFilter,方法中声明过滤器拦截代码。
参数:
ServletRequest:接收此次拦截的请求的request实参
ServletResponse:接收此次拦截的请求的response实参
FilterChain:进行请求放行
- init方法的执行时机是?
服务器启动的时候
- destory方法的执行时机是?
服务器关闭的时候
- 过滤器之拦截范围的配置
- 过滤器的拦截范围的配置是?及拦截的范围是什么?
拦截所有:/*
拦截部分的servlet的请求:*.do
拦截指定的servlet的请求:要和拦截的指定的url-pattern配置一致。
- 过滤器案例之统一请求编码格式
- 根据视频讲解使用过滤器完成编码格式的统一设置。
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 设置请求编码格式
request.setCharacterEncoding("utf-8");
//设置响应编码格式
response.setContentType("text/html;charset=utf-8");
//放行
chain.doFilter(request, response);
}
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。
第98次(listener 监听器)
学习主题:listener 监听器
学习目标:
1 掌握监听器的作用
2 掌握监听器的编写
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应文档:
无
对应作业
- 过滤器之session管理放行登录页面和登录请求
- 视频中的session管理的基本思路是什么?
在过滤器中获取session对象,然后查看session中的数据是否还在,如果数据没了,则因为session失效则重定向到登录页面。如果数据还在session没有失效,则放行。
- 视频中在过滤器中实现的session管理存在的问题是?。
在过滤器中使用session校验后发现登录页面的请求也就是login.jsp的请求也会被过滤器拦截,而此时session中没有相关数据的造成又重定向到登录页面。。。
- 过滤器之session管理静态资源放行和登录页面跳转
- 视频中session管理的代码仍然存在的问题是?
过滤器会拦截所有的请求,包括静态资源,造成页面中的样式和动态效果等出不来。
- 过滤器之session管理ajax请求优化
- 根据视频讲解在session管理代码中完成ajax请求的优化处理。
function del(uid){
if(confirm("您确定要删除吗?")){
$.get("data",{method:"delUserInfo",uid:uid},function(data){
//判断是否是用户删除成功
if("true"==data){
if(eval(data)){
alert("用户删除成功");
window.location.href="data?method=selUserInfo";
}
}else{
window.top.location.href="login.jsp";
}
});
}
}
</script>
- 过滤器之权限管理功能需求分析和数据库设计
- 权限管理的需求是什么?
不同的用户在对同一功能使用时,有的用户可以直接使用,有的用户会被提示权限不足。
- 视频中讲解的思路是什么?
- 在数据库中创建一个url权限表,该表存储了该系统需要被管理的url。
- 在数据库中创建用户权限中间表,用来进行权限分配。
- 在数据库中 将权限给用户分配好
- 在用户登录成功后查询该用户具备的url权限,存储到该用户的session中
- 在过滤器中对当前发起请求的用户的请求地址进行校验,校验该用户是否具备该请求地址的权限,如果具备则放行执行,如果不具备则提示权限不足。
- 过滤器之权限管理功能数据实现和登录查询权限实现
- 根据视频,完成视频中的功能。
- 过滤器之权限管理大结局
- 根据视频完整实现权限管理功能
- 监听器的引入和介绍
- 视频中统计当前在线人数的思路是什么
统计当前系统的session的个数,一个session意味着一个在线的用户,在session被创建的时候使用计数器+1,session被销毁的时候计数器-1,将计数器存储在ServletContext对象中。
- 视频中的监听器的作用是什么?
监听request、session、application三个作用域的创建、销毁和数据的变更
- 完成删除功能的Servlet的实现
public void delUserInfo(HttpServletRequest req, HttpServletResponse resp) throws IOException{
//获取请求信息
String uid = req.getParameter("uid");
//处理请求信息
UserService us = new UserServiceImpl();
int i= us.delUserInfoService(uid);
//响应处理结果
if(i>0){
resp.getWriter().write("true");
}else{
resp.getWriter().write("false");
}
}
- 监听器的使用之监听request对象
- 监听request对象的两个接口什么?
ServletRequestListener、ServletRequestAttributeListener
- 监听request对象的两个接口的方法是?作用分别是?
ServletRequestListener:
requestInitialized(ServletRequestEvent sre):监听request对象的创建
requestDestroyed(ServletRequestEvent sre):监听request对象的销毁
ServletRequestAttributeListener:
attributeAdded(ServletRequestAttributeEvent srae):监听request对象作用域的增加
attributeRemoved(ServletRequestAttributeEvent srae):监听request对象作用域的删除
attributeReplaced(ServletRequestAttributeEvent srae):监听request对象作用域的修改
- 在web.xml配置监听器的标签是?给出一个配置示例
listener标签
<listener>
<listener-class>com.bjsxt.listener.MyListener</listener-class>
</listener>
- 监听器之监听session和application对象
- 监听session对象的接口是?
HttpSessionListener
HttpSessionAttributeListener
- 监听session对象的接口的方法分别是?作用 是?
HttpSessionListener:
sessionCreated(HttpSessionEvent se):监听session对象的创建
sessionDestroyed(HttpSessionEvent se):监听session对象的销毁
HTTPSessionAttributeListener:
attributeAdded(HttpSessionBindingEvent event):监听session对象作用域的增加
attributeRemoved(HttpSessionBindingEvent event):监听session对象作用域的删除
attributeReplaced(HttpSessionBindingEvent event):监听session对象作用域的修改
- 监听application对象的接口是?
ServletContextListener
ServletContextAttributeListener
- 监听application对象的接口的方法分别是?作用是?
ServletContextListener
contextInitialized(ServletContextEvent sce):监听application对象的创建
contextDestroyed(ServletContextEvent sce):监听application对象的销毁
ServletContextAttributeListener
attributeAdded(ServletContextAttributeEvent event):监听application对象作用域的增加
attributeRemoved(ServletContextAttributeEvent event):监听application对象作用域的删除
attributeReplaced(ServletContextAttributeEvent event):监听application镀锡作用域的修改
- 监听器案例之当前在线人数统计
- 根据视频,完成统计当前在线人数功能。
public class MyListener implements HttpSessionListener,ServletContextListener {
/***
* application对象的创建和销毁
*/
@Override
public void contextInitialized(ServletContextEvent sce) {
//创建计数器
int count=0;
//获取application对象
ServletContext sc = sce.getServletContext();
//将计数器存储到application对象中
sc.setAttribute("count", count);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
/***
* session对象的创建和销毁
*/
@Override
public void sessionCreated(HttpSessionEvent se) {
//获取application对象
ServletContext sc = se.getSession().getServletContext();
//获取计数器
int count = (int) sc.getAttribute("count");
//计数器自增
count++;
//将计数器存放到application对象中
sc.setAttribute("count", count);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
//获取application对象
ServletContext sc = se.getSession().getServletContext();
//获取计数器
int count = (int) sc.getAttribute("count");
//计数器自减
count--;
//将计数器存放到application对象中
sc.setAttribute("count", count);
}
<listener>
<listener-class>com.bjsxt.listener.MyListener</listener-class>
</listener>
<div><span style="font-size: 13px;color: white;position: relative;left: 400px;top: 23px">当前在线人数:${applicationScope.count}</span></div>
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。