【问题标题】:Set session value in JSP and retrieve in java class using response.sendRedirect在 JSP 中设置会话值并使用 response.sendRedirect 在 java 类中检索
【发布时间】:2016-06-29 09:11:41
【问题描述】:

我试图从会话中获取价值但失败了。 Session 中的值已在 JSP 页面中成功设置,但无法在 Java 类中检索。 请帮忙解决:

下面是sn-p代码:

servlet-context.xml 文件中的拦截器条目:

<interceptor>
    <mapping path="/**" />
    <exclude-mapping path="/tabservice/pdfCreation/**"/>
    <beans:bean class="com.mastek.ems.filter.ExecuteTimeInterceptor"></beans:bean>
</interceptor>

在jsp页面中设置会话值: index.jsp

//intiate session and set value
 request.getSession(true).setAttribute("user", "my_user");
 System.out.println("inside jsp : ssn.getAttrbute : " + request.getSession(false).getAttribute("user"));
 errorPage = false;

 if(!errorPage){    
    String encStr = "encodeValue";
    response.sendRedirect("http://localhost/Test/index.html#detailsPage?en1="+encStr);
 } else {   
    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/Error.jsp");
    dispatcher.forward(request, response); 
 } 

尝试获取 Interceptor 中的值: 执行时间拦截器:

System.out.println("Session Object:"+request.getSession(false)); // Prints null
    System.out.println("Session ObjectID1:"+request.getSession(false).getId()); // Throws NullPointerException

    long startTime = System.currentTimeMillis();
    if(request.getSession(false) != null){
        System.out.println("inside if : Ssn Data:"+request.getSession(false).getAttribute("user"));
        if( request.getSession(false).getAttribute("user") != null ){
         request.setAttribute("startTime", startTime);
            System.out.println("Start Time::with Valid Session:1:"+(new SimpleDateFormat("dd/MM/YYYY:hh:mm:ss:SSSS")).format(new Date(System.currentTimeMillis())));
            return true;
        }
     } else{
        System.out.println("Start Time::with Invalid Session::"+(new SimpleDateFormat("dd/MM/YYYY:hh:mm:ss:SSSS")).format(new Date(System.currentTimeMillis())));
    }
    request.setAttribute("startTime", startTime);
    Utility.setResponseError(response, "sessiontimedout");
    return false;

【问题讨论】:

  • 很难猜,但我假设一个页面在会话创建之前触发了拦截器。当会话为空时,您应该在拦截器中显示request.getRequestURL()

标签: java jsp spring-mvc session


【解决方案1】:

当您使用重定向时,会话可能会丢失。如果您使用重定向 URL,请确保两件事。

重定向 URL 应与用于加载当前页面的 URL 相同。

另外,使用这样的重定向代码 -

response.sendRedirect(response.encodeRedirectURL(Your URL));

查看 Javadocs 了解更多信息。 https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServletResponse.html#encodeRedirectURL(java.lang.String)

在此处查看类似问题 - Session is lost and created as new in every servlet request

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 2016-01-18
    • 2016-11-07
    相关资源
    最近更新 更多