Bien, la implementación de la seguridad depende mucho del nivel que quieras.
En un nivel básico, donde los usuarios tienen acceso a todas o a ninguna de las páginas, podemos solicitar en una primera página el usuario/contraseña, en caso de ser correcto guardar en el objeto sesión una variable indicándolo y llamar a la primera página. En todas las páginas debes comprobar que la variable anterior esta almacenada de forma correcta y reenviar a una página de error en caso de no serlo (esto mejor hacerlo con un include).
En un nivel medio, donde cada usuario tiene acceso a ciertas páginas sí y a otras no (puede ser dependiendo de perfiles), la comprobación a realizar en cada página es más complicada, realizando la pregunta ¿El usuario tiene acceso a esta página?. Para conocer que página se esta ejecutando tenemos el objeto "page", que debidamente formateado según el servidor donde se ejecute, podemos conocer el nombre de la página.
En un nivel superior, donde cada usuario no solo tiene acceso a ciertas páginas, si no que dentro de cada página puede realizar ciertas acciones, debes mezclar el anterior punto con condiciones especificas dentro de cada página, lo que complica la programación de cada una de ellas.
Como puedes ver, la implementación de la seguridad puede tan complicada como necesites, si lo deseas puedes decirme el nivel exacto y ahondamos más en el tema.
Con respecto a las sesiones, al ser simplemente un pequeño objeto java no hay tutoriales ni libros específicos, creo que de donde más información vas a sacar es del api del propio objeto (javax. Servlet. http.HttpSession):
http://java.sun.com/j2ee/1.4/docs/api/index.htmlPara el resto de objetos (request, pageContext, application, out, config, ...) te doy la misma recomendación.
Si quieres un pequeño curso de JSP te puedo recomendar:
http://www.programacion.com/java/tutorial/servlets_jsp/11/