java在从一个jsp页面到另一个jsp页面执行href操作时,将创建一个新会话,并且会话变量返回为null
在我的第一个jsp页面上-
<%@ page language="java" %>
<%@ page import="java.io.*,java.util.*" %>
<html>
<head>
<style type="text/css">
body {
font-family:verdana,arial,sans-serif;
font-size:10pt;
margin:10px;
background-color:#ff9900;
}
</style>
<%
session.setAttribute( "theName", "abc" );
%>
<li><a href="http://localhost:8080/auto/second.jsp" target="content">click here!!</a></li><br />
</body>
</html>
第二名。是的,我有
<%@ page language="java" %>
<%@ page import="java.io.*,java.util.*" %>
<html>
<head>
Hello, <%out.print(session.getAttribute( "theName" )); %>
</table>
</body>
</html>
但是这里会话变量“theName
”的值返回为null。
我还在第一页和第二页上做了一个<% out.print( session.getId()); %>
,问题是返回了两个不同的会话ID,如-
230EC6DA6ECD25BC96268942D0ACE5EB
(在第一页)
C2399D151F0D6D6002D16A126EDDC9FB
(第二页)
这似乎是会话变量无法成功传递的原因。我还试着把
<%@ page session="false" %>
这样就不会在第二秒内创建新会话。jsp。但是如果我在秒中使用<%@ page session="false" %>
。jsp,然后抛出jasper异常-
Jul 23, 2012 5:23:47 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 32
<%out.print(session.getAttribute( "theName" ));
at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:93)
at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:451)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:328)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:307)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:565)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:843)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:679)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1303)
请建议我如何将会话变量从一个jsp页面传递到另一个jsp页面。提前感谢您的帮助
# 1 楼答案
在我看来,无论出于何种原因,您的JSP/servlet引擎都希望对会话ID使用URL重写,而不是使用cookie。如果使用^{} 将链接输出到
second.jsp
页面,例如:。。。你应该发现它最终是
second.jsp;jsessionid=longstringhere
现在,你可以到处使用
encodeURL
,但我猜你更喜欢用饼干。您需要检查JSP/servlet引擎的配置。在Tomcat中,the default is to use cookies,但您可以检查Context
元素,以确保它没有cookies="false"
或其他内容