ITjob就业培训java教材29_第1页
ITjob就业培训java教材29_第2页
ITjob就业培训java教材29_第3页
ITjob就业培训java教材29_第4页
ITjob就业培训java教材29_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二十九章:JSP技术 ITjob就业培训第二十九章: Jsp 技术学习目标n JSP介绍n JSP语法n JSP内置对象n 自定义标签n 标准标签的使用JSP介绍JSP(Java Server Page)是Servlet的简化设计。注重的是显示方面,而Servlet主要是负责控制,在MVC模式里面,JSP处于视图层,Servlet处于控制器层。JSP语法JSP是由模板元素(html/xml等),指令元素,java脚本,动作元素组成的。 JSP的执行原理如下图:*.jsp请求JSP 引擎编译*.javaservletservlet的分析器*.class结果JSP的执行过程如下图:查找对应的JSP文件是否存在是否是修改或者第一次调用调用JSP引擎将其编译成Servlet源程序调用JDK将对应的Servlet程序编译成Servlet字节码由虚拟机执行Servlet字节码执行结束请看下例:JSP源文件 test.jspMy JSP test.jsp starting page%for (int i = 0; i 5; i+) out.println(hello);%经编译后的Servlet源文件package org.apache.jsp;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;import java.util.*;public final class test_jsp extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent private static java.util.Vector _jspx_dependants;public java.util.List getDependants() return _jspx_dependants;public void _jspService(HttpServletRequest request,HttpServletResponse response) throws java.io.IOException,ServletException JspFactory _jspxFactory = null;PageContext pageContext = null;HttpSession session = null;ServletContext application = null;ServletConfig config = null;JspWriter out = null;Object page = this;JspWriter _jspx_out = null;try _jspxFactory = JspFactory.getDefaultFactory();response.setContentType(text/html;charset=ISO-8859-1);pageContext = _jspxFactory.getPageContext(this, request, response,null, true, 8192, true);application = pageContext.getServletContext();config = pageContext.getServletConfig();session = pageContext.getSession();out = pageContext.getOut();_jspx_out = out;out.write(rnrnrnrn rn My JSP test.jsp starting pagern rn rn rn );for (int i = 0; i 5; i+) out.println(hello);out.write(rn rnrn); catch (Throwable t) if (!(t instanceof SkipPageException) out = _jspx_out;if (out != null & out.getBufferSize() != 0)out.clearBuffer();if (pageContext != null)pageContext.handlePageException(t); finally if (_jspxFactory != null)_jspxFactory.releasePageContext(pageContext);执行完该Servlet生成的结果如下:My JSP test.jsp starting pagehellohellohellohellohello页面显示的结果如下图:模板元素模板元素主要是指HTML模板,它是JSP引擎里面不执行的部分。这些HTML标记数据直接会传送到客户端的浏览器。关于HTML请找些相关资料,花三个小时就可以搞定了,在此就不多做介绍了。指令元素1, 页面指令 (page指令)2, 包含指令 (include指令)3, 标签库指令 (taglib指令)这三个包含在“”卷标里 页面指令“”指令作用于整个JSP页面,同样包括静态的包含文件。但是“”指令不能作用于动态的包含文件,比如 “”。可以在一个页面中用上多个“”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Language,import语句引入得是Java语言中的类),所以此属性就能多用几次。无论把“”指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。如:所有属性用法如下:对主要常用属性的解释:1language=java 声明脚本语言的种类,目前只能用java 。2.import=package.class | package.* ,. 需要导入的Java包的列表,这些包作用于程序段,表达式,以及声明。下面的包在JSP编译时已经导入了,所以就不需要再指明了: java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.* 3errorPage=relativeURL 设置处理异常事件的JSP文件。 4isErrorPage=true | false 设置此页是否为出错页,如果被设置为true,你就能使用exception对象exception对象示例,ErrorPage.jsp文件代码请看下例使用page指令的测试页面使用表达式语言: $23:$23显示结果如下:包含指令是页面里包含有其他的页面。格式如:如下例:head.jsp-head-body.jspthis is body*body*footer.jsp-footer-include.jsp浏览器的运行结果为:标签库指令格式如下例:testtag.jsphello在浏览器里的运行结果为:脚本元素声明声明的格式为:声明是声明实例变量,在转换成Servlet源文件的时候是以属性的形式生成。表达式表达式是或者运算值表达式的格式为:scriptlet脚本scriptlet是java脚本,里面可以直接写java代码。scriptlet的格式为:如下例:jiaoben.jspMy JSP jiaoben.jsp starting page% String mess = test scriptlet; out.print(mess + ); if(age 18) %成人拉!该人的年龄为:转换成Servlet的代码如下:package org.apache.jsp;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;import java.util.*;public final class jiaoben_jsp extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent int age = 28;private static java.util.Vector _jspx_dependants;public java.util.List getDependants() return _jspx_dependants;public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; try _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType(text/html;charset=gbk); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write(rnrnrn rn rn My JSP jiaoben.jsp starting pagernrn rn ); out.write(rn rn ); String mess = test scriptlet; out.print(mess + ); if(age 18) out.write(鎴愪汉鎷夛紒rn ); out.write(rn 璇汉鐨勫勾榫勪负锛?); out.print(age ); out.write(rn rnrn); catch (Throwable t) if (!(t instanceof SkipPageException) out = _jspx_out; if (out != null & out.getBufferSize() != 0) out.clearBuffer(); if (pageContext != null) pageContext.handlePageException(t); finally if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext); 注意:在声明的String mess = test scriptlet; 是生成在方法里的。在声明的int age = 28; 是生成在属性里的。执行完后生成的HTML代码如下:My JSP jiaoben.jsp starting pagetest scriptlet成人拉!该人的年龄为:28在浏览器里的运行结果如下图:注意: 在标准的开发里面,是不允许在页面里面直接写java代码的。在页面里面只能以标签的形式出现。本章后面会介绍通过自定义标签来取代直接写java代码的操作。但是在要求不高的小型项目里面,在页面里面直接使用java代码会提高开发效率。动作元素常使用的动作元素为: ,jsp:useBean,等等动作向另一个文件传递一个包含用户请求的request对象 标签以后的代码,将不能执行。注意jsp:forward和response.sendRedirect的区别在于forward在同一个request作用范围内,而重定向是另一个请求。下面的例子传递一个参数到forwardTo.jspjspone.jspforwardTo.jsp输出: riso谢谢光临! 包含一个静态或动态文件与区别是前者是动态的,页面的内容可以改变,而后者是静态的,一经载入页面,将不能修改。请看下例:static.htmlplease input your name:input you password:two.jsp举例说明include的工作原理:this is a1=this is a2=jsp_include.jspgoto two-this examples show include worksjsp:param name=a1 value= /jsp:param name=a2 value= /从浏览器里输入:http:/localhost:818/JspDemo/jsp_include.jsp看到结果为:下面介绍JavaBean的使用操作:PersonBean.javapackage com.bean;public class PersonBean private String name;private String password;public void setName(String name) = name;public void setPass(String pass) this.password = pass;public String getName() return ;public String getPass() return this.password;login.jspbase href=My JSP login.jsp starting page!-name:pass:从浏览器里输入:http:/localhost:818/JspDemo/login.jsp结果为:当点击login按钮,会跳到bean.jspbean.jspname:pass:运行的结果为:注意:JavaBean的属性存取是通过setXXX(),getXXX()方法来执行,而不是根据属性的名字来存取的。 JavaBean的scope=page | request | session | application page在包含“”元素的JSP文件以及该文件中所有静态包含文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。 request 在任何执行相同请求的Jsp文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。能够使用Request对象访问这个Bean,比如request.getAttribute(beanInstanceName)。 session - 从创建Bean开始,就能在任何使用相同session的jsp文件中使用这个Bean。这个Bean存在于整个Session生存周期内,任何在分享此Session的Jsp文件都能使用同一Bean。注意在创建这个Bean的Jsp文件中“”指令中必须指定“session=true”。 application - 从创建Bean开始,就能在任何使用相同application的Jsp文件中使用Bean。这个Bean存在于整个application生存周期内,任何在分享此application的Jsp文件都能使用同一Bean. JSP内置对象JSP 有以下九种内置对象,包括:request,请求对象response,响应对象pageContext,页面上下文对象session,会话对象application,应用程序对象out,输出对象config,配置对象page,页面对象exception,例外对象下表对九个内置对象的解释对象名类型作用域requestjavax.servlet.ServletRequest 的子类requestresponsejavax.servlet.ServletResponse 的子类pagepageContextjavax.servlet.jsp.PageContextpagesessionjavax.servlet.http.HttpSessionsessionapplicationjavax.servlet.ServletContextapplicationoutjavax.servlet.jsp.JspWriterpageconfig java.servlet.ServletConfigpagepage java.lang.Objectpageexceptionjava.lang.Throwablepagerequest 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。关于它的方法使用较多的是getParameter、getParameterNames和getParameterValues,通过调用这几个方法来获取请求对象中所包含的参数的值;response 对象代表的是对客户端的响应,也就是说可以通“response”对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用“out” 对象即可。 pageContext 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性,常用的方法包括findAttribute、getAttribute、getAttributesScope和getAttributeNamesInScope,一般情况下“pageContext” 对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。session 对象代表服务器与客户端所建立的会话,是在服务器端保存客户的信息。主要是跟踪用户的状态,比如是否登陆等。Session对象记载某一特定的客户信息,不同的客户用不同的Session对象来记载。Session对象有效期:默认为20分钟,可设定。常用的方法包括getId、 getValue、 getValueNames和putValue等。 application” 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有setAttribute和getAttribute等。与Session的区别是:Session对象记载某一特定的客户信息,不同的客户用不同的Session对象来记载而Application对象记载所有访问该应用程序的客户信息 。out 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。config 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。page 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。exception 对象则代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“”的JSP文件中使用。out对象的使用操作如下代码:%response.setContentType(text/html);out.println(学习使用out对象:);out.println(out.println(boolean):);out.println(true);out.println(out.println(char):);out.println(a);out.println(out.println(char):);out.println(new chara,b);out.println(out.println(double):);out.println(2.3d);out.println(out.println(float):);out.println(43.2f);out.println(out.println(int):);out.println(34);out.println(out.println(long):);out.println(2342342343242354L);out.println(out.println(object):);out.println(new java.util.Date();out.println(out.println(string):);out.println(string);out.println(out.newLine():);out.newLine();out.println(out.getBufferSize():);out.println(out.getBufferSize();out.println(out.getRemaining():);out.println(out.getRemaining();out.println(out.isAutoFlush():);out.println(out.isAutoFlush();out.flush();%运行的结果如下:config对象的测试代码如下:Untitled Document在web.xml中的配置信息为:This is the description of my J2EE componentThis is the display name of my J2EE componentSessionServetcom.servlet.SessionServetconfig_counter/config.jspcounter1000config_counter/config_counterSessionServet/servlet在浏览器里的运行结果为:session,application.request对象已经在Servlet里介绍过了。用法完全一样,这里就不多说了。剩余的内置对象由于不是太常用,在这里也不介绍了。Session和Application对象S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论