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。