什么是JSP
jsp和servlet一样是sun公司定义的一种用于开发动态web资源的技术。
写jsp和写html很像,但是html只能提供静态数据,而jsp可以内嵌java代码,为用户提供动态数据
JSP运行原理
浏览器向服务器发送请求,其实不过访问什么资源都是在访问servlet。当服务器执行jsp时,会把jsp翻译成servlet,所以当访问一个jsp页面时,其实是在访问servlet。
新建一个web project 然后部署到tomcat上,然后访问index.jsp会发现在tomcat的work\Catalina\localhost\Web_1.2\org\apache\jsp
目录下会出现
点击打开index_jsp.java可以知道
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
接着查看tomcat的源码或者反编译tomcat的lib下的jasper.jar可以知道
public abstract class HttpJspBase extends HttpServlet
所以jsp就是一个servlet
翻译后的_jspService方法
在jsp中编写的java代码和html代码都会被翻译到_jspService方法中去,在jsp中编写的java代码会原封不动地翻译成java代码,如<%out.print("Hello Jsp");%>
直接翻译成out.print(“Hello Jsp”);而html代码则会翻译成使用out.write("<html标签>\r\n")
;的形式输出到浏览器。在jsp页面中编写的html排版标签都是以out.write("<html标签>\r\n")
;的形式输出到浏览器,浏览器拿到html代码后才能够解析执行html代码。
服务器给_jspService提供8个java对象
PageContext pageContext;
HttpSession session;
ServletContext application;
ServletConfig config;
JspWriter out;
Object page = this;
HttpServletRequest request,
HttpServletResponse response
这8个对象属于jsp的9个内置对象(还有一个exception),在jsp中可以用java代码直接使用
Tomcat服务器执行流程
第一次执行:
1客户端通过电脑连接服务器,因为是请求是动态的,所以所有的请求交给WEB容器来处理
2在容器中找到需要执行的*.jsp文件
3之后.jsp文件通过转换变为.java文件
4*.java文件经过编译后,形成*.class文件
5最终服务器要执行形成的*.class文件第二次执行:
因为已经存在了*.class文件,所以不在需要转换和编译的过程
修改后执行:
源文件已经被修改过了,所以需要重新转换,重新编译。