请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

用户登录跳转问题

https://img1.sycdn.imooc.com//szimg/5b2da7b6000185b815790619.jpg

登录跳转能跳转成功,但是后台报错,看了一下网上搜的,后面加上  return ; 也不行

正在回答

9回答

Jimin 2018-06-23 15:42:22

加上那一行就不会有问题了啊,我的意思是你现在实际执行的代码不一定是你现在看到的这样,是可能受之前的缓存的影响。你可以清一下你执行的缓存,不排除可以选择重启电脑和开发工具,尤其是eclipse,经常会出现这类问题。

你最开始出现那个异常,加上return肯定就没问题了。那个异常的根本原因是页面跳转还继续使用了之前的request会和response,加上return就不存在这个问题了。

0 回复 有任何疑惑可以回复我~
  • 提问者 吐槽者 #1
    哦,代码是写的没什么问题的,明天在测试试一下吧,今天缓存的清了没啥作用,如果代码完全没问题,那应该是缓存的问题
    回复 有任何疑惑可以回复我~ 2018-06-23 16:07:34
  • Jimin 回复 提问者 吐槽者 #2
    嗯,我能保证代码那样改完后不会再出现你之前那个异常
    回复 有任何疑惑可以回复我~ 2018-06-23 16:54:05
  • 提问者 吐槽者 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-06-26 19:53:31
提问者 吐槽者 2018-06-23 14:39:11

老师的,源码

https://img1.sycdn.imooc.com//szimg/5b2deb04000123be06940930.jpg

0 回复 有任何疑惑可以回复我~
提问者 吐槽者 2018-06-23 14:38:31

https://img1.sycdn.imooc.com//szimg/5b2deac9000173ce12560892.jpg

除了上面标红的,这个真是老师写的

0 回复 有任何疑惑可以回复我~
Jimin 2018-06-23 12:10:01

最新的代码运行应该不会出现你说的那个问题,如果还有,那应该走的是你之前编译的版本,不信你debug试试,return走过之后代码就走不到后面了,不可能出错

0 回复 有任何疑惑可以回复我~
提问者 吐槽者 2018-06-23 12:05:48

这个是我现在改的,跟源码是一致的,而且加了个 return  ;

不行的

@RequestMapping("/login.page")

public void login(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {

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

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

SysUser sysUser=sysUserService.findByKeyword(username);

String errorMsg="";

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

if(StringUtils.isBlank(username)){

errorMsg="用户名不可以为空";

}else if (StringUtils.isBlank(password)) {

errorMsg="密码不可以为空";

}else if(sysUser==null){

errorMsg="查询不到指定的用户";

}else if(!sysUser.getPassword().equals(MD5Util.encrypt(password))){

errorMsg="用户名或密码错误";

}else if(sysUser.getStatus() !=1){

errorMsg="用户已被冻结,请联系管理员";

}else {

//login success

request.getSession().setAttribute("user", sysUser);

System.out.println("---ret1----"+ret);

if(StringUtils.isNotBlank(ret)){

response.sendRedirect(ret);

}else{

response.sendRedirect("/admin/index.page"); //TODO

}

return;

}

//返回页面数据

request.setAttribute("error", errorMsg);

request.setAttribute("username", username);

if(StringUtils.isNoneBlank(ret)){

request.setAttribute("ret", ret);

}

String path="signin.jsp";

request.getRequestDispatcher(path).forward(request, response);

}


0 回复 有任何疑惑可以回复我~
  • Jimin #1
    你这明显和源码不一样,怎么会有system.out.println,我肯定不会写这个,你还哪里改了什么?
    回复 有任何疑惑可以回复我~ 2018-06-23 12:07:22
  • 提问者 吐槽者 回复 Jimin #2
    我自己就多加了这一句,好像跟这个没关系吧,你要看我的和你的源码是不是一致啊。。
    回复 有任何疑惑可以回复我~ 2018-06-23 14:36:36
提问者 吐槽者 2018-06-23 11:10:58

老师这个是你的源码

package com.mmall.controller;


import com.mmall.model.SysUser;

import com.mmall.service.SysUserService;

import com.mmall.util.MD5Util;

import org.apache.commons.lang3.StringUtils;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;


import javax.annotation.Resource;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;


@Controller

public class UserController {


    @Resource

    private SysUserService sysUserService;


    @RequestMapping("/logout.page")

    public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

        request.getSession().invalidate();

        String path = "signin.jsp";

        response.sendRedirect(path);

    }


    @RequestMapping("/login.page")

    public void login(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

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

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


        SysUser sysUser = sysUserService.findByKeyword(username);

        String errorMsg = "";

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


        if (StringUtils.isBlank(username)) {

            errorMsg = "用户名不可以为空";

        } else if (StringUtils.isBlank(password)) {

            errorMsg = "密码不可以为空";

        } else if (sysUser == null) {

            errorMsg = "查询不到指定的用户";

        } else if (!sysUser.getPassword().equals(MD5Util.encrypt(password))) {

            errorMsg = "用户名或密码错误";

        } else if (sysUser.getStatus() != 1) {

            errorMsg = "用户已被冻结,请联系管理员";

        } else {

            // login success

            request.getSession().setAttribute("user", sysUser);

            if (StringUtils.isNotBlank(ret)) {

                response.sendRedirect(ret);

            } else {

                response.sendRedirect("/admin/index.page"); //TODO

            }

        }


        request.setAttribute("error", errorMsg);

        request.setAttribute("username", username);

        if (StringUtils.isNotBlank(ret)) {

            request.setAttribute("ret", ret);

        }

        String path = "signin.jsp";

        request.getRequestDispatcher(path).forward(request, response);

    }

}


