ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:132.08KB ,
资源ID:8804107      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8804107.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(day20用户登录观察者模式.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

day20用户登录观察者模式.docx

1、day20用户登录观察者模式Day20权限/监听器/观察者模式1、 今天的主要内容1:实现权限过虑器。综合示例。相对比较复杂。 5个表联合工作。 ER实体关系图。 要用两个过虑器实现安全过虑。认证过虑器和验证过虑器。2、监听器观察者模式 观察者。被观察者。观察事件。3、事件监听器分类:监听ServletContext对象。监听HttpSession对象。监听HttpServletRequest对象。监听器的配置方式。listener4、功能:用ContextListener监听网站的访问量。需要记录。用HttpSessionListener监听在线人数。用HttpSessionAttribut

2、eListener监听登录人数。通过监听HttpSession管理在线用户。并能踢出在线用户。5、在线支付 使用第三方支付。补:内省在数据封装中起的作用?数据库反射与类反射共同使用带来的方便。 内省 一个核心类:PropertyDescriptor。 内省本质上是反射。补:JNDI2、 以下是课上的记录3、要求不同的用户登录以后可以看到不同的菜单。(后台可以实现对用户菜单的管理。)第一步:分析数据结构 1:用户表 表名:users列名类型说明idVarchar(32)主键nameVarchar(30) 2:角色表 3:菜单表 E-R图 (Entry-Relationship 实体关系图)第二步

3、:先写入表中几行数据进行基本分析insert into users values(U001,Jack,1234);insert into users values(U002,张三,4321);insert into users values(U003,Tom,1111);insert into roles values(R001,管理员,);insert into roles values(R002,教师,);insert into roleuser values(U001,R001);insert into roleuser values(U002,R002);insert into men

4、us values(M001,系统管理,/sys.jsp);insert into menus values(M002,用户管理,/user.jsp);insert into menus values(M003,角色管理,/role.jsp);insert into rolemenu values(M001,R001);insert into rolemenu values(M002,R001);insert into rolemenu values(M003,R001);insert into rolemenu values(M003,R002);/*查询某个拥有某个角色*/select u

5、.name,r.namefrom users u inner join roleuser ru on u.id=ru.uid inner join roles r on ru.rid=r.id; /*某角色拥有某菜单*/select r.name,m.namefrom roles r inner join rolemenu rm on r.id=rm.rid inner join menus m on rm.mid=m.id; /*查询某人拥有某个菜单*/select u.name,m.namefrom users u inner join roleuser ru on u.id=ru.uid

6、 inner join roles r on ru.rid=r.id inner join rolemenu rm on r.id=rm.rid inner join menus m on rm.mid=m.id;第三步:创建JavaBean(领域模型)和工具类public class User private String name; private String id; private String pwd; 连接数据库的工具类:第三步:设计界面的第四步:实现用户登录 分包:提供用户的登录,退出修改 Cn.itcast.user. userServlet service userServi

7、ce dao userDao菜单Cn.itcast.menu MenuServlet MenuService MenuDao角色对主页面来只有Servvlet没有service,调用别的service实现。Cn.itcast.main MainServlet (没有Service)第五步:开发登录页面 form name=name action= method=post Name: pwd: 第六步:开发整个的usre包Cn.itcast.user. userServlet service userService dao userDao第七步:实菜单的查询功能 菜单是菜单的功能包。 主功能,有

8、自己的servvlet MainServvlet第八步:使用过虑器验证/jsp/* 这只是第一步,只是验证用户有没有访问的凭证。认证.第九步:验证 package cn.itcast.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;impor

9、t javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import mons.dbutils.QueryRunner;import mons.dbutils.handlers.ScalarHandler;import cn.itcast.domain.User;import cn.itcast.utils.DataSourceUtils;public class AuthFilter implements Filter public void init(FilterConfig filterCo

10、nfig) throws ServletException / TODO Auto-generated method stub public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException /获取uri HttpServletRequest req = (HttpServletRequest) request; String uri = req.getRequestURI();/Http:/localho

11、st:8080/day20/jsps/role.jsp-day20/jsps/role.jsp uri = uri.replace(req.getContextPath(), ); /组成sql String sql = SELECT COUNT(1)+ FROM menus m INNER JOIN rolemenu rm ON m.id=rm.mid+ INNER JOIN roles r ON r.id=rm.rid+ INNER JOIN roleuser ru ON r.id=ru.rid+ WHERE ru.uid=? AND url=?; /取到用户的id User user =

12、 (User) req.getSession().getAttribute(user); try QueryRunner run = new QueryRunner(DataSourceUtils.getDatasSource(); Object o = run.query(sql,new ScalarHandler(),user.getId(),uri); int size = Integer.parseInt(o.toString(); if(size=0) System.err.println(你没有权限.); else chain.doFilter(req, response); ca

13、tch(Exception e) public void destroy() / TODO Auto-generated method stub 流程图 以下是认证(检查一个在Sesion中是否有usre),验证(是否具有某个资源的访问的权限:)登录过程:显示菜单的过程:4、监听器监听器存在以下对象监听者:XxxxxListener 所的监听者是的接口。被监听者 :任意对象都可以成为被监听者 早已经存在。监听到的事件:XxxxEvent 永远是一个具体类,用来放监听到的数据 里面都有一个方法叫getSource() 返回的是监听到对象。1、观察者模式 package cn.itcast.dem

14、o;public class MyFrame extends JFrame public MyFrame() JButton btn = new JButton(你好); System.err.println(btn: is:+btn.hashCode(); btn.addActionListener(new MyListener(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /获取容器 Container con= getContentPane(); /设置布局 con.setLayout(new FlowLayout(); con.a

15、dd(btn); setSize(300, 300); setVisible(true); public static void main(String args) new MyFrame(); /实现一个监听者 class MyListener implements ActionListener /监听方法 public void actionPerformed(ActionEvent e) System.err.println(我监听到了:+e.getSource().hashCode(); 模拟一个观察者模式:观察某人跑步这个事件:package cn.itcast.demo;publi

16、c class TestObersver public static void main(String args) Person person = new Person();/声明被观察者 System.err.println(pp:+person); person.addPersonListener(new PersonListener() public void running(PersonEvent pe) System.err.println(你正在跑.+pe.getSource(); throw new RuntimeException(他跑了。); ); person.run();

17、 class Person private PersonListener pl; public void addPersonListener(PersonListener pl) this.pl = pl; public void run() if(pl!=null) pl.running(new PersonEvent(this); System.err.println(我正在跑步.); interface PersonListener void running(PersonEvent pe);class PersonEvent private Object src; public Pers

18、onEvent(Object obj) this.src=obj; public Object getSource() return src; 5、在JavaWeb中的监听器分类 在Javaweb中存在三个被监听对象: HttpServletRequest HttpSessoin ServletContext监听者被监听者监听到事件对象HttpSessionActivationListenerHttpSession 监听HttpSession活化和顿化。HttpSessionEventHttpSessionAttributeListenerHttpSession 监听session的属性变化的

19、。S.setAttributee();HttpSessionBindingEventHttpSessionBindingListenerHttpSession 监听哪一个对象,绑定到了session上。S.setAtrri(name,User);HttpSessionListenerHttpSesion 监听sessioin创建销毁HttpSessionEventServletContextAttributeListenerServletContext 属性变化的ServletContextListenerservletContext 创建销毁ServletRequestListener -

20、serlvetRequestAttibuteListnerRrequest -创建销毁实现一个监听器HttpServletRequest的创建销毁第一步:实现一个类:package cn.itcast.listener;import javax.servlet.ServletRequestEvent;import javax.servlet.ServletRequestListener;public class RequestListener implements ServletRequestListener public void requestDestroyed(ServletReques

21、tEvent sre) System.err.println(request销毁了:); Object o = sre.getSource(); System.err.println(这个o is :+o);/apache.RequestFaced22222 public void requestInitialized(ServletRequestEvent sre) System.err.println(request创建了:); Object o = sre.getSource(); System.err.println(这个o是 :+o);/apache.RequestFaced2222

22、2 第二步:必须要配置到web.xml cn.itcast.listener.RequestListener 说明:1:配置一个Listener只要求提供类名就可以了。2:在tomcat启动时,会自动的初始化这个监听器类。3:tomcat创建的Listner,Serlvet,Filter都是单列的.3、 在线人数只要有人访问本站点,成功创建一个Session就是一个会话,一个会话就是一个在线人数。用HttpSSessionListener来监听Session的创建。第一步:package cn.itcast.listener;import java.util.ArrayList;import

23、java.util.List;import javax.servlet.ServletContext;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;/* * 以下实现在线人数的统计 */public class MySessionListener implements HttpSessionListener private Integer online=1; /request.getSes

24、sion(); public void sessionCreated(HttpSessionEvent se) System.err.println(有人访问本网点了); HttpSession hs1 = (HttpSession) se.getSource(); HttpSession hs2 = se.getSession(); System.err.println(hs1:+hs1.getId()+,+hs2.getId()+,ip:); /获取整个域的对象 ServletContext sc= se.getSession().getServletContext(); sc.setAt

25、tribute(online,online+); /将所有session放到servletContext /先从application获取所有已经维护的sesison List list = (List) sc.getAttribute(sessions); if(list=null)/第一个访问的人 list = new ArrayList(); sc.setAttribute(sessions, list); list.add(hs2); /过期(30),s.invalidate(); public void sessionDestroyed(HttpSessionEvent se) Sy

26、stem.err.println(有人退出了.+se.getSession().getId(); ServletContext sc= se.getSession().getServletContext(); sc.setAttribute(online,online-); 6、监听seession中的属性变化的 Session.setAttribute(“name”,”Jack”); = 添加新的属性 Seession.setAttribute(“name”,”Rose”) = replace重新设置name值。 Session.removeAttribute(“name”) = 删除某个属

27、性 HttpSessionAttributeListenervoidattributeAdded(HttpSessionBindingEventse) Session.setAttribute(“name”,”Jack”); = 添加新的属性Notification that an attribute has been added to a session.voidattributeRemoved(HttpSessionBindingEventse) Session.removeAttribute(“name”) = 删除某个属性Notification that an attribute has been removed from a session.voidattributeReplaced(HttpSessionBindingEventse)Seession.setAttribute(“name”,”Rose”) = replace重新设置name值。Notification that an attribute has been replaced in a session.package cn.itcast.listener;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSes

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1