jsp笔记.docx
- 文档编号:8490854
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:14
- 大小:41.24KB
jsp笔记.docx
《jsp笔记.docx》由会员分享,可在线阅读,更多相关《jsp笔记.docx(14页珍藏版)》请在冰豆网上搜索。
jsp笔记
JSP
JSP(JavaServerPage):
JSP是服务器端运行的页面,JSP本身就是一个文档,不仅可以包含静态的HTML代码,也可以包含动态的Java代码,服务器容器可以JSP转换成Servlet发布,并接收请求。
JSP的特点
1、JSP里面可以嵌入Java代码
2、在运行的时候JSP被容器自动翻译成为一个servlet
3、不需要在配置文件里面配置(当然配置也可以)
4、文件被修改之后,自动被重新编译
5、Servlet生成静态页面比较麻烦,适合做Control层,JSP生成页面比较容易,适合做view层,JSP本质上就是servlet。
JSP生命周期
Y
JSP页面中的内容
JSP页面中的内容可以分为静态部分和动态部分,其中静态部分包括:
HTML、JavaScript、CSS;动态部分包括:
脚本、指令和标签。
脚本:
所谓的“脚本”是指以某种方式直接嵌入到JSP页面中的编程语言中的代码。
即Java代码。
由于JSP运行之前要先被翻译成Servlet代码,根据“脚本”在目标Servlet代码中出现的位置以及系统对它的处理方式,可以将他们分为:
声明、表达式和代码块。
声明:
JSP声明用来定义插入Servlet类的方法和成员变量,其语法如下:
<%!
declaration;[declaration;]...%>
表达式:
JSP表达式用来把Java数据直接插入到输出。
其语法如下:
<%=expression%>
代码块:
如果你要完成的任务比插入简单的表达式更加复杂,可以使用JSPScriptlet。
JSPScriptlet允许你把任意的Java代码插入Servlet。
JSPScriptlet语法如下:
<%codefragment%>。
代码块通常在JSP中用来写条件语句:
ifelse;迭代语句for(),while(),Iterator迭代等。
代码块也可以用来在JSP页面上执行任意的语句,但开发者尽量减少JSP页面中的代码的数量,以增强JSP的可读性及提高代码的复用程度。
减少代码块的主要方法包括:
使用JavaBean及使用标签。
JSP指令元素(DirectivesElements)
指令主要用来提供整个JSP网页相关的信息,并且用来设定JSP页面的相关属性。
指令只在翻译阶段起作用,会影响到servlet代码的生成。
由于发生在翻译阶段并非运行阶段,所有指令中不能引用任何的动态语法内容。
JSP中的指令包括:
页面指令、包含指令和标签库指令。
page页面指令
功能:
设定整个JSP网页的属性和相关功能。
语法:
<%@pageattribute1="value1"attribute2="value2"%>
page指令元素的属性
<%@page
[language="java"]
[extends="package.class"]
[import="{package.class|package.*},..."]
[session="true|false"]
[buffer="none|8kb|sizekb"]
[autoFlush="true|false"]
[isThreadSafe="true|false"]
[info="text"]
[errorPage="relativeURL"]
[contentType="mimeType[;charset=characterSet]"|"text/html;charset=ISO-8859-1"]
[isErrorPage="true|false"]
%>
language="language":
指定JSPContainer要用什么语言来编译JSP网页。
目前只可以使用Java语言,不过不排除增加其它语言。
默认值为Java。
extends="className":
定义此JSP页面产生的Servlet是继承自哪个父类。
必须为实现HttpJspPage接口的类。
JSP规范对不完全理解其隐意的情况下使用此属性提出警告。
import="importList":
定义此JSP页面可以使用哪些JavaAPI。
用逗号分隔列出一个或多个权限类名。
此列表用于在生成的javaservlet中创建相应的导入语句。
以下包是自动包含的,不必被指出:
java.lang.*;java.servlet.*;java.servlet.jsp.*;java.servlet.htt.*
session="true|false":
指明JSP页面是否需要一个HTTP会话,如果为true,那么产生的servlet将包含创建一个HTTP会话(或访问一个HTTP会话)的代码,缺省为true。
buffer="none|sizeinkb":
指定输出流缓存的大小。
缺省为8kb。
authflush="true|false:
决定输出流的缓冲区是否要自动清除。
当值为true时缓存满时将被自动刷新,当值为false时,缓冲区满会抛出溢出异常。
缺省值为true。
isThreadSafe="true":
此JSP页面能处理来自多个线程的同步请求,此值为true,否则为false,生成的servlet表明它实现了SingleThreadMode接口。
SingleThreadMode已经声明不赞成使用(deprecate)
info="text":
表示此JSP页面的相关信息,由getServletInfo()方法返回的。
isErrorPage="true|false":
如果此页面被用作处理异常错误的页面,则为true。
在这种情况下,页面可被指定为另一页面page指令元素中errorPage属性的取值。
指定此属性为true将使exception隐含变量对此页面可用。
缺省值为false。
errorPage="error_url":
表示如果发生异常错误,网页会被重新指向一个URL页面。
错误页面必须在其page指令元素中指定isErrorPage="true"
contentType="ctinfo":
表示将在生成servlet中使用的MIME类型和可选字符解码。
pageEncoding="ctinfo":
表示JSP页面的编码方式。
isELIgnored="true|false":
表示是否在此JSP网页中执行或忽略EL表达式。
如果为true时JSPContainer将忽略EL表达式。
include指令
功能:
在JSP编译时插入包含一个文件。
包含的过程是静态的,包含的文件可以是JSP、HTML、文本或是Java程序。
语法:
<%@includefile="relativeURLspec"%>
标签元素:
includepage="relativeURLspec"/> 提示: include指令元素和行为元素主要有两个方面的不同点。 1.include指令是静态包含,执行时间是在编译阶段执行,引入的内容为静态文要,在编译成servlet时就和包含者融合到一起。 所以file不能是一个变量,也不能在file后接任何参数。 2.include行为是动态包含,执行时间是在请求阶段执行,引入的内容在执行页面时被请求时动态生成再包含到页面中。 taglib指令 功能: 使用标签库定义新的自定义标签,在JSP页面中启用定制行为。 语法: <%@tagliburi="tabLibraryURI"prefix"tagPrefix"%> page指令元素的属性 uri="tagLibraryURI": 标签库描述器的URI,主要是说是tagLibrary的存放位置。 prefix="tagPrefix": 用于标识在页面后面部分使用定制标签的唯一前缀。 JSP动作 JSP动作利用XML语法格式的标记来控制Servlet引擎的行为。 利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。 常用动作: jsp: include: 在页面被请求的时候引入一个文件。 jsp: useBean: 寻找或者实例化一个JavaBean。 jsp: setProperty: 设置JavaBean的属性。 jsp: getProperty: 输出某个JavaBean的属性。 jsp: forward: 把请求转到一个新的页面。 在web开发中页面(servlet、jsp、html--只能被调用)之间进行调用的方式有哪些,这些方式 1、include(包含) includepage="page2.jsp"/> includepage="/time"/> includepage="/time.html"/> Servlet: getServletContext().getRequestDispatcher("url").include(request,reponse); 用来实现页面的复用,要求被包含的程序要有输出结果。 及包含的是程序的输出内容。 2、forward(转发) forwardpage="page2.jsp"/> forwardpage="/time"/> forwardpage="/time.jsp"/> Servlet: getServletContext().getRequestDispatcher("url").forward(request,reponse); 3、redirect(重定向) response.setRedirect(应用的路径+资源的路径); 比较: include和forward: include: 把另外一个页面的输出结果包含到当前的页面中。 在包含之前主页面可以可以输出内容,在包含之后主页面也可以输出内容。 forward: 将控制转向另外的一个页面。 在调用forward时系统先将所有的输出内容清空,因为forward设计的目的是为了实现在web编程中将不同的功能分散到不同的页面中。 forward和redriect: forward是在服务器内做控制转移(客户端是透明的)。 jsp注释: JSP语法 在客户端显示一个注释 --comment[<%=expression%>]--> 例: --Thisfiledisplaystheuserloginscreen--> 在客户端的HTML源代码中产生和上面一样的数据。 例: --Thispagewasloadedon<%=newjava.util.Date()%>--> 在客户端的HTML源代码中显示为: --ThispagewasloadedonAugust3,2009--> 描述: 这种注释和HTML中很像,也就是它可以在"查看源代码"中看到。 唯一有些不同的就是,你可以在这个注释中用表达式(第2个例子所示)。 这个表达示是不定的,由页面不同而不同,你能够使用各种表达式,只要是合法的就行。 隐藏注释 写在JSP程序中,但不是发给客户。 JSP语法: <%--comment--%> 例: <%--Thiscommentwillnotbevisibleinthepagesource--%> 描述: 用隐藏注释标记的字符会在JSP编译时被忽略掉。 这个注释在你希望隐藏或注释你的JSP程序时是很有用的 JSP编译器不是会对<%--and--%>之间的语句进行编译的,它不会显示在客户的浏览器中,也不会在源代码中看到。 在<%----%>之间,你可以任意写注释语句. JavaBean: JavaBean是一种可重复使用且跨平台的软件组件。 JavaBean可分为两种: 一种是有用户界面(UI)的JavaBean;一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。 JSP通常访问的是后一种JavaBean。 JSP与JavaBean搭配使用的好处: 1、使得HTML与Java程序分离,这样便于维护代码。 如果把所有的程序代码都写到JSP网页中,会使得代码繁杂,难以维护。 2、可以降低开发JSP网页人员对Java编程能力的要求。 3、JSP侧重于生成动态网页,事务处理由JavaBean来完成,这样可以充分利用JavaBean组件可重用性的特点,提高开发网站的效率。 任何类,只要满足如下的一个或多个要求都可以被视为JavaBean,并且可以使用java.Beans包下的api对其进行通用的编程。 1、缺省构造器(必须的) 2、通过set/get/is来定义的属性(可选的) 3、可以有任意其他的业务方法 4、最好实现Serializable接口 一个标准的JavaBean有以下几个特征: 1、JavaBean是一个公共的类 2、JavaBean有一个无参的构造器 3、JavaBean通过getXXX/setXXX/isXXX方法取得/设置属性 useBean> 语法: usebean id="beaninstancename" scope="page|request|session|application" [ class="package.class"| type="package.class"| class="package.class"type="package.class"| beanname=""type="package.class" ] >其他元素 usebean> 这个动作使您能将一个javaBean装入一个jsp页面。 这是一个非常有用的能力,因为它使您可以使用可重用的java类而不需牺牲性能。 最简单的语法用于指定一个bean: usebeanid="name"class="package.class"/> 此时在page范围中如果有这样的一个实例存在,那么此时id就会引用它,否则会创建一个这样的实例,并将它的一个引用给id。 那么,您已有了bean,您可以通过jsp: setProperty来修改它,或者通过使用之前用id指定的名字来使用scriptlet或明确的调用方法。 useBean...> body useBean> 要指出的是: body部分应该仅在bean第一次实例化时被执行,而不是在每次被找到和使用时。 beans能够被共享,因此并不是所有的jsp: usebean陈述都产生一个新的bean的实例。 其次,除了id或class以外,还有三种属性可以使用: scope,type,和beanName。 这些属性总结如下: id: 给一个变量命名,此变量将指向bean。 如果发现存在一个具有相同的id和scope的bean则使用而不新建一个。 class: 指出bean的完整的包名。 scope: 指明bean在之上可以被使用的前后关系。 有四个可能的值: page,request,session,和application。 缺省为page,表明bean仅在当前页可用(保存在当前的pageContext中)。 request的一个值表明bean仅用于当前客户端的请求(保存在ServletRequest对象中)。 session的值指出在当前的HttpSession的生命周期内,对象对所有的页面可用。 最后,application的值指出对象对所有共享ServletsContext的页面可以使用。 使用jsp: usebean仅在没有相同的id和scope的bean时创建一个新的bean,如果已有则使用,并忽略以jsp: usebean标志开始和结尾的代码。 type: 指明将指向对象的变量的类型。 这必须与类名相匹配或是一个超类或者是一个实现类的接口。 beanName: 赋予bean一个名字,您应该在beans的实例化方法中提供。 如果提供了type属性和beanName属性,允许省略class属性。 setProperty....../> setpropertyname="beaninstancename" [property="*"| property="propertyname"param="parametername"| property="propertyname"value="" ] /> name: 这是一个必选属性。 它指出哪一个bean的属性将被设置。 jsp: usebean必须出现在jsp: setproperty之前。 property: 这是一个必选属性。 表明您将设置哪一个属性。 然而,有一个特殊的情况: 如果以"*"为值意味着所有的名称与bean的属性匹配的request参数都将被传递到相应的属性设置方法。 value: 这是一个可选属性。 它指定被设置的属性的值。 字符串的值通过相应的对象或包的标准的valueOf方法将自动的转换为numbers,boolean,byte,char,和character。 例如boolean或boolean属性的值“true”将通过boolean.valueOf方法转化,而一个int或integer属性的值“42”将通过integer.valueOf转化。 您不能同时使用value和param属性,但两个都不用是允许的。 param: 这是一个可选属性。 它指明了bean的属性应该继承的request的参数。 如果当前的request没有这样的一个参数,就什么也不做: 系统并不将null传给设置属性的方法。 因此,您可以使用bean的缺省值。 例如,下面的代码片断表示: 如果存在numItems请求参数的话,把numberOfItems属性的值设置为请求参数numItems的值;否则什么也不做。 setPropertyname="orderBean" property="numberOfItems" param="numItems"/> 提示: 如果同时省略value和param,其效果相当于提供一个param且其值等于property的值。 进一步利用这种借助请求参数和属性名字相同进行自动赋值的思想,你还可以在property(Bean属性的名字)中指定“*”,然后省略value和param。 此时,服务器会查看所有的Bean属性和请求参数,如果两者名字相同则自动赋值 修改和检索bean的属性 1、把jsp: setProperty放入jsp: useBean元素的内部 useBeanid="myName"...> ... setPropertyname="myName" property="someProperty".../> useBean> 提示: jsp: setProperty只有在新建Bean实例时才会执行,如果是使用现有实例则不执行jsp: setProperty。 2、使用jsp: setProperty useBeanid="myName".../> ... setPropertyname="myName" property="someProperty".../> JSP内置对象 不用定义可以使用的脚本变量。 只能在代码块和表达式中可以直接使用的对象。 内置对象是放在service方法中的。 1、pageContext: JSP引入一个名为PageContext的类,通过它可以访问页面的许多属性。 PageContext类拥有getRequest、getResponse、getOut、getSession等方法。 pageContext变量存储与当前页面相关联的PageContext对象的值。 2、request: 这个对象是与请求HttpServletRequest相关联的。 可以通过访问请求的参数、请求的类型(例如GET或POST)和HTTP报头(比如: cookie)。 3、response: response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它,它是HttpServletResponse类的实例。 由于输出流一般都会缓冲,在JSP页面的主体内设置HTTP状态码和响应报头一般都是合法的。 4、session: session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。 它是HttpSession类的实例。 JSP中会话是自动创建的,因此即使不存在输入会话的引用,也存在这个变量。 如果使用page指令的session属性禁用自动会话跟踪,则不存在这个变量,而且这种情况下对session变量的引用在JSP页面转换成sevlet时会引起错误。 5、application: application对象实现了用户间数据的共享,可存放全局变 量。 它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。 服务器的启动和关闭决定了application对象的生命。 它是ServletContext类的实例。 //WEB-INF Stringpath="/WEB-INF/pro.properties"; InputStreaminputsteam=application.getResourceAsStream(path); Propertiesprop=newProperties(); prop.load(inputsteam); prop.getProperties("id"); inputsteam.close(); //类路径 path="/WEB-INF/classes/pro.properties"; inputsteam=application.getResourceAsStream(path); Propertiesprop=newProperties(); prop.load(inputsteam); prop.getProperties("id"); inputsteam.close(); //类路径下的一种写法 path="com/test/pro.properties"; inputsteam=Test.class.getClassLoader().getResourceAsStream(path); Propertiesprop=newProperties(); prop.load(inputsteam); prop.getProperties("id"); inputsteam.close(); 6、exception: exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。 如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。 他实际上是java.lang.Throwable的对象。 7、out: out对象是JspWriter类的实例,是向客户端输出内容常用的对象。 8、config: config对象是在一个Servlet初始化时,JSP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jsp 笔记