2

最初の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>

second.jspで、私は持っています、

<%@ 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()); %>、最初のページと2番目のページの両方でを実行しましたが、問題は、2つの異なるセッションIDが次のように返されることです- 230EC6DA6ECD25BC96268942D0ACE5EB(最初のページ) C2399D151F0D6D6002D16A126EDDC9FB(2番目のページ)

これが、セッション変数が正常に渡されない理由のようです。私も入れてみました

<%@ page session="false" %>

新しいセッションがsecond.jspに作成されないようにします。しかし<%@ page session="false" %>、second.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ページから別のページにセッション変数を渡す方法を提案してください。助けてくれてありがとう!

4

1 に答える 1

0

あなたの JSP/サーブレット エンジンは、何らかの理由で、セッション ID に対して Cookie を使用するのではなく、URL 書き換えを使用することを期待しているように思えます。encodeURLページへのリンクを出力するために使用する場合second.jsp、例えば:

<a href="<%=response.encodeURL("second.jsp")%>">second page</a>

...結果的に になることがわかるはずですsecond.jsp;jsessionid=longstringhere

さて、どこでも使用できますencodeURLが、私の推測では、Cookie を使用することをお勧めします。JSP/サーブレット エンジンの構成を確認する必要があります。Tomcat では、デフォルトで cookies を使用しますが、要素をチェックして、要素が含まれContextていないことを確認することもできcookies="false"ます...

于 2012-07-23T15:13:59.463 に答える