1. 程式人生 > >(jsp六)專案例項功能實現補充:會話及移除會話

(jsp六)專案例項功能實現補充:會話及移除會話

會話:重定向不可以用request繫結資料,request又叫一次請求,重定向之前會將request中的資料全部清空,所以如果想要在重定向之後使用資料,則需要用到session物件來進行資料繫結。什麼是session?session又叫會話,我們所開啟的一個頁面,即一個會話,而會話的範圍要大於request,因為只要會話存在,那麼session物件就一直存在,繫結在其之上的資料就會一直存在,不會當頁面跳轉時被清空資料。並且在本例項中,主頁面引用了框架集,如果使用request繫結資料的話,繫結的資料只能在main.jsp頁面接收到,而其中包含的index.jsp和top.jsp頁面則無法使用,也就無法實現頁面上顯示使用者名稱的功能。所以在此處使用重定向及session物件進行資料繫結更為適合。Session使用方法如程式碼所示。從資料庫獲取資料等方法實現即entity、dao、daoImpl、DBUtil包及類略,此處僅列舉關鍵程式碼

login1.jsp部分程式碼

<form action="UserServlet" method="post">

        <ul>

            <li><input name="uname" type="text" class="loginuser" value="admin" onclick="JavaScript:this.value=''"/></

li>

            <li><input name="upwd" type="text" class="loginpwd" value="密碼" onclick="JavaScript:this.value=''"/></li>

            <li><input name="" type="submit" class

="loginbtn" value="登入"  /><label>

            <input name="" type="checkbox" value="" checked="checked" />記住密碼</label><label><a href="#">忘記密碼?</a></label></li>

            <li><span style="color:red">${login_error}</span></li>

        </ul>

    </form>

UserServlet doPost方法程式碼:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");

        String uname=request.getParameter("uname");

        String upwd=request.getParameter("upwd");

        IUserDAO dao=new UserDAOImpl();

        User user=dao.findUserBySnameAndSpwd(uname, upwd);

        if(user==null){

            request.setAttribute("login_error","使用者名稱或密碼錯誤");

            request.getRequestDispatcher("login1.jsp").forward(request,response);

        }else{

            //1.獲取session

            HttpSession session=request.getSession();

            //2.將資料繫結到session

            session.setAttribute("user",user);

            response.sendRedirect("main.jsp");

        }

    }

index.jsp部分程式碼

<b>${user.uname}早上好,歡迎使用資訊管理系統</b>(${user.uname}@uimaker.com)

top.jsp部分程式碼

<span>${user.uname}</span>

效果圖:

 

移除會話:在該頁面有退出功能,現在需要對退出功能進行程式設計。退出一定是在已經登入的情況下才能點選退出,但是此時會話已經綁定了一個值,點選退出的話需要重新會到login1.jsp頁面,返回該頁面又要重新登入,那麼session則又儲存了另外一個資訊。這種情況不是不可以,但是不建議在session上繫結重名的值,所以我們為了解決該問題,可以在點選退出時先不直接跳轉至login1.jsp,先跳轉至LogoutServlet,在該servlet中將會話上繫結的資料清空,清空後再進行跳轉。

top.jsp部分程式碼

<li><a href="LogoutServlet" target="_parent">退出</a></li>

LogoutServlet doPost方法程式碼:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1.獲取會話

        HttpSession session=request.getSession();

        //2.移除session繫結名為user的物件

        session.removeAttribute("user");

        //3.使session失效

        session.invalidate();

        //4.重新跳轉到登入頁面

        response.sendRedirect("login.jsp");

    }