0 回复 有任何疑惑可以回复我~
  • Jimin #1
    最新代码里我已经修改了
    回复 有任何疑惑可以回复我~ 2018-06-23 11:19:39
  • 提问者 吐槽者 回复 Jimin #2
    老师,我仔细看了一下代码,还是跟以前一样,没什么改动,我考源码过来试也是不行的。。
    回复 有任何疑惑可以回复我~ 2018-06-23 11:43:17
  • Jimin 回复 提问者 吐槽者 #3
    你按照我第一次跟你说的那样改,肯定没问题的,原理就摆在那里,不可能有问题的
    回复 有任何疑惑可以回复我~ 2018-06-23 12:01:50
Jimin 2018-06-23 10:15:59

if(StringUtils.isNotBlank(ret)){
response.sendRedirect(ret);
}else{
response.sendRedirect("/admin/index.page"); //TODO
}
return;
}

0 回复 有任何疑惑可以回复我~
  • 提问者 吐槽者 #1
    试了一下,不行,两个地方都加上也不行。。。
    回复 有任何疑惑可以回复我~ 2018-06-23 10:28:33
  • Jimin 回复 提问者 吐槽者 #2
    你这里括号有点多,你注意一下添加return相对括号的位置。
    理论上,走完跳转代码,再走return就不会遇到这个异常了
    回复 有任何疑惑可以回复我~ 2018-06-23 10:54:15
提问者 吐槽者 2018-06-23 10:12:23

package com.mmall.controller;


import java.io.IOException;


import javax.annotation.Resource;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.apache.commons.lang3.StringUtils;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;


import com.mmall.model.SysUser;

import com.mmall.service.SysUserService;

import com.mmall.util.MD5Util;


@Controller

public class UserController {

@Resource

private SysUserService sysUserService;

@RequestMapping("/login.page")

public void login(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {

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

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

SysUser sysUser=sysUserService.findByKeyword(username);

String errorMsg="";

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

if(StringUtils.isBlank(username)){

errorMsg="用户名不可以为空";

}else if (StringUtils.isBlank(password)) {

errorMsg="密码不可以为空";

}else if(sysUser==null){

errorMsg="查询不到指定的用户";

}else if(!sysUser.getPassword().equals(MD5Util.encrypt(password))){

errorMsg="用户名或密码错误";

}else if(sysUser.getStatus() !=1){

errorMsg="用户已被冻结,请联系管理员";

}else {

//login success

request.getSession().setAttribute("user", sysUser);

System.out.println("---ret1----"+ret);

if(StringUtils.isNotBlank(ret)){

response.sendRedirect(ret);

}else{

response.sendRedirect("/admin/index.page"); //TODO

}

}

//返回页面数据

request.setAttribute("error", errorMsg);

request.setAttribute("username", username);

if(StringUtils.isNoneBlank(ret)){

request.setAttribute("ret", ret);

}

String path="signin.jsp";

request.getRequestDispatcher(path).forward(request, response);

return ;

}

}


0 回复 有任何疑惑可以回复我~
Jimin 2018-06-23 10:08:59

你把登录那个方法的代码贴一下看看

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信