刚学习JSP的时候, 很多人都说JSP其实就是servlet草稿, 当时不是很懂(只知道JSP确实是个servlet)。
其实,最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器。一种名为SSI(Server Side Includes)的技术可以让Web服务器在返回HTML文件前,更新HTML文件的某些内容,但其功能非常有限。
后来出现了大名鼎鼎的CGI(common gateway interface), 这个技术大大提升了动态的概念。 不过它有明显的缺点就是编写困难, 且以进程方式运行, 所以导致慢, 性能受限。
后来SUN推出Servlet, 随后就推出JSP(当然, 之前还有很多优秀的产品, PHP,PERL等等)。
首先客户端发送request给服务器, 服务器使servlet容器实例化servlet(单实例,多线程)来响应客户端的request。
其实我们编写的JSP文件会被容器首先生成java文件, 然后编译成class文件,再去执行。
还记得可以在servlet里使用如下代码返回给客户端页面吗?
out.println("<html><head><title></title></head><body><h1>hello, jsp</h1></body></html>");
其实我们写的JSP文件会变成类似这样的java文件, 可以在tomcat的项目里查看到相应的.java文件, 打开之后就会看到大量的这种代码。
所以说JSP就是servlet草稿, 以前似乎也有前辈们习惯以上面那种方式编写servlet来响应客户端请求。
JSP容器的职责就是将jsp文件变成java文件, 然后使JVM可以编译运行它。