【问题标题】:session in jsp is not working if else statements cannot includes pages如果 else 语句不能包含页面,则 jsp 中的会话不起作用
【发布时间】:2016-03-04 22:32:58
【问题描述】:

在索引页面上,jsp 不检查会话是否存在并继续到下一页,刷新后它显示具有会话属性的同一页面。

如果循环不起作用,实际上在我的代码中是什么问题

请帮忙。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>login Page</title>
    </head>
    <body>
        <h1>index page</h1>
        <jsp:include page="/check" />       
    </body>
</html>

Servlet 代码:

package reg;

import java.io.IOException;
import java.io.PrintWriter;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.servlet.http.HttpSession;

public class check extends HttpServlet {  

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
    response.setContentType("text/html");  
    PrintWriter out=response.getWriter();  
    //request.getRequestDispatcher("link.html").forward(request, response);  
    out.print("hello check servlet<br>");
    HttpSession nsession=request.getSession(false);

    if(nsession == null) {  
        String name=(String)nsession.getAttribute("name");
        out.print("Hello, "+name+" Welcome to Profile");
        request.getRequestDispatcher("/adminhome.jsp").include(request, response);
    } else {    
        out.print("Please login first");
        request.getRequestDispatcher("/login.jsp").include(request, response);
    }
    out.close();  
    }  
} 

【问题讨论】:

  • 是错字吗,但应该是if (nsession != null),因为你确实在真正的分支中使用了nsession

标签: jsp session


【解决方案1】:

我也不知道是什么问题。如果您没有在其他地方创建会话,它应该返回 null。

但是试试:

  • 取消选中在重新部署期间保留会话,看看是否 有帮助。 (没有帮助我)
  • 或者只是像这样以不同的方式编码:
private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html");  
    PrintWriter out = response.getWriter();
    out.print("<h2>hello check servlet</h2><hr>");
    HttpSession nsession = request.getSession();
    String name = (String) nsession.getAttribute("name");

    if(name != null) { 
        out.print("Hello, " + name + " Welcome to Profile");
        request.getRequestDispatcher("/adminhome.jsp").include(request, response);
    } else {
        out.print("Please login first!");
        request.getRequestDispatcher("/login.jsp").include(request, response);
    }
    out.close();  
}

除此之外, 你确实有另一个处理登录的servlet,如果成功设置会话正确? 像这样的:

private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String email = request.getParameter("email");
    String password = request.getParameter("password");

    try {
        // Do database related stuff here... (to check if user exists)
        if(validUser())
            request.getSession().setAttribute("username", name); // Set the name of the user to the session
    }

您还应该查看这些以获取有关会话的更多信息, java session management http://www.tutorialspoint.com/servlets/servlets-session-tracking.htm.

【讨论】:

  • 你好,经过研究我得到了解决方案
  • 在您页面的最顶部,它禁止为每个 jsp 创建新会话
猜你喜欢
  • 1970-01-01
  • 2017-07-12
  • 2018-04-23
  • 2019-01-25
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多