Servlet虽然可以实现全部动态Web应用程序的功能,但是用Servlet显示用户接口时,必须将客户端代码使用HttpServletResponse对象发送到客户端,当客户端页面十分复杂时,会导致工作量相当大且不易维护。于是出现了JSP,JSP和ASP非常相似,它们都是在同一个页面中混合了客户端代码和服务端代码。如下图所示,第一次访问JSP页面时,JSP页面会被JSP引擎翻译成Servlet,然后交由Servlet引擎来运行,如果该页面不是第一次访问,则Web服务器会直接将请求交由Servlet引擎来运行已由JSP生成的Servlet程序。
总结来说:
①JSP页面本质上属于Servlet。
JSP工作原理: JSP页面在执行的时候会被服务器端的JSP引擎转换为Servelet(.java),然后又由JSP引擎调用Java编译器,将Servelet(.java)编译为Class文件(.class),并由Java虚拟机(JVM)解释执行。如有一个JSP页面My.jsp,当通过浏览器访问http://localhost:8080/My.jsp,将会出现执行结果。同时在%CATALINA_HOME%/work/Catalina/localhost下多出两个文件:_My_jsp.java和_My_jsp.class,它们分别就是前面说的Servelet和Class文件。因此,JVM只能识别java的类,不能识别JSP的代码,Web容器最终会将JSP的代码编译成JVM能够识别的java类。
②Servlet的应用逻辑是在Java文件中,从Java代码中动态输出HTML,并且完全从表示层中的HTML里分离开来。而JSP则是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。