首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

flex有关问题请问?

2012-03-11 
flex问题请教??项目中用到flex,想在遇到的问题是jboss启动登录环境访问flex页面一切ok,当刷新一下IE在访问

flex问题请教??

项目中用到flex,想在遇到的问题是jboss启动登录环境访问flex页面一切ok,当刷新一下IE在访问flex页面时就会出现下面异常

Servlet.service() for servlet MessageBrokerServlet threw exception 
flex.messaging.LocalizedException: The FlexSession is invalid.
at flex.messaging.FlexSession.checkValid(FlexSession.java:906)
at flex.messaging.FlexSession.getUserPrincipal(FlexSession.java:225)
at flex.messaging.HttpFlexSession.getUserPrincipal(HttpFlexSession.java:272)
at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:327)
退出环境重新登录环境也可以访问flex页面。刷新IE还是会报异常。




[解决办法]
这是java端的异常啊~~!

至于什么原因我也不知道。我也不能乱说。。

flex我没用过所谓的session···
[解决办法]
你刷新页面session就失效了,找配置文件,配置一下session的有效范围,就可以了
[解决办法]

Java code
1、在web.xml增加<filter>   <filter-name>AMFContextFilter</filter-name>   <filter-class>soft.flex.context.AMFContextFilter</filter-class></filter><filter-mapping>   <filter-name>AMFContextFilter</filter-name>   <servlet-name>MessageBrokerServlet</servlet-name></filter-mapping>2、增加AMFContextFilter文件package soft.flex.context;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class AMFContextFilter implements Filter {public void doFilter(ServletRequest request, ServletResponse response,    FilterChain chain) throws ServletException, IOException {   AMFContext.setCurrentContext((HttpServletRequest) request,     (HttpServletResponse) response);   chain.doFilter(request, response);}public void init(FilterConfig arg0) throws ServletException {   // TODO Auto-generated method stub}public void destroy() {   // TODO Auto-generated method stub}}3、增加AMFContext文件package soft.flex.context;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class AMFContext {/*** ThreadLocal object for storing object in current thread.*/@SuppressWarnings("unchecked")private static ThreadLocal tl = new ThreadLocal();/*** Set current context* * @param request*            The HttpRequest object* @param response*            The HttpResponses object*/@SuppressWarnings("unchecked")static public void setCurrentContext(HttpServletRequest request,    HttpServletResponse response) {   AMFContext c = getCurrentContext();   if (c == null) {    c = new AMFContext(request, response);    tl.set(c);   } else {    c.setRequest(request);    c.setResponse(response);   }}/*** Get current context value* * @return The current context*/static public AMFContext getCurrentContext() {   return (AMFContext) tl.get();}// ----------------------//// Class members//// ----------------------/*** The http request object. The lifecycle of the request object is defined* as the request scope. It may be reused in another incoming connection, so* dont use it in another thread.*/private HttpServletRequest request;/*** The http response object. The lifecycle of the response object is defined* as the request scope. Dont use it in another thread. Also dont write* output to the response when it is used in the context, but you may get or* set some response header when it is safe.*/private HttpServletResponse response;/*** The constructor is private, to get an instance of the AMFContext, please* use getCurrentContext() method.* * @param request* @param response*/private AMFContext(HttpServletRequest request, HttpServletResponse response) {   this.request = request;   this.response = response;}/*** Get request object* * @return Http request object*/public HttpServletRequest getRequest() {   return request;}/*** Set request object* * @param Http*            request object*/public void setRequest(HttpServletRequest request) {   this.request = request;}/*** Get response object* * @return Http response object*/public HttpServletResponse getResponse() {   return response;}/*** Set response object* * @param response*            Http response object*/public void setResponse(HttpServletResponse response) {   this.response = response;}/*** Get the servlet context* * @return*/public ServletContext getServletContext() {   HttpSession session = this.getSession();   return session.getServletContext();}/*** Get the current running session* * @return*/public HttpSession getSession() {   return request.getSession();}/*** Get an object stored in the session.* * @param attr*            Attribute Name* @return The value stored under the attribute name.*/public Object getSessionAttribute(String attr) {   HttpSession session = this.getSession();   return session.getAttribute(attr);}/*** Store an object in the session.* * @param attr*            Attribute Name* @param value*            The value.*/public void setSessionAttribute(String attr, Object value) {   HttpSession session = this.getSession();   session.setAttribute(attr, value);}/*** Get an object stored in the servlet context.* * @param attr*            Attribute Name* @return The value stored under the attribute name.*/public Object getContextAttribute(String attr) {   ServletContext sc = this.getServletContext();   return sc.getAttribute(attr);}/*** Store an object in the servlet context.* * @param attr*            Attribute Name* @param value*            The value.*/public void setContextAttribute(String attr, Object value) {   ServletContext sc = this.getServletContext();   sc.setAttribute(attr, value);}/*** Get an object stored in the current request.* * @param attr*            Attribute Name* @return The value stored under the attribute name.*/public Object getRequestAttribute(String attr) {   return request.getAttribute(attr);}/*** Store an object in the current request.* * @param attr*            Attribute Name* @param value*            The value.*/public void setRequestAttribute(String attr, Object value) {   request.setAttribute(attr, value);}}4、增加FlexSessionInterceptor文件package soft.flex.context;import javax.servlet.http.HttpServletRequest;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;import soft.common.util.Constants;public class FlexSessionInterceptor implements MethodInterceptor {public Object invoke(MethodInvocation invocation) throws Throwable {   AMFContext context = AMFContext.getCurrentContext();   HttpServletRequest request = context.getRequest();   if (request.getSession().getAttribute(Constants.LOGIN_USER_INFO) == null) {    throw new Exception("Session超时,请您重新登陆!");   }   return invocation.proceed();}}5、在applicationContext.xml增加以下内容<!-- 配置SessionAdvice --><bean id="sessionAdvice" class="soft.flex.context.FlexSessionInterceptor" />    <!-- 配置自动代理 -->    <bean id="beanNameAutoProxyCreator"    class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">    <property name="beanNames">       <list>        <value>formDesignerService</value>       </list>    </property>    <property name="interceptorNames">       <value>sessionAdvice</value>    </property>    </bean>这样子的话,在所有的flex请求中都会先执行FlexSessionInterceptor类中的invoke方法如果要在任何java类中获取sessionr的话,使用AMFContext.getCurrentContext().getSession()即可 

热点排行