登录到JSP登录表单后的StackOverFlowException

时间:2014-01-16 06:50:54

标签: java jsp servlets

我尝试打开表单login.jsp,但获取javax.servlet.ServletException

  

HTTP Monitor的服务器端组件检测到java.lang.StackOverflowError。   当Web模块中存在无限循环时会发生这种情况。   在再次运行Web模块之前纠正无限循环的原因

LoginController代码:

public class LoginController extends HttpServlet {

public LoginController()
{
    sandiBank = "null";
    session = null;
    mUserDao = new MUserDao();
    sandiBIDao = new SandiBIDao();
    cabangDao = new CabangDao();
    parameterDao = new ParameterDao();
    mAccesDao = new MAccesDao();
}

@Override
protected void doGet(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)
    throws ServletException, IOException
{
    httpservletrequest.getRequestDispatcher("./login.jsp").forward(httpservletrequest, httpservletresponse);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
{
    String user = request.getParameter("user");
    String pass = request.getParameter("pass");
    MUser mUser = mUserDao.getMUser(user);
    if(!mUser.isCheck())
    {
        RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp");
        dispatcher.forward(request, response);
    } else
    {
        Cabang cabang = cabangDao.getSandiBank(mUser.getKdCab());
        if(cabang.getSandiBank() != null)
            sandiBank = cabang.getSandiBank();
        RequestDispatcher dispatcher = request.getRequestDispatcher("home.jsp");
        session = request.getSession(true);
        session.setAttribute("userid", user);
        session.setAttribute("passwd", pass);
        String userid = (String)session.getAttribute("userid");
        session.setAttribute("kdcaba", mUser.getKdCab());
        session.setAttribute("sndbnk", sandiBank);
        System.out.println(session.getAttribute("sndbnk"));
        session.setAttribute("sandikd_bank", parameterDao.getSandiBank());
        session.setMaxInactiveInterval(3600);
        request.setAttribute("sandiBI", sandiBIDao.getSandiBI());
        request.setAttribute("mAccesses", mAccesDao.getmAccesses(userid));
        dispatcher.forward(request, response);
    }
}

private static final long serialVersionUID = 1L;
private MUserDao mUserDao;
private SandiBIDao sandiBIDao;
private MAccesDao mAccesDao;
private CabangDao cabangDao;
private ParameterDao parameterDao;
private String sandiBank;
private HttpSession session;
}

2 个答案:

答案 0 :(得分:1)

这通常意味着您在代码中进行了递归调用。

递归只是一个调用自身的方法,导致堆栈溢出并抛出StackoverFlow异常。

检查代码调用本身的代码流程

答案 1 :(得分:0)

更改

httpservletrequest.getRequestDispatcher("./login.jsp").forward(httpservletrequest, httpservletresponse); 

httpservletrequest.getRequestDispatcher("/login.jsp").forward(httpservletrequest, httpservletresponse);