When you implement BodyTag (by extending BodyTagSupport), you get two more lifecycle methods—setBodyContent() and doInitBody(). You also get one new return value for doStartTag(), EVAL_BODY_BUFFERED. That means there are now three possible return values for doStartTag(), instead of the two you get when you extend TagSupport.
Lifecycle for a tag that implements BodyTag (directly or by extending BodyTagSupport)