EJB is an Enterprise Java Bean -- see link for description, but basically its the 'default' java way of writing an enterprise application.
Hibernate is an ORM Framework; a way to map the Objects/Classes in your application to database tables. It is related to how you persist your data to a database.
Spring is an IoC/Dependency Injection container that provides many useful and well tested abstractions to make your life easier. Spring is sort of like its own application framework.
JSF is Java Server Faces, a view technology for java web applications.
You would use either EJB OR Spring. You could use Hibernate as your persistence implementation, if you wanted, with either; you do not need to do this. For RESTFul webservices, you don't really need JSF.
People are very happy with Spring - I recommend using that...