天天看點

旅遊網(2)--------------某旅遊網登入退出功能的實作記錄登入退出

登入

分析

旅遊網(2)--------------某旅遊網登入退出功能的實作記錄登入退出

前台代碼

header和footer

這兩個裡面的内容是通過ajax請求添加的,是以header.html和footer.html可以複用

修改header

<script>
    $(function (){
        $.get("findUserServlet",{},function (data){
            //{uid:1,name:'李四'}
            var msg = "歡迎回來,"+data.name;
            $("#span_username").html(msg);
        });
    });
</script>
...
<span id="span_username"></span>
...

           

背景代碼

LoginServlet、UserServlet、UserDao

LoginServlet

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //驗證校驗
        String check = request.getParameter("check");
        //從sesion中擷取驗證碼
        HttpSession session = request.getSession();
        String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
        session.removeAttribute("CHECKCODE_SERVER");//為了保證驗證碼隻能使用一次
        //比較
        if(checkcode_server == null || !checkcode_server.equalsIgnoreCase(check)){
            //驗證碼錯誤
            ResultInfo info = new ResultInfo();
            //注冊失敗
            info.setFlag(false);
            info.setErrorMsg("驗證碼錯誤");
            //将info對象序列化為json
            ObjectMapper mapper = new ObjectMapper();
            String json = mapper.writeValueAsString(info);
            response.setContentType("application/json;charset=utf-8");
            response.getWriter().write(json);
            //驗證碼如果錯誤,直接return掉,後面的操作就不用做了
            return;
        }

        //1.擷取使用者名和密碼資料
        Map<String, String[]> map = request.getParameterMap();
        //2.封裝User對象
        User user = new User();
        try {
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //調用Service查詢
        UserService service = new UserServiceImpl();
        User u = service.login(user);

        ResultInfo info = new ResultInfo();
        //4.判斷使用者對象是否為null
        if (u == null){
            //使用者名或密碼錯誤
            info.setFlag(false);
            info.setErrorMsg("使用者名或密碼錯誤");
        }
        //5.判斷使用者是否激活
        if (u != null && !"Y".equals(u.getStatus())){
            //使用者未激活
            info.setFlag(false);
            info.setErrorMsg("使用者尚未激活,請激活!");
        }
        //6.登入成功判斷
        if (u != null && "Y".equals(u.getStatus())){
            //登入成功
            request.getSession().setAttribute("user",u);
            info.setFlag(true);
        }
        //響應資料,将ResultInfo轉換為json資料,序列化到用戶端
        ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");
        mapper.writeValue(response.getOutputStream(),info);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
           

UserServletImpl

  • UserService

UserDaoImpl

/**
 * 根據使用者名和密碼查詢
 * @param username
 * @param password
 * @return
 */
@Override
public User findByUsernameAndPassword(String username, String password) {
    //jdbcTemplate裡面,如果說傳遞的使用者名,沒有查詢到一個user對象
    //或者說封裝沒有成功,它是不會傳回一個null,而是直接報異常,是以給題目做了一個try。。catch。。
    User user = null;
    try {
        //1.定義sql
        String sql = "select * from tab_user where username = ? and password = ?";
        //2.執行sql
        user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username,password);
    }catch (Exception e){

    }
    return user;
}
           

findUserServlet

因為跟着視訊學習的時候,視訊裡面的代碼沒有設定session,是以,首先,我們需要在該處添加這一段代碼才能實作顯示使用者名

旅遊網(2)--------------某旅遊網登入退出功能的實作記錄登入退出

退出

登入:就是session中有user對象叫做登入

退出:當使用者一點選退出的超連結,通路Servlet将session的user删除掉,并且把

頁面跳轉到登入頁面

實作步驟

1.通路servlet,将session銷毀

2.跳轉到登入頁面。

代碼實作

header.html

...
<a href="javascript:location.href='exitServlet';">退出</a>
...
           

ExitServlet

@WebServlet("/exitServlet")
public class ExitServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //銷毀session
        request.getSession().invalidate();
        //跳轉頁面
        response.sendRedirect(request.getContextPath()+"/login.html");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}