在JSP出现之前,java体系的动态网页是由servlet来生成的。但由于用Servlet生产动态网页非常麻烦,难于维护,必须由程序员来编写,页面设计人员如果不懂java代码,根本无法维护。经过进化就产生了JSP。JSP把原来在Servlet中用out.print()方法输出来的html元素,都直接写在页面,简单很多。
其实,JSP并不能直接在java的容器里面运行,JSP文件在“编译”前都需要“翻译”,把JSP文件转换成Servlet。一个JSP文件翻译成一个对应的Servlet,而Servlet是java类,java容器编译Servlet并运行它们。最终返回浏览器的文件还是由Servlet产生的。我们写的所有JSP,最终都会被JSP容器转换成Servlet,再由Servlet产生页面返回浏览器。JSP之所以存在,是因为写JSP页面比直接写Servlet容易多,简单直观,而容器可以把JSP转换成Servlet,可以很大程度上节省工作量和减轻工作难度。
在JSP页面中,JSP元素可以分为三大类:JSP指令元素、JSP动作元素、JSP脚本元素。
一、JSP指令元素仅仅是在“翻译”阶段使用的,即把JSP翻译成Servlet。JSP指令元素只有“三个”:page、taglib、include。但每个指令可能有若干个属性。比如:page指令有contentType属性、有import属性等。
二、 jsp动作元素又可分为“三种”:JSP标准动作元素,JSP标准标记库(JSTL)动作元素,自定义动作元素。
三、JSP脚本元素:JSP脚本元素在JSTL还没发展起来时,是JSP代码的主要组成部分,在JSP脚本里面可以写各种各样的java代码来完成各种任务。但JSP页面中大量使用JSP脚本元素会使JSP页面凌乱,而且JSP页面使用JSP脚本元素不方便编程任务的分工。可以说,JSTL就是为了解决JSP脚本元素带来的问题而产生的。有了JSTL后,可以用JSTL取代JSP脚本元素(但JSTL还在完善中,有时不能100%的取代JSP页面中的JSP脚本元素)。EL表达式也是JSP在后来引进的。他可以为JSP标记的属性等动态赋值,比JSP表达式更加简单易用。
在“JSP标准动作元素”和“JSP标准标记库(JSTL)动作元素”中,有些动作的功能是相同或相似,你可以任意选择其中一种来用。但因为“JSP标准标记库(JSTL)动作元素”是后来才制定,它通常功能更强,而且书写更简单,一般建议选用JSTL中的标记。
在JSP中用bean,有很强的捕获提交参数的功能,形如:
<jsp:useBean id="userInfo" class="org.abc.jsp.UserInfoBean">
<jsp:setProperty name="userInfo" property="*"/>
</jsp:useBean>
只要你表单中输入域的名字跟Bean中的属性名一样,它就会自动把输入域中的值赋给bean的那个属性。
JSP有主要有10个重要内置对象:out,response,request,session,application,cookie,page,pageContext,config,exception。
JSP有11个动作元素:<jsp:useBean>,<jsp:getProperty>,<jsp:setProperty>,<jsp:include>,<jsp:forward>,<jsp:param>,<jsp:plugin>,<jsp:attribute>,<jsp:body>,<jsp:element>,<jsp:text>