jsp页面变量作用域问题

想实现一个注销的功能,在页面上有个注销按钮,我想一点它就注销,用了js给按钮加了onclick代码,如下

<% 
    session = request.getSession(true);
    if (session.isNew()) 
    {%>
       <script LANGUAGE="JavaScript">
      // alert("登录超时,请重新登录!");
       top.location='main.jsp'; 
       
       //session无效,在这里进行页面跳转,返回到登录页面
       </script>
     <%
    }
    
     String type=(String)session.getAttribute("type");    
    String show=null;    
    System.out.println("navigator的用户类型为:"+type);
    if(type==null)
         {  
   %>      
<li class="L1"><a href="register.jsp" target="mainFrame"><img border="0" alt="register" src="images/register.png"  align="middle" /><span> 注册</span></a></li>
<li class="L1"><a href="login.jsp" target="mainFrame"><img border="0" alt="login" src="images/login.png"   align="middle" /><span> 登录</span></a></li>
    <%
        }
        else
        {
     %>

    <li class="L1"><img border="0" alt="register" src="images/logout.gif"  align="middle" /><input class="button" type="button"  name="logout"  value="注 销" onclick="logout();"  /></li> 

    <li class="L1"><a href="login.jsp" target="mainFrame"><img border="0" alt="login" src="images/login.png"   align="middle" /><span> 切换身份</span></a></li>
     <%
         System.out.println("navigator已经正确显示!"+type);
        }
     %> 

根据不同的用户显示不同的图片,

<script language="JavaScript">在同一个文件里,不是外部函数

function logout()
 {
      alert("logout!");   
        <%System.ou.println(type);session.invalidate();%>
     top.location='main.jsp';                
     return false;
 }

可是每次即使没有点击注销,也会把type显示一次,显示为null,且再次刷新页面,用户类型显示错误

这说明两点

1.不论JSP脚本在页面的哪个位置,它都会被执行,不会因为JS函数的触发或不触发而变化

2.JS脚本与JSp页面无法共享变量,就好像他们在不同页上,所以从JSp到js简单,从js到JSp难上加难

所以注销还是用超链接连到另一个页面去吧

你可能感兴趣的:(jsp)