When i make some changes to the java content of my jsp (i.e,scriptlet), why do these changes reflect directly eventhough a JSP internally converts to a servlet??where as when changes are made to servlet they must be compiled manually to reflect the changes that have been made?
Because a .jsp is not converted to a servlet internally in the way you might think. A .jsp page is compiled on the fly the first time it's requested, and relies on an actual servlet to be able to run. A true servlet is already compiled when it's installed.
After the changed JSP is translated into a servlet, that servlet is compiled and the resulting class is re-loaded, replacing the previously loaded class for that JSP's servlet. The reason that this is possible is because the containers use a special class-loader for re-loadng the JSP-generated servlet classes. Regular servlets use a "normal" class loader that doesn't reload classes on-the-fly.