JSP技术n教学目标n理解JSP的运行过程,与Servlet的关系n掌握JSP语法n了解Cookie的用法n转发JSPnJSP异常处理PDF文件使用pdfFactory试用版本创建文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标签,就构成了JSP网页,参见hello.jsp。nJava程序片段可以操纵数据库、重新定向网页以及发送E-mail等,实现建立动态网站所需要的功能。n所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持Java,也可以访问JSP网页。PDF文件使用pdfFactory试用版本创建接口,该接口扩展了javax.servlet.Servlet接口。n在javax.servlet.jsp.JspPage接口中定义了代表JSP生命周期的方法jspInit()和jspDestroy(),类似于Servlet的init()和destroy()方法。n参考hello.jsp的Servlet源文件PDF文件使用pdfFactory试用版本创建文件包含如下内容:nJSP指令(或称为指示语句)nJSP声明nJava程序片段(Scriptlet)n变量数据的Java表达式n隐含对象PDF文件使用pdfFactory试用版本创建网页相关的属性,如网页的编码方式和脚本语言等。JSP指令的一般语法形式为:%@指令名属性=值%n常用的3种指令:npagenincludentaglibPDF文件使用pdfFactory试用版本创建指令(page指令)npage指令可以指定所使用的脚本语言、导入的软件包以及字符编码等。n例如:%@pagelanguage=java%%@pageimport=java.io.*,java.util.Hashtable%%@pagecontent_type=text/html;charset=GB2312%PDF文件使用pdfFactory试用版本创建指令(include指令)nJSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。ninclude指令的语法:%@includefile=relativeURL%PDF文件使用pdfFactory试用版本创建指令(include指令)n在开发网站时,如果多数JSP网页都包含相同的内容,可以把这部分相同的内容单独放到一个文件中,其他的JSP文件通过include指令将这个文件包含进来,这样做可以提高开发网站的效率,而且便于维护网页。PDF文件使用pdfFactory试用版本创建指令(include指令)n参考index.jsp和product.jsp访问文件使用pdfFactory试用版本创建声明(在%!和%内的)用于声明JSP代表的Servlet类的成员变量和方法。语法如下:%!declaration;[declaration;]…%n例如:%!inti=0;%%!inta,b,c;%%!Stringh=newString(hello);%%!publicStringmethod1(inti){if(i3)returni3;elsereturni=3;}%PDF文件使用pdfFactory试用版本创建文件中,可以在%和%标记间直接嵌入任何有效的Java语言代码。这样嵌入的程序片段称为Scriptlet。n例如:%Stringgender=female;if(gender.equals(female)){%Sheisagirl.%}else{%Heisaboy.%}%PDF文件使用pdfFactory试用版本创建程序片段(续)n以上代码等价于以下Servlet的service方法:publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{PrintWriterout=response.getWriter();Stringgender=female;//局部变量if(gender.equals(female))out.println(Sheisagirl.);elseout.println(Heisaboy.);}PDF文件使用pdfFactory试用版本创建表达式标记为%=和%。该表达式的值会显示在网页上。n例如,以下是hitcount.jsp的部分代码:%!inthitcount=0;%%intcount=0;%H1hitcount=%=hitcount++%/H1brH1count=%=count++%/H1brPDF文件使用pdfFactory试用版本创建程序时,可以直接使用Servlet容器提供的隐含对象。使用这些对象的引用变量时不需要做任何变量声明。PDF文件使用pdfFactory试用版本创建(相当于Java中的this关键字)nsessionjavax.servlet.http.HttpSessionnexceptionjava.lang.ExceptionPDF文件使用pdfFactory试用版本创建例如,在JSP中可以直接通过request变量获取HTTP请求信息中的参数:%Stringusername=request.getParameter(username);out.println(username);%PDF文件使用pdfFactory试用版本创建的英文原意是“点心”,它是用户访问Web服务器时,服务器在用户硬盘上存放的信息,好像是服务器送给客户的“点心”。n服务器可以根据Cookie来跟踪用户,这对于需要区别用户的场合(如电子商务)特别有用。PDF文件使用pdfFactory试用版本创建。下面的代码生成一个Cookie并将它写到用户的硬盘上:CookietheCookie=newCookie(cookieName,cookieValue);response.addCookie(theCookie);n默认情况下,Cookie的生命周期为当前会话,也可以用它的setMaxAge()方法设置Cookie的生命周期。例如:cookie.setMaxAge(60*60*24*365);//设置一年的有效期PDF文件使用pdfFactory试用版本创建,参考jspCookie.jsp%Cookie[]cookies=request.getCookies();for(inti=0;icookies.length;i++){%pbCookiename:/b%=cookies[i].getName()%bCookievalue:/b%=cookies[i].getValue()%/p%}%PDF文件使用pdfFactory试用版本创建标签用于将客户请求转发到其他的HTML文件、JSP文件或者Servlet文件。njsp:forward的语法为:jsp:forwardpage=“重新转发的文件/PDF文件使用pdfFactory试用版本创建=request.getRequestDispatcher(“重新转发的文件”);Rd.forward(request,response);PDF文件使用pdfFactory试用版本创建标签,那么这个JSP文件中的所有输出数据都不会被发送到客户端,并且jsp:forward标签以下的代码不会被执行。n转发目标组件与源组件共享同一个HttpServletRequest对象。n参考jspForward1.jsp和jspForward2.jspPDF文件使用pdfFactory试用版本创建和aa标记和jsp:forward标记有着不同的运行机制。nahref=jspForward2.jsp?name=JackjspForward2/anjsp:forwardpage=jspForward2.jsp/PDF文件使用pdfFactory试用版本创建代码时发生异常,可以通过下面的指令将HTTP请求转发给另一个专门处理异常的网页:%@pageerrorPage=errorpage.jsp%PDF文件使用pdfFactory试用版本创建在处理异常的网页中,应该通过如下语句将该网页声明为异常处理网页:%@pageisErrorPage=true%n在处理异常的网页中可以直接访问exception隐含对象,获取详细的异常信息,例如:p错误原因为:%exception.printStackTrace(newPrintWriter(out));%/pPDF文件使用pdfFactory试用版本创建访问