Ext结合Struts的Session超时处理
博客分类: Ext
EXTStrutsAjaxUIJavaScript
配置struts.xml文件的默认拦截器(注:登录的action用<default-interceptor-ref name="defaultStack" />)
Xml代码
<interceptors>
<interceptor name="loginInterceptor" class="com.fireinjava.ui.interceptor.LoginInterceptor" />
<interceptor-stack name="myDefaultIntegerceptor">
<interceptor-ref name="loginInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultIntegerceptor" />
<interceptors>
<interceptor name="loginInterceptor" class="com.fireinjava.ui.interceptor.LoginInterceptor" />
<interceptor-stack name="myDefaultIntegerceptor">
<interceptor-ref name="loginInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultIntegerceptor" />
拦截器LoginInterceptor.java
Java代码
package com.fireinjava.ui.interceptor;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.fireinjava.ui.UserEnv;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* @version 1.0
* @data 2009-9-23
* @描述:检查Session是否超时
*/
public class LoginInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation actioninvocation) throws Exception {
ActionContext context = actioninvocation.getInvocationContext();
Map session = context.getSession();
UserEnv user = (UserEnv) session.get("userEnv");
System.out.println(">>>>>>>>>>>>>LoginInterceptor");
if (user != null) {
return actioninvocation.invoke();
} else {
outString("<script type=\"text/javascript\">var session='SessionExpired'; function getRootWin(){var win = window;while (win != win.parent){win =win.parent;}return win;} getRootWin().reLogin();</script>");//页面接收
}
return Action.NONE; // 页面上写一个Login弹出窗口
}
public void outString(String str) {
HttpServletResponse response = ServletActionContext.getResponse();
try {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
out.write(str);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.fireinjava.ui.interceptor;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.fireinjava.ui.UserEnv;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* @version 1.0
* @data 2009-9-23
* @描述:检查Session是否超时
*/
public class LoginInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation actioninvocation) throws Exception {
ActionContext context = actioninvocation.getInvocationContext();
Map session = context.getSession();
UserEnv user = (UserEnv) session.get("userEnv");
System.out.println(">>>>>>>>>>>>>LoginInterceptor");
if (user != null) {
return actioninvocation.invoke();
} else {
outString("<script type=\"text/javascript\">var session='SessionExpired'; function getRootWin(){var win = window;while (win != win.parent){win =win.parent;}return win;} getRootWin().reLogin();</script>");//页面接收
}
return Action.NONE; // 页面上写一个Login弹出窗口
}
public void outString(String str) {
HttpServletResponse response = ServletActionContext.getResponse();
try {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
out.write(str);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} jsp 页面代码:
Js代码
<script type="text/javascript">
function getRootWin(){
var win = window;
while (win != win.parent){
win = win.parent;
}
return win;
}
var reLoginWin;
reLogin = function (){ getRootWin().reLoginWin=new Ext.Window(....);}//登录窗口
Ext.Ajax.on('requestcomplete', function(conn, response, options, e){ var returnVal=response.responseText; if(!Ext.isEmpty(returnVal)&&returnVal.indexOf('SessionExpired')!=-1) reLogin();});
</script>
<script type="text/javascript">
function getRootWin(){
var win = window;
while (win != win.parent){
win = win.parent;
}
return win;
}
var reLoginWin;
reLogin = function (){ getRootWin().reLoginWin=new Ext.Window(....);}//登录窗口
Ext.Ajax.on('requestcomplete', function(conn, response, options, e){ var returnVal=response.responseText; if(!Ext.isEmpty(returnVal)&&returnVal.indexOf('SessionExpired')!=-1) reLogin();});
</script>
嵌入外部页面时,保持本应用的Session激活
function keepSession(){
Ext.Ajax.request({url : 'keepSession.action'});
}
setInterval("keepSession()",60000);//1分钟调用下
<action name="keepSession" class="com.xx.BaseAction" method="keepSession"/>
public void keepSession(){
}
博客分类: Ext
EXTStrutsAjaxUIJavaScript
配置struts.xml文件的默认拦截器(注:登录的action用<default-interceptor-ref name="defaultStack" />)
Xml代码
<interceptors>
<interceptor name="loginInterceptor" class="com.fireinjava.ui.interceptor.LoginInterceptor" />
<interceptor-stack name="myDefaultIntegerceptor">
<interceptor-ref name="loginInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultIntegerceptor" />
<interceptors>
<interceptor name="loginInterceptor" class="com.fireinjava.ui.interceptor.LoginInterceptor" />
<interceptor-stack name="myDefaultIntegerceptor">
<interceptor-ref name="loginInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultIntegerceptor" />
拦截器LoginInterceptor.java
Java代码
package com.fireinjava.ui.interceptor;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.fireinjava.ui.UserEnv;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* @version 1.0
* @data 2009-9-23
* @描述:检查Session是否超时
*/
public class LoginInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation actioninvocation) throws Exception {
ActionContext context = actioninvocation.getInvocationContext();
Map session = context.getSession();
UserEnv user = (UserEnv) session.get("userEnv");
System.out.println(">>>>>>>>>>>>>LoginInterceptor");
if (user != null) {
return actioninvocation.invoke();
} else {
outString("<script type=\"text/javascript\">var session='SessionExpired'; function getRootWin(){var win = window;while (win != win.parent){win =win.parent;}return win;} getRootWin().reLogin();</script>");//页面接收
}
return Action.NONE; // 页面上写一个Login弹出窗口
}
public void outString(String str) {
HttpServletResponse response = ServletActionContext.getResponse();
try {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
out.write(str);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.fireinjava.ui.interceptor;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.fireinjava.ui.UserEnv;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* @version 1.0
* @data 2009-9-23
* @描述:检查Session是否超时
*/
public class LoginInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation actioninvocation) throws Exception {
ActionContext context = actioninvocation.getInvocationContext();
Map session = context.getSession();
UserEnv user = (UserEnv) session.get("userEnv");
System.out.println(">>>>>>>>>>>>>LoginInterceptor");
if (user != null) {
return actioninvocation.invoke();
} else {
outString("<script type=\"text/javascript\">var session='SessionExpired'; function getRootWin(){var win = window;while (win != win.parent){win =win.parent;}return win;} getRootWin().reLogin();</script>");//页面接收
}
return Action.NONE; // 页面上写一个Login弹出窗口
}
public void outString(String str) {
HttpServletResponse response = ServletActionContext.getResponse();
try {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
out.write(str);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} jsp 页面代码:
Js代码
<script type="text/javascript">
function getRootWin(){
var win = window;
while (win != win.parent){
win = win.parent;
}
return win;
}
var reLoginWin;
reLogin = function (){ getRootWin().reLoginWin=new Ext.Window(....);}//登录窗口
Ext.Ajax.on('requestcomplete', function(conn, response, options, e){ var returnVal=response.responseText; if(!Ext.isEmpty(returnVal)&&returnVal.indexOf('SessionExpired')!=-1) reLogin();});
</script>
<script type="text/javascript">
function getRootWin(){
var win = window;
while (win != win.parent){
win = win.parent;
}
return win;
}
var reLoginWin;
reLogin = function (){ getRootWin().reLoginWin=new Ext.Window(....);}//登录窗口
Ext.Ajax.on('requestcomplete', function(conn, response, options, e){ var returnVal=response.responseText; if(!Ext.isEmpty(returnVal)&&returnVal.indexOf('SessionExpired')!=-1) reLogin();});
</script>
嵌入外部页面时,保持本应用的Session激活
function keepSession(){
Ext.Ajax.request({url : 'keepSession.action'});
}
setInterval("keepSession()",60000);//1分钟调用下
<action name="keepSession" class="com.xx.BaseAction" method="keepSession"/>
public void keepSession(){
}