一 JSP基础前言:众所周知,jsp是市场上已经半淘汰的技术,20年前就作为大学授课内容,如今仍然普遍存在于各个本科学校。1什么是JSPJava Server Pages,它和servle技术一样,是Java中用于开发动态web资源的技术。JSP相当于Java + HtmlJSP的最大的特点在于,写JSP就像在写html。相比html而言,html只能为用户提供静态数据,而JSP技术允许在页面中嵌套java代码,为用户提供动态数据。相比Servlet而言,Servlet很难对数据进行排版,而JSP除了可以用java代码产生动态数据的同时,也很容易对数据进行排版。不管是JSP还是Servlet,虽然都可以用于开发动态web资源。但由于这2门技术各自的特点,在长期的软件实践中,人们逐渐把Servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。原因在于,程序的数据通常要美化后再输出,让JSP既用java代码产生动态数据,又做美化会导致页面难以维护;让Servlet既产生数据,又在里面嵌套Html代码美化数据,同样也会导致程序可读性差,难以维护。因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,Servlet只负责响应请求产生数据,并把数据通过转发技术带给JSP,数据的显示JSP来做。2 JSP****执行过程JSP本质上就是Servlet每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。注意:第一次访问JSP文件时,会在tomcat的work目录下生成对应的java文件,然后编译为字节码文件,执行JSP时,其实就是执行对应的class文件,并执行其中的相关方法二** JSP****语法 **1 JSP****脚本在 JSP 中,可以使用脚本写入 Java 代码基本语法:%Java语句%注意:JSP脚本中只能出现java代码,不能出现其它模板元素(html相关标签), JSP引擎在翻译JSP页面中,会将JSP脚本中的Java代码将被原封不动地放到Servlet的_jspService方法中。JSP脚本片断中的Java代码必须严格遵循Java语法!--jsp脚本,脚本中声明的变量放在_jspService方法中--%// 相当于局部变量intnum=10;Stringname="zhangsan";System.out.println(name);Datedate=newDate();SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");StringdateStr=sdf.format(date);System.out.println(dateStr);%单个脚本中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完整的Java语句,例如:%for(inti=1;i5;i++){%H1hahahaha/H1%}%%for(inti=1;i=6;i++){response.getWriter().write("h"+i+"标题"+i+"h"+i+"/");}%%for(inti=1;i=6;i++){%h%=i%标题%=i%/h%=i%%}%2 JSP****表达式JSP 表达式可以把变量或者表达式输出到网页上%=java的表达式%JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.write(…) 将数据输给客户端。注意:JSP脚本表达式中的变量或表达式后面不能有分号(;)。!--jsp表达式--!--相当于out.print(name.length());--%=name%%=name.length()%当前时间:%=newjava.util.Date()%3 JSP****声明JSP 声明语句用于声明变量、方法%!定义变量、方法等%JSP声明中的java代码被翻译到_jspService方法的外面,即成为成员变量/成员方法。!--jsp声明--%!//相当于成员变量privateintaaa=10;//定义了一个方法publicintadd(inta,intb){returna+b;}intsum=add(10,12);//System.out.println(sum);%4 JSP****注释%--注释的内容--%附录JSP三大指令JSP的指令并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分JSP指令的基本语法格式:%@ 指令 属性名="值"%1 include指令include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。语法:%@ include file="relativeURL"%其中的file属性用于指定被引入文件的相对路径。file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录,否则,表示相对于当前文件。注意:被引入的文件必须遵循JSP语法。被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容。由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(pageEncoding和导包除外)。%@ page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"session="false"%!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"htmlheadmeta http-equiv="Content-Type"content="text/html; charset=UTF-8"titleInserttitle here/title!--静态包含 引入需要包含的文件,将多个文件合并成一个文件,转换为一份java代码--%@includefile="head.jsp"%/headbodyinclude用法/body/html%@ page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%link type="text/css"href="css/index.css"/linkscript type="text/javascript"src="js/common.js"/scriptscript type="text/javascript"src="js/common2.js"