2.6 ServletRequestContext
有时候访问原生的servlet接口是必须的,但是RenderContext不能访问原生的servlet接口,因为它的接口不是绑定在(servlet或者portlet)上面。这样意味着RenderContext没有提供方法来访问request,response和config对象。
ServletRequestContext 接口派生自RendContext,它提供了servlet规范的功能。
在render方法中,可以用ServletRequestContext来代替RenderContext形参。这种方法使得render方法绑定servlet API, 迁移到其他环境实现这种方法可能很困难。对于某些开发者来说,这些问题可能不重要。下面的代码重写上一节的代码,这里使用了servlet规范特有的功能,这段代码比上一段代码有那么一点点的冗长。
public String render( ServletRequestContext context )
{
HttpSession session = context.getServletSession();
HttpServletRequest request = context.getServletRequest();
SearchFilter filter = ( SearchFilter )
session.getAttribute( "topics_filter" );
if( filter == null )
{
filter = new SearchFilter();
session.setAttribute( "topics_filter", filter );
}
List topics = getTopics( filter );
request.setAttribute( "topics", topics );
return "display_topics";
}
这段代码和上一节那段代码的主要不同是,无论在传统的web请求中,还是在web service请求中,这段代码都要访问session。