This things are same or different if different then please give me reason for that and How?
1) pageContext.setAttribute(\"first\"
In JSP pages you have up to "4 places" where you can put objects to retrieve them later.
1) Page scope
Whatever you put into your page scope is available only there. Any other page in the same request included via or forwarded will not see the object since they define their own page scope which does not contain the page scope of the calling page.
This is the default scope, so calling pageContext.setAttribute("a", "b", PageContext.PAGE_SCOPE);
is the same as calling pageContext.setAttribute("a", "b");
2) Request scope
What you put on your request scope is available across all the pages of the request serving this JSP page. So other pages included or forwarded (not HTTP redirect) will share this context and can access the attributes declared in the calling page context.
Calling pageContext.setAttribute("a", "b", PageContext.REQUEST_SCOPE);
is the same as calling request.setAttribute("a", "b");
3) Session scope
What you put on your session scope is available across all requests on the same user session.
Calling pageContext.setAttribute("a", "b", PageContext.SESSION_SCOPE);
is the same as calling session.setAttribute("a", "b");
4) Application scope
What you put on your application scope is available across all requests on your application (i.e. is shared by all users). This implies a lifetime that is basically as long as the application is running. So you generally don't want to use this one.
Calling pageContext.setAttribute("a", "b", PageContext.APPLICATION_SCOPE);
is equal to calling application.setAttribute("a", "b");