当用户向某一个Servlet页面发送请求的时候,Servlet页面会以输出流的形式生成html页面。由于所有的字符代码都必须通过out.write生成,所以Servlet的开发效率极为底下。而为了解决此问题,JSP应运而生。JSP实质上就是简化了的Servlet,可以说一个JSP就是一个Servlet实例。JSP页面由静态的html标签元素与镶嵌其中的java片段组成。html代表了静态的内容,而用括号括起来的java代码则代表了jsp的动态部分。Servlet是一个服务器端小程序,来接收网页的输入数据,并调用java的类方法对数据进行处理。

因为jsp已经包含了java代码,那是不是jsp就能独立于java而存在了呢?显而易见答案是否定的。因为jsp是一个简化的servlet,而servlet是一个继承了特定父类的java类。初学者看到这里可能就会产生疑问了,jsp更像是html,怎么又跟有着java血统的servlet扯上关系了呢?原来,每个jsp都相当于一个servlet实例,而在运行的时候,jsp会被jsp容器,也就是Tomcat服务器转译成servelt文件(比如cm.jsp转译成cm_jsp.java),而这个servlet又被编译成.class文件。服务器会去执行这个.class文件来处理请求。对应于jsp的这两个文件都能在Tomcat下找到。打开servlet源文件,会发现主要包含三个方法。_jspInit()负责初始化工作,在jsp网页最开始执行的时候就运行此方法。_jspDestroy()负责销毁之前的方法,最后执行。而_jspService()则是servlet文件的核心。jsp文件中的静态内容都被转译到了这个方法中,以out.write的方式输出。输出符合html标签规范。

jsp运行原理总结:

  1. 1.jsp文件必须在容器内才能运行,向某一个jsp发出request请求,容器会生成servlet文件,所以第一次执行的时候会占用额外的时间。再次调用时,若经过检查发现jsp页面没有修改,则直接使用原来的servlet文件。

  • 2.jsp界面的访问者无需java运行环境,因为返回浏览器的已经是标准html界面。