训练大纲(第051天)

大家如果想快速有效的学习,思想核心是“以建立知识体系为核心”,具体方法是“守破离”。确保老师课堂上做的操作,反复练习直到熟练。

第97次(过滤器filter)

学习主题:过滤器filter

学习目标:

1 掌握 filter的作用

2 掌握filter的编写

对应文档:

对应作业

  1. 过滤器的介绍

根据视频中的讲解,完成以下内容

  1. 视频中的引入过滤器提到的项目中存在的问题是什么问题?

大多数网站中很多数据都是依赖session取出来的,但是session是有时 效的,如果session失效,所有依赖session获取到的数据都会失效。

  1. 根据视频讲解说说你对过滤器的理解,以及你觉得过滤器的作用是什么?

过滤器就是浏览器与服务器之间的一道过滤网,满足条件的可以向服务器发送请求,然后调用对应的servlet进行请求处理;不满足条件的不允许发送请求。

  1. 过滤器的创建和配置
  1. 视频中在代码注释中描述的问题是什么?

目前我们访问servlet,是可以直接进行访问的,没有进行任何防护。可能会造成服务器资源的浪费,以及安全性不高。我们希望真的在请求被servlet处理之前,进行一次请求的校验,符合要求再调用对应的servlet进行处理请求。

  1. 创建过滤器要实现的接口是?

Filter接口

  1. 创建的过滤器类中需要实现的三个方法是?

init(FilterConfig filterConfig)

doFilter(ServletRequest request, ServletResponse response,FilterChain chain)

destroy()

  1. 在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>

  1. 过滤器之doFilter和init和destory方法
  1. doFilter方法的作用是?参数是及作用是?

doFilter方法

服务器在接收到浏览器发过来的请求后,先解析请求信息,创建对象request和response,然后根据请求url地址判断如果符合过滤器的过滤范围,则会调用过滤器中的doFilter方法来进行请求拦截,并将request和response对象作为实参传递给doFilter方法。我们可以在doFilter,方法中声明过滤器拦截代码。

参数:

ServletRequest:接收此次拦截的请求的request实参

ServletResponse:接收此次拦截的请求的response实参

FilterChain:进行请求放行

  1. init方法的执行时机是?

服务器启动的时候

  1. destory方法的执行时机是?

服务器关闭的时候

  1. 过滤器之拦截范围的配置
  1. 过滤器的拦截范围的配置是?及拦截的范围是什么?

拦截所有:/*

拦截部分的servlet的请求:*.do

拦截指定的servlet的请求:要和拦截的指定的url-pattern配置一致。

  1. 过滤器案例之统一请求编码格式
  1. 根据视频讲解使用过滤器完成编码格式的统一设置。

@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

对应文档:

对应作业

  1. 过滤器之session管理放行登录页面和登录请求
  1. 视频中的session管理的基本思路是什么?

在过滤器中获取session对象,然后查看session中的数据是否还在,如果数据没了,则因为session失效则重定向到登录页面。如果数据还在session没有失效,则放行。

  1. 视频中在过滤器中实现的session管理存在的问题是?。

在过滤器中使用session校验后发现登录页面的请求也就是login.jsp的请求也会被过滤器拦截,而此时session中没有相关数据的造成又重定向到登录页面。。。

  1. 过滤器之session管理静态资源放行和登录页面跳转
  1. 视频中session管理的代码仍然存在的问题是?

过滤器会拦截所有的请求,包括静态资源,造成页面中的样式和动态效果等出不来。

  1. 过滤器之session管理ajax请求优化
  1. 根据视频讲解在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>

  1. 过滤器之权限管理功能需求分析和数据库设计
  1. 权限管理的需求是什么?

不同的用户在对同一功能使用时,有的用户可以直接使用,有的用户会被提示权限不足。

  1. 视频中讲解的思路是什么?
  2. 在数据库中创建一个url权限表,该表存储了该系统需要被管理的url。
  3. 在数据库中创建用户权限中间表,用来进行权限分配。
  4. 在数据库中 将权限给用户分配好
  5. 在用户登录成功后查询该用户具备的url权限,存储到该用户的session中
  6. 在过滤器中对当前发起请求的用户的请求地址进行校验,校验该用户是否具备该请求地址的权限,如果具备则放行执行,如果不具备则提示权限不足。
  7. 过滤器之权限管理功能数据实现和登录查询权限实现
  1. 根据视频,完成视频中的功能。




java 重定向后session信息丢失 解决重定向session消失_监听器


  1. 过滤器之权限管理大结局
  1. 根据视频完整实现权限管理功能


java 重定向后session信息丢失 解决重定向session消失_数据_02


java 重定向后session信息丢失 解决重定向session消失_数据_03


  1. 监听器的引入和介绍
  1. 视频中统计当前在线人数的思路是什么

统计当前系统的session的个数,一个session意味着一个在线的用户,在session被创建的时候使用计数器+1,session被销毁的时候计数器-1,将计数器存储在ServletContext对象中。

  1. 视频中的监听器的作用是什么?

监听request、session、application三个作用域的创建、销毁和数据的变更

  1. 完成删除功能的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");

}

}

  1. 监听器的使用之监听request对象
  1. 监听request对象的两个接口什么?

ServletRequestListener、ServletRequestAttributeListener

  1. 监听request对象的两个接口的方法是?作用分别是?

ServletRequestListener:

requestInitialized(ServletRequestEvent sre):监听request对象的创建

requestDestroyed(ServletRequestEvent sre):监听request对象的销毁

ServletRequestAttributeListener:

attributeAdded(ServletRequestAttributeEvent srae):监听request对象作用域的增加

attributeRemoved(ServletRequestAttributeEvent srae):监听request对象作用域的删除

attributeReplaced(ServletRequestAttributeEvent srae):监听request对象作用域的修改

  1. 在web.xml配置监听器的标签是?给出一个配置示例

listener标签

<listener>

<listener-class>com.bjsxt.listener.MyListener</listener-class>

</listener>

  1. 监听器之监听session和application对象
  1. 监听session对象的接口是?

HttpSessionListener

HttpSessionAttributeListener

  1. 监听session对象的接口的方法分别是?作用 是?

HttpSessionListener:

sessionCreated(HttpSessionEvent se):监听session对象的创建

sessionDestroyed(HttpSessionEvent se):监听session对象的销毁

HTTPSessionAttributeListener:

attributeAdded(HttpSessionBindingEvent event):监听session对象作用域的增加

attributeRemoved(HttpSessionBindingEvent event):监听session对象作用域的删除

attributeReplaced(HttpSessionBindingEvent event):监听session对象作用域的修改

  1. 监听application对象的接口是?

ServletContextListener

ServletContextAttributeListener

  1. 监听application对象的接口的方法分别是?作用是?

ServletContextListener

contextInitialized(ServletContextEvent sce):监听application对象的创建

contextDestroyed(ServletContextEvent sce):监听application对象的销毁

ServletContextAttributeListener

attributeAdded(ServletContextAttributeEvent event):监听application对象作用域的增加

attributeRemoved(ServletContextAttributeEvent event):监听application对象作用域的删除

attributeReplaced(ServletContextAttributeEvent event):监听application镀锡作用域的修改

  1. 监听器案例之当前在线人数统计
  1. 根据视频,完成统计当前在线人数功能。

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>

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。