JSP:Java Servlet Pages,在html页面中添加Java代码,在服务端运行。
在自己之前的概念中JSP和是html也相似专门用来做页面显示的,通过进一步的学习了解到jsp其实就是servlet,它不仅仅可以用来显示还可以写入java的代码,当对它做出修改并保存了之后就会在部署的tomcat服务器中编译成为java类。(以下简称为jsp类)。
我们知道servlet类会继承HttpServlet并且重写其中的doget、dopost方法,tomcat在实例化了servlet类之后是通过调用其中的service方法来决定调用servlet类中的dopost还是doget方法的。Jsp的实质也是这样的,只是要稍微复杂一些,先来看看jsp类和HttpServlet类有什么样的关系。
如上图中在HttpServlet和jsp类之间是通过HttpJspBase关联起来的,HttpJspBase继承了HttpServlet类,同时重写了service方法,在HttpJspBase的service方法中调用的是自己类中_jspService这个虚方法,jsp类继承HttpJspBase并且重写_jspService方法。可以在tomcat服务器的lib文件夹定位相应的jar包,然后找到对应的class,通过反编译工具看一下其中的代码。
我们看一下HttpJspBase和jsp类中的代码。
//HttpJspBase中的关键代码:
public abstractclass HttpJspBase extends HttpServlet
implements HttpJspPage
{
public final voidservice(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
_jspService(request, response);
}
public abstract void_jspService(HttpServletRequest paramHttpServletRequest, HttpServletResponseparamHttpServletResponse)
throws ServletException, IOException;
}
在编译好的jsp类中
publicfinal class user_005fmaint_jsp extends org.apache.jasper.runtime.HttpJspBase
implementsorg.apache.jasper.runtime.JspSourceDependent {
public void _jspService(finaljavax.servlet.http.HttpServletRequest request, finaljavax.servlet.http.HttpServletResponse response)
throws java.io.IOException,javax.servlet.ServletException {
//这其中的我们在jsp中写的java代码和页面显示的代码
}
最后通过时序图看一下整体的流程:
小结
通过对jsp的进一步学习感觉它和当时在学习asp.net的aspx很像,即可以有后天的代码处理也可以有前台的显示,这样做在一定的范围内是比较方便的可以提高开发的效率,但是系统变大了他们的耦合性带来的问题就出来了,所以一般就是用jsp做显示。