上下文相关ContextualHttpServletRequest


package org.jboss.seam.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;

import org.jboss.seam.contexts.Lifecycle;
import org.jboss.seam.contexts.ServletLifecycle;
import org.jboss.seam.core.ConversationPropagation;
import org.jboss.seam.core.Manager;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;
import org.jboss.seam.web.ServletContexts;

/**
* Perform work in a full set of Seam contexts
*
* @author Gavin King
*
*/
public abstract class ContextualHttpServletRequest
{
private static final LogProvider log = Logging.getLogProvider(ContextualHttpServletRequest.class);

private final HttpServletRequest request;

public ContextualHttpServletRequest(HttpServletRequest request)
{
this.request = request;//实例化抽象ContextualHttpServletRequest
}

public abstract void process() throws Exception;//使用所请求方法体

public void run() throws ServletException, IOException
{
log.debug("beginning request");
ServletLifecycle.beginRequest(request);
ServletContexts.instance().setRequest(request);
restoreConversationId();//重建会话ID
Manager.instance().restoreConversation();
ServletLifecycle.resumeConversation(request);//存储会话ID
handleConversationPropagation();

// Force creation of the session
if (request.getSession(false) == null)
{
request.getSession(true);
}

try
{
process();
//TODO: conversation timeout
Manager.instance().endRequest( new ServletRequestSessionMap(request) );
ServletLifecycle.endRequest(request);
}
catch (IOException ioe)
{
Lifecycle.endRequest();
log.warn("ended request due to exception", ioe);
throw ioe;
}
catch (ServletException se)
{
Lifecycle.endRequest();
log.warn("ended request due to exception", se);
throw se;
}
catch (Exception e)
{
Lifecycle.endRequest();
log.warn("ended request due to exception", e);
throw new ServletException(e);
}
finally
{
log.debug("ended request");
}
}

protected void handleConversationPropagation()
{
Manager.instance().handleConversationPropagation( request.getParameterMap() );
}

protected void restoreConversationId()
{
ConversationPropagation.instance().restoreConversationId( request.getParameterMap() );
}

}

功效:此类使用来处理HttpServelt的Seam上下文生命周期处理的,实现此类即可获得完整Seam生命周期处理.
方法:1.自写HttpServelt
2.在doGet or doPost 中实例化抽象ContextualHttpServletRequest,然后调用run方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值