友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

JSP入门教程(DOC格式)-第24章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




   request; response);  

       } else  {  

           User user = new User();  

           user。setUsername(username);  

           user。setPassword(password);  

     

           userDao。save(user);  

           response。sendRedirect (request。getContextPath() +  

   〃/security/registerSuccess。jsp〃);  

       }  

   }       



   获得用户名和密码后,先通过 userDao。checkExists()检测数据库中是否 

   已经有了同名的用户,如果用户名重复,就跳转到 

   /security/register。jsp 显示错误信息。如果用户名没有重复,则将此 

   用户信息添加入库,然后页面重定向到/security/registerSuccess。jsp 

   显示注册成功信息。  



                                  94 / 148  


…………………………………………………………Page 95……………………………………………………………

                                       



    保存信息之后使用 redirect 是个避免重复提交的简易方法,如果使用 

    forward,浏览器上的url 不会改变,用户刷新页面就会导致重复提交信 

    息。  



2。  用户登录与注销  



    登录与注销的流程与之前介绍的大体相同。第 4。2 节 “例子:在线列表”  



   /**  

    * 登录。  

    */  

   public void login(HttpServletRequest request;HttpServletResponse  

   response) throws Exception {  

       String username = request。getParameter(〃username〃);  

       String password = request。getParameter(〃password〃);  

     

       User user = userDao。login(username; password);  

       if  (user != null) {  

           user。setLastLogin(new Date());  

           userDao。update(user);  

           HttpSession session = request。getSession();  

           session。setAttribute(〃user〃; user);  

     

           // 加入在线列表  

           session。setAttribute(〃onlineUserBindingListener〃; new  

   OnlineUserBindingListener(username));  

     

           response。sendRedirect(request。getContextPath() +  

    〃/security/loginSuccess。jsp〃);  

       } else  {  

           request。setAttribute(〃error〃; 〃用户名或密码错误!〃);  

            

   request。getRequestDispatcher(〃/security/login。jsp〃)。forward(req 

   uest; response);  

       }  

     

    }  

     

   /**  

    * 注销。  

    */  

   public void logout(HttpServletRequest  

   request;HttpServletResponse response) throws Exception {  

       request。getSession()。invalidate();  



                                   95 / 148  


…………………………………………………………Page 96……………………………………………………………

                                     



       response。sendRedirect(request。getContextPath() +  

   〃/security/logoutSuccess。jsp〃);  

   }     



   我们先根据请求中的用户名和密码去数据库搜索用户信息。如果能找到, 

   说明用户输入无误可以登录,这时更新用户最后登录时间,并将 user 保 

   存到 session 中,同时使用 listener 操作在线列表。  



   如果用户名或密码错误,则将请求转发至/security/login。jsp 页面,显 

   示错误信息。  



3。  控制用户访问权限  



   与用户操作相关的还有 anni。utils。SecurityFilter,我们使用它来控制 

   用户的访问权限。可以参考之前的讨论:第 7。2 节  “用filter 控制用 

   户访问权限”。  



   web。xml 中对 SecurityFilter 的配置如下:  



     

       SecurityFilter  

       anni。utils。SecurityFilter  

     

     

       SecurityFilter  

       /*  

      



   因为filter…mapping太不灵活,我们让SecurityFilter过滤所有的请求, 

   在代码里判断哪些请求需要保护。  



   public void doFilter(ServletRequest request;  

           ServletResponse response;  

           FilterChain chain)  

           throws IOException; ServletException {  

     

       HttpServletRequest req = (HttpServletRequest) request;  

       HttpServletResponse res = (HttpServletResponse) response;  

     

       String url = req。getServletPath();  

       String method = req。getParameter(〃method〃);  

     

       if  (〃/create。jsp〃。equals(url) ||  

            (〃/thread。do〃。equals(url) && 〃post〃。equals(method)) ||  



                                 96 / 148  


…………………………………………………………Page 97……………………………………………………………

                                        



                (〃/ment。do〃。equals(url) && 〃post〃。equals(method))) {  

         

               HttpSession session = req。getSession();  

               if  (session。getAttribute(〃user〃) == null) {  

                   res。sendRedirect(req。getContextPath() +  

       〃/security/securityFailure。jsp〃);  

                   return ;  

               }  

         

           }  

           chain。doFilter(request; response);  

         

       }    



       在此我们只保护三个请求:/create。jsp (进入发布新主题的页面), 

       /thread。do?method=post (发布新主题),/ment。do?method=post (发 

       布回复)。这三个操作只有在用户登录之后才能访问,如果用户还没有的 

       登录就会页面重定向到/security/securityFailure。jsp,显示权限不足 

       无法访问的提示信息。  



10。3。2。 主题回复管理  



主题回复管理功能包括:查看所有主题,查看某一主题的详细信息和对应回复, 

发表新主题,发表回复。点击主题时还会计算点击数。  



   1。  查看所有主题信息  



       进入应用,index。jsp 会立即跳转到/forum。do?method=list,并在 

       list。jsp 中显示所有主题,包括主题标题,回复数,作者,点击数,最 

       后回复时间,最后回复人。这些信息按照“最后回复时间”进行逆序排列。  



       实现代码在 anni。web。ForumServlet 的 list()方法内。  



       /**  

        * 显示所有帖子。  

        */  

       private void list(HttpServletRequest request; HttpServletResponse  

       response) throws Exception {  

           List list = forumDao。getAll();  

           request。setAttribute(〃list〃; list);  

           request。getRequestDispatcher(〃/list。jsp〃)。forward(request;  

       response);  

       }   



                                     97 / 148  


…………………………………………………………Page 98……………………………………………………………

                                     



调用 anni。dao
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!