request.getRequestDispatcher跳转jsp页面失败

我在JS里面写了个Ajax,传值给控制器,然后利用request.getRequestDispatcher(),打算跳转至另外一个页面。但是没有跳转成功,运行之后没反应。

在网上搜了资料发现,利用ajax的请求时无法利用equest.getRequestDispatcher()跳转。所以可以考虑换一种方式进行跳转。

在Ajax请求下response.sendRedirect()同样无法进行跳转。原理如下:

 

Ajax的原理简单来说,实际上就是通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。 
这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。 
    我们可以看出,XMLHttpRequest对象完全用来向服务器发出一个请求的,它的作用也局限于此,但它的作用是整个ajax实现的关键,我们可以把服务器端看成一个数据接口,它返回的是一个纯文本流,当然,这个文本流可以是XML格式,可以是Html,可以是Javascript代码,也可以只是一个字符串。这时候,XMLHttpRequest向服务器端请求这个页面,服务器端将文本的结果写入页面,这和普通的web开发流程是一样的,不同的是,客户端在异步获取这个结果后,不是直接显示在页面,而是先由javascript来处理,然后再显示在页面。

最后采用下面的方式实现

@RequestMapping(value = "/login", method = RequestMethod.POST)
    public void Login(HttpServletRequest request,
                        HttpServletResponse response,
                        LcbUser user) throws Exception {
        try {
            LcbUser currentUser = userService.checkLogin(user.getLoginName(), user.getPassWord());

            boolean flag=false;
            if (user.getLoginName() != null && user.getPassWord() != null) {

                //创建session对象
                HttpSession session = request.getSession();

                //把用户数据保存在session域对象中
                if(currentUser==null){
                    flag=false;
                }
                else {
                    session.setAttribute("currentUser", currentUser.getUserName());
                    session.setAttribute("userId", currentUser.getUserId());
                    //跳转到用户主页
//                model.addAttribute(currentUser);
//                model.addAttribute("currentUser", currentUser.getUserName());
                    //RequestDispatcher rd = request.getRequestDispatcher("wel.jsp");
                    //rd.forward(request, response);
                    flag=true;
                }
            } else {
                flag=false;
            }
            PrintWriter out = response.getWriter();
            out.print(flag);//返回登录信息
            out.flush();
            out.close();
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

 

function checkLogin() {
    // var form = new FormData(document.getElementById("user"));
    var loginName=$("#loginName").val();
    var passWord=$("#passWord").val();
    if(loginName == ""){
        alert("请输入用户名");
        return false;
    }else if(passWord == ""){
        alert("请输入密码");
        return false;
    }
    var data={loginName:loginName,passWord:passWord};

    $.ajax({
        async: true,
        dataType:"json",
        type: 'post',
        url: "<%=basePath%>login",
        data: data,
        success: function (result) {
            if(result==true){
                window.location.href="${blog}/views/Home/Index.jsp";
            }else {
                alert("用户名或密码错误!请联系管理员获取密码")
            };
            // alert("修改成功");
        }
    });
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值