One noticeable benefit you get using tag files is that the parameter which you pass to the included file is not added to the request object...
for eg:
this is the file to be included...
include.jsp
<html>
welcome ${param.username}
</html>
in the mainpage where you are including the page...
<jsp:include page="include.jsp">
<jsp
aram name="username" value="Atul"/>
</jsp:include>
now the parameter username is attached to request object and that is why can be available at request scope to anyone.
if you introduce include.tag
<%@ taglib prefix="tags" tagdir="/technology/WEB-INF/tags" %>
<tags:include username"Atul"/>
in include.tag
<%@ attribute name="username" required="true" %>
Welcome ${username}
The parameter "username" is then only available to the tag file "include.tag" ...no one else.
Nothing great about it but just matter of performance.