- 浏览: 663942 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (173)
- ajax (4)
- ant (4)
- css (14)
- eclipse (1)
- exe4j (0)
- hibernate (7)
- html (29)
- http (2)
- install4j (0)
- java (35)
- javascript (31)
- jdbc (1)
- jquery (2)
- jsp (15)
- linux命令 (8)
- ooad (2)
- properties (3)
- servlet (1)
- spring (3)
- struts (6)
- swing (4)
- thread (2)
- version_control (1)
- webservice (4)
- xml (4)
- 数据库 (19)
- 正则表达式 (5)
- 其他 (16)
- 面试题 (1)
- 框架 (9)
- maven (1)
- util (29)
- 设计模式 (1)
最新评论
-
herodie4444:
看起来好像不难。
Java Struts2创建Excel文件并实现文件下载 -
心轨翼:
Java遍历Set集合方法 -
魔鬼的献祭:
...
java的web开发分页工具类 -
Nmxszxsl:
能发一个没有被墙的代码到我的邮箱吗?万分感谢。54365156 ...
Google翻译post提交无长度限制的在线翻译例子 -
782763595:
...
jar包混淆器介绍
JSP介绍
1. 概况
1) 以文本为基础能够返回动态内容到客户端;
2) Http是请求和响应的默认协议;
3) 一个页面可以混和html代码、Java代码以及JSP标签;
4) 允许访问组件;
2. JSP的好处
1) 通过组件使用支持组件模型和软件重用;
2) 源文件改变自动编译;
3) 用户自定义标签简化页面开发;
4) 能把Web内容, Java代码分开(针对Servlet而言);
5) 平台无关;
6) 性能和可扩展;
7) 可靠;
8) 作为J2EE的一部分(Servlet、JSP以及EJB是J2EE的三大组件)。 创建、配置以及执行JSP
1. JSP环境
1) 开发环境 a. 浏览器:IE/Netscape b. 开发工具:记事本、SunOne Studio、JBuilder、
WSAD
2) 配置和执行环境 a. Tomcat b. Weblogic c. Websphere d. SunONE Application Server
2. 第一个JSP页面
1) 脚本小程序(Scriptlet): 对应于Servlet中service方法中内容 <%...%>或
2) 指令(Directives) a. page <%@page import="java.util.*"%>或 b. include <%
@include file="footer.jsp"%>或
3) 声明(Declarations) <%!String str="This is a string!";%>或str="This is a
string!"
4) 表达式(Expressions) <%=str%>或str
脚本元素
1. 在JSP页面通过以下脚本元素可用以插入Java代码
1) 声明(Declarations):<%! %>或
2) 脚本小程序(Scriptlet):<%...%>或
3) 表达式(Expressions):<%=%>或
4) 指令(Directives):<%@%>或
2. 声明(Declarations)
1) 允许定义将插入到Servlet类的主体中(由service调用, 与Service()方法平级)的一些方
法或域;
2) 语法: <%! Java代码 %> 或
3) 示例: a. 变量定义: <%! int i=0;%> b. 方法定义: <%! public String f(int i)
{if(i<3) return("...");...}%>
4) 声明规则: a. JSP中声明的变量和方法对应于Servlet中的实例方法和实例变量。这些将
被同时请求该页面的所有用户所共享; b. 在使用变量或方法前须先定义(不是说声明变量的位置在页
面中要处于使用变量的前面,而是指变量不声明不能使用); c. 声明的变量或方法的作用域为当前页
面或包含的页面; d. 语句间以分号分隔。
3. 脚本小程序(Scriptlet)
1) Java代码片断,能执行比标记语言更强的功能
2) 语法: <%...%>或
3) 脚本小程序规则: a. 你使用的脚本语言决定了脚本小程序的规则; b. 语句间以分号分
隔; c. 可以使用默认的对象、import进的类、declaration声明的方法和对象以及useBean tag中声明
的对象。
4. 表达式(Expression) 答:
1) 用来将值直接插入到输出中
2) 语法: <%=%>或
3) 表达式规则: a. 你使用的脚本语言决定了脚本小程序的规则; b. 执行的顺序为从左到
右; c. 分号不能用于表达式。
5. 指令(Directive)
1) Page: 定义页面的全局属性 语法:<%@page ...%>或
2) Include: 插入一个静态页面内容 语法:<%@include file="header.jsp"%>或
6. 操作(Actions)
1) forward操作:将请求指向一个特定的页面(类似于Servlet中的RequestDispatcher); 语
法:
2) include操作:在页面插入动态的内容 语法:
3) plugin操作:在输出页面嵌入一个对象 语法: ...
7. 注释JSP中有二种类型的注释:
1) 服务器端注释:不会送回客户端 <%--this is a comment--%>
2) 客户端注释:发送回客户端
8. JSP处理过程:JSP源文件处理分成二个阶段:
1) JSP页面转换阶段:页面被编译成一个Java类,所有的HTML标记和JSP标记都被转换创建一
个Servlet。这时,脚本和表达式还没有被执行;
2) 请求处理阶段:发生在服务器将一个客户端请求指向JSP页面。一个请求对象创建、解析
以及提交给编译好的JSP对应的servlet。当这个servlet处理请求的时候它执行先前在JSP中定义的处
理脚本小程序和表达式。
9. 使用脚本代码的缺点和指导方针
1) 缺点: a. 过度使用脚本代码使用JSP页面混乱和难以维护; b. 脚本代码降低JSP二个主
要的优点:软件重用和代码分开
2) 指导方针: 只在组件功能无能为力或需要有限的脚本时使用。
使用可重用组件
1. JavaBeans
1) JavaBeans是一个轻便的、平台无关的、用Java写的组件模型,用以创建可重用的组件;
2) Beans能被组件创建健壮、跨平台的应用程序和小应用程序。
2. JSP和组件
1) 在需要的时候,JSP可以访问JavaBean和EJB;
2) JSP使用action标记来使用、修改以及创建服务器端对象(例如Beans);
3. JavaBean与一般Java类的区别
1) Bean类必须具有不带参数的构造函数;
2) Bean类应该没有任何公用实例变量(域);
3) 通过get和set方法应该获得一致的值。
4. Bean的基本用法
1) 调用Bean
语法: 通常可以认为等价于小脚本: Runnable thread1 = new MyClass();
以上代码意味着仅当不存在具有相同id和scope的对象时实例化class所指定的类对象,并
将其绑定到由id指定名称的变量
2) 访问Bean的属性 语法: 或者 <%=book1.getTitle()%>
3) 设置Bean的属性
a. 简单情况 语法: 或者<%book1.setTitle("Core Servlets and JavaServer
Page");%>
b. 使用JSP表达式作为value参数 语法:
c. 建立个别属性与输入参数之间的关联
语法: //使用param指定输入参数,此参数值自动用作该属性值,并自动执行简
单的类型转换
d. 建立所有属性与输入参数之间的关联
需要注意:
i : 当输入参数遗失时,不执行任何操作,系统不会提供null作为属性值;
ii: 无法完成值类型为double的属性的类型转换;
iV: 在使用自动类型转换时,需要考虑错误处理页面;
v : 属性名和输入参数必须完全匹配。
5. 共享Bean
1) scope作用域: a. page : 默认值,表明Bean对象除了被绑定到局部变量,还将位于
PageContext对象中; b. application: 表明Bean对象除了被绑定到局部变量,还将位于
ServletContext对象中; c. session : 表明Bean对象除了被绑定到局部变量,还将位于当前请求相关
的HttpSession对象中; d. request : 表明Bean对象除了被绑定到局部变量,还将位于
ServletRequest对象中;
2) 调用Bean的方式: 语句(仅当创建Bean而不是使用现有Bean时才被执行)
处理异常
1. 运行时异常
1) 一个程序运行时重获的错误;
2) 能被一固有的异常对象引用所使用;
3) 可以利用异常引用创建或产生一个JSP页面显示异常信息给用户。
2. 创建一个异常跟踪方案
1) 在每一个JSP页面,包含要创建的异常页面名称; <%@page
import="numberguess.NumberGuessBean" errorPage="error.jsp"%>
2) 创建一个异常页面; <%@page isErrorPage="true"%>
3. JSP页面中的异常处理
1) <%=exception.toString()%> 打印异常名称;
2) <%exception.printStackTrace();%> 打印当前错误流中所有错误的列表;
3) <%=exception.getMessage()%> 打印错误的详细描述信息 更高级的主题
1. JSP中黙认的内在对象名称 类型 注释和范围 request javax.servlet.http.HttpServletRequest
request response javax.servlet.http.HttpServletResponse response pageContext
javax.servlet.jsp.PageContext page session javax.servlet.http.HttpSession session
application javax.servlet.ServletContext ServletContext out javax.servlet.jsp.JspWriter
output stream config javax.servlet.ServletConfig ServletConfig page javax.lang.Object
page Exception java.lang.Throwable page
2. 默认对象之请求(request)封装了来自客户端的请求: 方法:
1) getCookies: 取得Cookie数组;
2) getMethod: 返回请求形成的方式(GET/POST);
3) getParameterNames: 返回form中对象名称的枚举;
4) getParameter:返回指定名称的对象值;
5) getParameterValues: 返回指定名称的对象值数组;
6) setAttribute: 设置属性;
7) getAttribute: 返回属性值;
8) getAttributeNames: 返回属性名称的枚举
3. 默认对象之outJSPWriter的一个实例, 用于发送响应给客户端 方法:
1) print(String)/println(String)
2) print(int)/println(int)
3) flush()
4. 默认对象之exception
1) 用于异常对象的异常实例;
2) 异常页面在page指令中存在属性isErrorPage="true";
3) 方法:getMessage()/printStackTrace()/toString()
5. 默认对象之session
1) HttpSession的一个实例, 用于在一个session中保持状态
2) 方法:getAttribute() setAttribute() removeAttribute() getAttributeNames()
6. 默认对象之application
1) ServletContext一个实例,用于保持application的状态
2) 方法:getAttribute() setAttribute() getInitParameter() getServletInfo()
3) application的作用域比session大得多,一个session和一个client联系, 而application
保持了用于所有客户端的状态
自定义标签库(上)
1. 什么是自定义标签
1) 用户自定义的Java语言元素, 实质是运行一个或者两个接口的JavaBean;
2) 可以非常机密地和JSP的表示逻辑联系在一起,又具有和普通JavaBean相同的业务逻辑处
理能力;
2) 当一个JSP页面转变为servlet时,其间的用户自定义标签转化为操作一个称为标签hander
的对象;
3) 可操作默认对象,处理表单数据,访问数据库以及其它企业服务;
2. 自定义标签库的特点
1) 通过调用页面传递参数实现定制;
2) 访问所有对JSP页面可能的对象;
3) 修改调用页面生成的响应;
4) 自定义标签间可相互通信;
5) 在同一个JSP页面中通过标签嵌套,可实现复杂交互。
3. 如何使用自定义标签库
1) 声明标签库
2) 使标签库执行对Web应用程序可用
4. 声明标签库
1) 使用taglib指令声明标签库
2) 语法:<%@taglib uri="URI" prefix="pre" %> 注意:a. uri属性可以是绝对的,也可以
是相对URL,该URL指向标记库描述符(TLD)文件; b. uri属性也可以是一个并不存在的URL,该URL为
web.xml文件中将标记库描述符(TLD)文件的绝对URL到本地系统的一个映射;
3) 范例:<%@taglib uri="/WEB-INF/template.tld" prefix="test" %> <%@taglib
uri="http://java.sun.com/jstl/core" prefix="core" %>
5. 使标签库执行可用方式一:在WEB-INF/classes目录下部署标记处理程序类; 方式二:将标记处理
程序类打包成jar文件并置于WEB-INF/lib目录。
6. 几种典型的标签(疑问:可以有带主体而没有属性的标签么?)
1) 不带属性和主体的简单标签:;
2) 不带主体但有属性的标签:;
3) 带有主体和属性的标签: ...// 标签体 ; 注意:a. 属性列于start tag中,它是在标记
库描述符(TLD)文件中指定,服务于标记库的自定义行为; b. 标签体位于start tag和end tag间,可
以是任何合法的JSP内容或者标签;
7. 定义标签
1) 开发实现tag的类(tag handler);
2) 编辑标记库描述符(TLD)文件;
3) 在web.xml中为标记库描述符(TLD)文件的绝对URL建立一个映射(该步骤可选);
8. 标记库描述符(TLD)文件
1) 一个描述标记库的XML文件;
2) 内容开始是整个库的描述,然后是tag的描述;
3) 标记库描述符(TLD)文件用于Web Container确认tag以及JSP页面发展工具;
9. 实现tag的类(tag handler)
1) 是一些在引用了标签的JSP页面执行期间被Web Container调用以求自定义标签值的对象;
2) 必须实现Tag, SimpleTag和BodyTag之一;
3) 可以继承TagSupport和BodyTagSupport之一。 10. 标签库的接口和类的继承关系表现形
式一: a. 接口的继承关系: ☉ interface javax.servlet.jsp.tagext.JspTag ☉ interface
javax.servlet.jsp.tagext.SimpleTag ☉ interface javax.servlet.jsp.tagext.Tag ☉ interface
javax.servlet.jsp.tagext.IterationTag ☉ interface javax.servlet.jsp.tagext.BodyTag b. 类
的继承关系: ☉ class javax.servlet.jsp.tagext.TagSupport (implements
javax.servlet.jsp.tagext.IterationTag, java.io.Serializable) ☉ class
javax.servlet.jsp.tagext.BodyTagSupport (implements javax.servlet.jsp.tagext.BodyTag) ☉
class javax.servlet.jsp.tagext.SimpleTagSupport (implements
javax.servlet.jsp.tagext.SimpleTag) 表现形式二: (Interface) JspTag ↑ |ˉˉˉˉˉˉˉˉ|
(Interface) (Interface) Tag SimpleTag ←--SimpleTagSupport ↑ | (Interface)
IterationTag←--TagSupport ↑ ↑ | | (Interface) | BodyTag ←--BodyTagSupport 标签接
口方法一览表 (Interface) JspTag(没有方法) ↑ |ˉˉˉˉˉˉˉˉ| (Interface) (Interface)
Tag SimpleTag ↑ | (int doEndTag()、int doStartTag()、Tag getParent()、void release()、
void setPageContext(PageContext pc)、void setParent(Tag t)) (Interface) IterationTag (int
doAfterBody()) ↑ | (Interface) BodyTag (void doInitBody()、void setBodyContent
(BodyContent b))
自定义标签库(中) 11. 一个Tag处理程序类必须实现的方法标签处理程序类型 方法 Simple
doStartTag, doEndTag, release Attributes doStartTag, doEndTag, set/getAttribute...release
Body,No Itrative and doStartTag, doEndTag, release Evaluation Body, Itrative Evaluation
doStartTag, doAterTag, doEndTag, release Body, Interaction doStartTag, doEndTag, release,
doInitbody, doAfterBody 12. 简单的标签处理程序类
1) 必须实现Tag接口的doStartTag()和doEndTag()方法;
2) 因为不存在Body,doStartTag()方法必须返回SKIP_BODY;
3) 如其余页面要执行,doEndTag()方法返回EVAL_PAGE, 否则返回SKIP_PAGE;
4) 对于每一个标签属性,你必须在标签处理程序类里定义一个特性以及get和set方法以一致
于JavaBeans体系惯例 13. 带Body的自定义标签
1) 必须实现Tag接口的doStartTag()和doEndTag()方法;
2) 可以实现IterationTag接口的doAfterBody()方法;
3) 可以实现BodyTag接口的doInitBody和setBodyContent方法;
4) doStartTag方法可以返回SKIP_BODY、EVAL_BODY_INCLUDE、或者EVAL_BODY_BUFFERED(当
你想使用BodyContent);
5) doEndTag方法可以返回SKIP_PAGE或EVAL_PAGE;
6) doAfterBody方法可以返回EVAL_BODY_AGAIN, SKIP_BODY; 14. 定义脚本变量的标签(迭代
的标签库)
1) 定义脚本标签的二个步骤: a. 在标记库描述符(TLD)文件中列明脚本变量; b. 定义标签
扩展信息类(TEI)并且在TLD文件中包括这个类元素(tei-class);
2) 变量必须在标签处理程序类中使用pageContext.setAttribute()方法设置;
3) 标签扩展信息类(TEI)必须继承TagExtraInfo以及覆盖getVariableInfo()方法;
4) 变量的范围可以是AT_BEGIN, NESTED, AT_END(标签扩展信息类(TEI)的VariableInfo中定
义)之一; 15. 脚本变量的有效性变量 | 有效性 --------------------------------------- NESTED
| 标签中的参数在starttag到endtag之间是有效的 AT_BEGIN | 标签中的参数在标签的开始到JSP页面
结束是有效的 AT_END | 标签中的参数在标签的结束到JSP页面结束是有效的
16. Tag接口的方法interface javax.servlet.jsp.tagext.Tag --------------------------------
---------------------- +EVAL_BODY_INCLUDE:int +EVAL_PAGE:int +SKIP_BODY:int
+SKIP_PAGE:int ------------------------------------------------------ +release():void
+getParent():javax.servlet.jsp.tagext.Tag +setParent(javax.servlet.jsp.tagext.Tag):void
+doEndTag():int +doStartTag():int +setPageContext(javax.servlet.jsp.PageContext):void 17.
Tag的生命周期
1) setPageContext(javax.servlet.jsp.PageContext):void
2) setParent(javax.servlet.jsp.tagext.Tag):void
3) //setAttribute:void
4) doStartTag():int
5) doEndTag():int
6) release():void 18. BodyTag和Tag接口的关系interface
javax.servlet.jsp.tagext.BodyTag --> interface javax.servlet.jsp.tagext.Tag ------------
------------------------------ +EVAL_BODY_AGAIN:int ------------------------------------
------ +doInitBody():void +setBodyContent(javax.servlet.jsp.tagext.BodyContext):void
+doAfterBody():int 19. BodyTag的处理过程
1) setPageContext(javax.servlet.jsp.PageContext):void
2) setParent(javax.servlet.jsp.tagext.Tag):void
3) //setParent()
4) doStartTag():int
5) setBodyContent(javax.servlet.jsp.tagext.BodyContent):void
6) doInitBody():void
7) doAfterBody():int
8) doEndTag():int
9) release():void 20. SimpleTag接口的方法javax.servlet.jsp.tagext.SimpleTag ----
-------------------------------------- +doTag():void +getParent():JspTag +setJspBody
(JspFragment jspBody):void +setJspContext(JspContext pc):void +setParent(JspTag
parent):void 21. SimpleTage接口的生命周期
1) new: 每次遇到标签,容器构造一个SimpleTag的实例,这个构造方法没有参数。和红典的
标签一样,SimpleTag不能缓冲,故不能重用,每次都需要构造新的实例。
2) setJspContext()、setParent(): 只有这个标签在另一个标签之内时,才调用setParent
()方法;
3) 设置属性:调用每个属性的setter方法;
4) setJspBody();
5) doTag(): 所有标签的逻辑、迭代和Body计算,都在这个方法中;
6) return
1. 概况
1) 以文本为基础能够返回动态内容到客户端;
2) Http是请求和响应的默认协议;
3) 一个页面可以混和html代码、Java代码以及JSP标签;
4) 允许访问组件;
2. JSP的好处
1) 通过组件使用支持组件模型和软件重用;
2) 源文件改变自动编译;
3) 用户自定义标签简化页面开发;
4) 能把Web内容, Java代码分开(针对Servlet而言);
5) 平台无关;
6) 性能和可扩展;
7) 可靠;
8) 作为J2EE的一部分(Servlet、JSP以及EJB是J2EE的三大组件)。 创建、配置以及执行JSP
1. JSP环境
1) 开发环境 a. 浏览器:IE/Netscape b. 开发工具:记事本、SunOne Studio、JBuilder、
WSAD
2) 配置和执行环境 a. Tomcat b. Weblogic c. Websphere d. SunONE Application Server
2. 第一个JSP页面
1) 脚本小程序(Scriptlet): 对应于Servlet中service方法中内容 <%...%>或
2) 指令(Directives) a. page <%@page import="java.util.*"%>或 b. include <%
@include file="footer.jsp"%>或
3) 声明(Declarations) <%!String str="This is a string!";%>或str="This is a
string!"
4) 表达式(Expressions) <%=str%>或str
脚本元素
1. 在JSP页面通过以下脚本元素可用以插入Java代码
1) 声明(Declarations):<%! %>或
2) 脚本小程序(Scriptlet):<%...%>或
3) 表达式(Expressions):<%=%>或
4) 指令(Directives):<%@%>或
2. 声明(Declarations)
1) 允许定义将插入到Servlet类的主体中(由service调用, 与Service()方法平级)的一些方
法或域;
2) 语法: <%! Java代码 %> 或
3) 示例: a. 变量定义: <%! int i=0;%> b. 方法定义: <%! public String f(int i)
{if(i<3) return("...");...}%>
4) 声明规则: a. JSP中声明的变量和方法对应于Servlet中的实例方法和实例变量。这些将
被同时请求该页面的所有用户所共享; b. 在使用变量或方法前须先定义(不是说声明变量的位置在页
面中要处于使用变量的前面,而是指变量不声明不能使用); c. 声明的变量或方法的作用域为当前页
面或包含的页面; d. 语句间以分号分隔。
3. 脚本小程序(Scriptlet)
1) Java代码片断,能执行比标记语言更强的功能
2) 语法: <%...%>或
3) 脚本小程序规则: a. 你使用的脚本语言决定了脚本小程序的规则; b. 语句间以分号分
隔; c. 可以使用默认的对象、import进的类、declaration声明的方法和对象以及useBean tag中声明
的对象。
4. 表达式(Expression) 答:
1) 用来将值直接插入到输出中
2) 语法: <%=%>或
3) 表达式规则: a. 你使用的脚本语言决定了脚本小程序的规则; b. 执行的顺序为从左到
右; c. 分号不能用于表达式。
5. 指令(Directive)
1) Page: 定义页面的全局属性 语法:<%@page ...%>或
2) Include: 插入一个静态页面内容 语法:<%@include file="header.jsp"%>或
6. 操作(Actions)
1) forward操作:将请求指向一个特定的页面(类似于Servlet中的RequestDispatcher); 语
法:
2) include操作:在页面插入动态的内容 语法:
3) plugin操作:在输出页面嵌入一个对象 语法: ...
7. 注释JSP中有二种类型的注释:
1) 服务器端注释:不会送回客户端 <%--this is a comment--%>
2) 客户端注释:发送回客户端
8. JSP处理过程:JSP源文件处理分成二个阶段:
1) JSP页面转换阶段:页面被编译成一个Java类,所有的HTML标记和JSP标记都被转换创建一
个Servlet。这时,脚本和表达式还没有被执行;
2) 请求处理阶段:发生在服务器将一个客户端请求指向JSP页面。一个请求对象创建、解析
以及提交给编译好的JSP对应的servlet。当这个servlet处理请求的时候它执行先前在JSP中定义的处
理脚本小程序和表达式。
9. 使用脚本代码的缺点和指导方针
1) 缺点: a. 过度使用脚本代码使用JSP页面混乱和难以维护; b. 脚本代码降低JSP二个主
要的优点:软件重用和代码分开
2) 指导方针: 只在组件功能无能为力或需要有限的脚本时使用。
使用可重用组件
1. JavaBeans
1) JavaBeans是一个轻便的、平台无关的、用Java写的组件模型,用以创建可重用的组件;
2) Beans能被组件创建健壮、跨平台的应用程序和小应用程序。
2. JSP和组件
1) 在需要的时候,JSP可以访问JavaBean和EJB;
2) JSP使用action标记来使用、修改以及创建服务器端对象(例如Beans);
3. JavaBean与一般Java类的区别
1) Bean类必须具有不带参数的构造函数;
2) Bean类应该没有任何公用实例变量(域);
3) 通过get和set方法应该获得一致的值。
4. Bean的基本用法
1) 调用Bean
语法: 通常可以认为等价于小脚本: Runnable thread1 = new MyClass();
以上代码意味着仅当不存在具有相同id和scope的对象时实例化class所指定的类对象,并
将其绑定到由id指定名称的变量
2) 访问Bean的属性 语法: 或者 <%=book1.getTitle()%>
3) 设置Bean的属性
a. 简单情况 语法: 或者<%book1.setTitle("Core Servlets and JavaServer
Page");%>
b. 使用JSP表达式作为value参数 语法:
c. 建立个别属性与输入参数之间的关联
语法: //使用param指定输入参数,此参数值自动用作该属性值,并自动执行简
单的类型转换
d. 建立所有属性与输入参数之间的关联
需要注意:
i : 当输入参数遗失时,不执行任何操作,系统不会提供null作为属性值;
ii: 无法完成值类型为double的属性的类型转换;
iV: 在使用自动类型转换时,需要考虑错误处理页面;
v : 属性名和输入参数必须完全匹配。
5. 共享Bean
1) scope作用域: a. page : 默认值,表明Bean对象除了被绑定到局部变量,还将位于
PageContext对象中; b. application: 表明Bean对象除了被绑定到局部变量,还将位于
ServletContext对象中; c. session : 表明Bean对象除了被绑定到局部变量,还将位于当前请求相关
的HttpSession对象中; d. request : 表明Bean对象除了被绑定到局部变量,还将位于
ServletRequest对象中;
2) 调用Bean的方式: 语句(仅当创建Bean而不是使用现有Bean时才被执行)
处理异常
1. 运行时异常
1) 一个程序运行时重获的错误;
2) 能被一固有的异常对象引用所使用;
3) 可以利用异常引用创建或产生一个JSP页面显示异常信息给用户。
2. 创建一个异常跟踪方案
1) 在每一个JSP页面,包含要创建的异常页面名称; <%@page
import="numberguess.NumberGuessBean" errorPage="error.jsp"%>
2) 创建一个异常页面; <%@page isErrorPage="true"%>
3. JSP页面中的异常处理
1) <%=exception.toString()%> 打印异常名称;
2) <%exception.printStackTrace();%> 打印当前错误流中所有错误的列表;
3) <%=exception.getMessage()%> 打印错误的详细描述信息 更高级的主题
1. JSP中黙认的内在对象名称 类型 注释和范围 request javax.servlet.http.HttpServletRequest
request response javax.servlet.http.HttpServletResponse response pageContext
javax.servlet.jsp.PageContext page session javax.servlet.http.HttpSession session
application javax.servlet.ServletContext ServletContext out javax.servlet.jsp.JspWriter
output stream config javax.servlet.ServletConfig ServletConfig page javax.lang.Object
page Exception java.lang.Throwable page
2. 默认对象之请求(request)封装了来自客户端的请求: 方法:
1) getCookies: 取得Cookie数组;
2) getMethod: 返回请求形成的方式(GET/POST);
3) getParameterNames: 返回form中对象名称的枚举;
4) getParameter:返回指定名称的对象值;
5) getParameterValues: 返回指定名称的对象值数组;
6) setAttribute: 设置属性;
7) getAttribute: 返回属性值;
8) getAttributeNames: 返回属性名称的枚举
3. 默认对象之outJSPWriter的一个实例, 用于发送响应给客户端 方法:
1) print(String)/println(String)
2) print(int)/println(int)
3) flush()
4. 默认对象之exception
1) 用于异常对象的异常实例;
2) 异常页面在page指令中存在属性isErrorPage="true";
3) 方法:getMessage()/printStackTrace()/toString()
5. 默认对象之session
1) HttpSession的一个实例, 用于在一个session中保持状态
2) 方法:getAttribute() setAttribute() removeAttribute() getAttributeNames()
6. 默认对象之application
1) ServletContext一个实例,用于保持application的状态
2) 方法:getAttribute() setAttribute() getInitParameter() getServletInfo()
3) application的作用域比session大得多,一个session和一个client联系, 而application
保持了用于所有客户端的状态
自定义标签库(上)
1. 什么是自定义标签
1) 用户自定义的Java语言元素, 实质是运行一个或者两个接口的JavaBean;
2) 可以非常机密地和JSP的表示逻辑联系在一起,又具有和普通JavaBean相同的业务逻辑处
理能力;
2) 当一个JSP页面转变为servlet时,其间的用户自定义标签转化为操作一个称为标签hander
的对象;
3) 可操作默认对象,处理表单数据,访问数据库以及其它企业服务;
2. 自定义标签库的特点
1) 通过调用页面传递参数实现定制;
2) 访问所有对JSP页面可能的对象;
3) 修改调用页面生成的响应;
4) 自定义标签间可相互通信;
5) 在同一个JSP页面中通过标签嵌套,可实现复杂交互。
3. 如何使用自定义标签库
1) 声明标签库
2) 使标签库执行对Web应用程序可用
4. 声明标签库
1) 使用taglib指令声明标签库
2) 语法:<%@taglib uri="URI" prefix="pre" %> 注意:a. uri属性可以是绝对的,也可以
是相对URL,该URL指向标记库描述符(TLD)文件; b. uri属性也可以是一个并不存在的URL,该URL为
web.xml文件中将标记库描述符(TLD)文件的绝对URL到本地系统的一个映射;
3) 范例:<%@taglib uri="/WEB-INF/template.tld" prefix="test" %> <%@taglib
uri="http://java.sun.com/jstl/core" prefix="core" %>
5. 使标签库执行可用方式一:在WEB-INF/classes目录下部署标记处理程序类; 方式二:将标记处理
程序类打包成jar文件并置于WEB-INF/lib目录。
6. 几种典型的标签(疑问:可以有带主体而没有属性的标签么?)
1) 不带属性和主体的简单标签:;
2) 不带主体但有属性的标签:;
3) 带有主体和属性的标签: ...// 标签体 ; 注意:a. 属性列于start tag中,它是在标记
库描述符(TLD)文件中指定,服务于标记库的自定义行为; b. 标签体位于start tag和end tag间,可
以是任何合法的JSP内容或者标签;
7. 定义标签
1) 开发实现tag的类(tag handler);
2) 编辑标记库描述符(TLD)文件;
3) 在web.xml中为标记库描述符(TLD)文件的绝对URL建立一个映射(该步骤可选);
8. 标记库描述符(TLD)文件
1) 一个描述标记库的XML文件;
2) 内容开始是整个库的描述,然后是tag的描述;
3) 标记库描述符(TLD)文件用于Web Container确认tag以及JSP页面发展工具;
9. 实现tag的类(tag handler)
1) 是一些在引用了标签的JSP页面执行期间被Web Container调用以求自定义标签值的对象;
2) 必须实现Tag, SimpleTag和BodyTag之一;
3) 可以继承TagSupport和BodyTagSupport之一。 10. 标签库的接口和类的继承关系表现形
式一: a. 接口的继承关系: ☉ interface javax.servlet.jsp.tagext.JspTag ☉ interface
javax.servlet.jsp.tagext.SimpleTag ☉ interface javax.servlet.jsp.tagext.Tag ☉ interface
javax.servlet.jsp.tagext.IterationTag ☉ interface javax.servlet.jsp.tagext.BodyTag b. 类
的继承关系: ☉ class javax.servlet.jsp.tagext.TagSupport (implements
javax.servlet.jsp.tagext.IterationTag, java.io.Serializable) ☉ class
javax.servlet.jsp.tagext.BodyTagSupport (implements javax.servlet.jsp.tagext.BodyTag) ☉
class javax.servlet.jsp.tagext.SimpleTagSupport (implements
javax.servlet.jsp.tagext.SimpleTag) 表现形式二: (Interface) JspTag ↑ |ˉˉˉˉˉˉˉˉ|
(Interface) (Interface) Tag SimpleTag ←--SimpleTagSupport ↑ | (Interface)
IterationTag←--TagSupport ↑ ↑ | | (Interface) | BodyTag ←--BodyTagSupport 标签接
口方法一览表 (Interface) JspTag(没有方法) ↑ |ˉˉˉˉˉˉˉˉ| (Interface) (Interface)
Tag SimpleTag ↑ | (int doEndTag()、int doStartTag()、Tag getParent()、void release()、
void setPageContext(PageContext pc)、void setParent(Tag t)) (Interface) IterationTag (int
doAfterBody()) ↑ | (Interface) BodyTag (void doInitBody()、void setBodyContent
(BodyContent b))
自定义标签库(中) 11. 一个Tag处理程序类必须实现的方法标签处理程序类型 方法 Simple
doStartTag, doEndTag, release Attributes doStartTag, doEndTag, set/getAttribute...release
Body,No Itrative and doStartTag, doEndTag, release Evaluation Body, Itrative Evaluation
doStartTag, doAterTag, doEndTag, release Body, Interaction doStartTag, doEndTag, release,
doInitbody, doAfterBody 12. 简单的标签处理程序类
1) 必须实现Tag接口的doStartTag()和doEndTag()方法;
2) 因为不存在Body,doStartTag()方法必须返回SKIP_BODY;
3) 如其余页面要执行,doEndTag()方法返回EVAL_PAGE, 否则返回SKIP_PAGE;
4) 对于每一个标签属性,你必须在标签处理程序类里定义一个特性以及get和set方法以一致
于JavaBeans体系惯例 13. 带Body的自定义标签
1) 必须实现Tag接口的doStartTag()和doEndTag()方法;
2) 可以实现IterationTag接口的doAfterBody()方法;
3) 可以实现BodyTag接口的doInitBody和setBodyContent方法;
4) doStartTag方法可以返回SKIP_BODY、EVAL_BODY_INCLUDE、或者EVAL_BODY_BUFFERED(当
你想使用BodyContent);
5) doEndTag方法可以返回SKIP_PAGE或EVAL_PAGE;
6) doAfterBody方法可以返回EVAL_BODY_AGAIN, SKIP_BODY; 14. 定义脚本变量的标签(迭代
的标签库)
1) 定义脚本标签的二个步骤: a. 在标记库描述符(TLD)文件中列明脚本变量; b. 定义标签
扩展信息类(TEI)并且在TLD文件中包括这个类元素(tei-class);
2) 变量必须在标签处理程序类中使用pageContext.setAttribute()方法设置;
3) 标签扩展信息类(TEI)必须继承TagExtraInfo以及覆盖getVariableInfo()方法;
4) 变量的范围可以是AT_BEGIN, NESTED, AT_END(标签扩展信息类(TEI)的VariableInfo中定
义)之一; 15. 脚本变量的有效性变量 | 有效性 --------------------------------------- NESTED
| 标签中的参数在starttag到endtag之间是有效的 AT_BEGIN | 标签中的参数在标签的开始到JSP页面
结束是有效的 AT_END | 标签中的参数在标签的结束到JSP页面结束是有效的
16. Tag接口的方法interface javax.servlet.jsp.tagext.Tag --------------------------------
---------------------- +EVAL_BODY_INCLUDE:int +EVAL_PAGE:int +SKIP_BODY:int
+SKIP_PAGE:int ------------------------------------------------------ +release():void
+getParent():javax.servlet.jsp.tagext.Tag +setParent(javax.servlet.jsp.tagext.Tag):void
+doEndTag():int +doStartTag():int +setPageContext(javax.servlet.jsp.PageContext):void 17.
Tag的生命周期
1) setPageContext(javax.servlet.jsp.PageContext):void
2) setParent(javax.servlet.jsp.tagext.Tag):void
3) //setAttribute:void
4) doStartTag():int
5) doEndTag():int
6) release():void 18. BodyTag和Tag接口的关系interface
javax.servlet.jsp.tagext.BodyTag --> interface javax.servlet.jsp.tagext.Tag ------------
------------------------------ +EVAL_BODY_AGAIN:int ------------------------------------
------ +doInitBody():void +setBodyContent(javax.servlet.jsp.tagext.BodyContext):void
+doAfterBody():int 19. BodyTag的处理过程
1) setPageContext(javax.servlet.jsp.PageContext):void
2) setParent(javax.servlet.jsp.tagext.Tag):void
3) //setParent()
4) doStartTag():int
5) setBodyContent(javax.servlet.jsp.tagext.BodyContent):void
6) doInitBody():void
7) doAfterBody():int
8) doEndTag():int
9) release():void 20. SimpleTag接口的方法javax.servlet.jsp.tagext.SimpleTag ----
-------------------------------------- +doTag():void +getParent():JspTag +setJspBody
(JspFragment jspBody):void +setJspContext(JspContext pc):void +setParent(JspTag
parent):void 21. SimpleTage接口的生命周期
1) new: 每次遇到标签,容器构造一个SimpleTag的实例,这个构造方法没有参数。和红典的
标签一样,SimpleTag不能缓冲,故不能重用,每次都需要构造新的实例。
2) setJspContext()、setParent(): 只有这个标签在另一个标签之内时,才调用setParent
()方法;
3) 设置属性:调用每个属性的setter方法;
4) setJspBody();
5) doTag(): 所有标签的逻辑、迭代和Body计算,都在这个方法中;
6) return
发表评论
-
JS前端DES加密参数
2016-07-08 14:27 11719DES加密为可解密的机制,这里使用DES进行加密方便后台解密还 ... -
包含日期和时间的选择器(转)
2012-09-27 16:11 1090转载自: http://www.cnblogs.com/swe ... -
jsp通用分页实现脚本
2012-09-26 17:12 1700工具脚本使用时只需替换url的问号前半部分即可。 此页面需要j ... -
Web项目设置页面不缓存
2012-08-04 19:55 2867htm网页 <meta http-equiv=&qu ... -
使用Filter实现访问监控
2012-07-15 21:40 1511实现Servlet的接口过滤器接口Filter实现对用户访问页 ... -
Properties配置文件读取工具类
2012-05-17 15:33 2618配置文件必须放在src目录下。 import java.i ... -
浏览器对js支持的差异
2011-11-16 17:31 966document.all firefox不支持,IE支持 -
网页iframe标签使用
2011-11-04 10:50 1419iframe使用很简单,使用src属性指向另一个你需要包含的另 ... -
js去除前后空格方法
2011-10-26 14:34 1181js去除前后空格方法 //去除前后空格方法 String ... -
js获取下拉列表选中项的值和文本(select)以及获取单选按钮(radio)组的值和修改选中项[转]
2011-10-25 15:59 1267一、获取下拉列表选中 ... -
jsp之jstl标签(c) (转)
2011-09-23 13:37 1797一.核心标签库 它是JSTL中的核心库,为日常任务提供 ... -
java web项目自定义配置文件路径
2011-01-25 17:30 10856在java web项目中添加配置文件,满足数据库配置参数以及其 ... -
jsp笔记
2010-03-31 00:44 1510day1 JSP 定义: 1)Jav ... -
JSP课件
2010-03-31 00:32 1332JSP出现的原因 Servlet的缺陷:1、写静态页面必须部署 ...
相关推荐
内容概要:本文提供了详细的MongoDB分片集群的搭建指导,涵盖了从环境准备、配置文件编写、副本集的建立、主节点的选择、配置服务器和数据分片服务器的配置到最后的路由节点的搭建与操作整个流程,以及对数据库的哈希与范围两种分片策略的应用介绍和具体命令执行。 适合人群:熟悉NoSQL数据库概念并对MongoDB有一定了解的技术人员,尤其是在大型数据管理和分布式数据库架构设计中有需求的开发者。 使用场景及目标:帮助技术人员掌握构建高效能、高可用性的MongoDB分片集群的方法,适用于处理大规模、实时性强的数据存储与读取场景。 其他说明:文中通过实例演示了每个步骤的具体操作方法,便于跟随文档实操,同时也介绍了可能遇到的问题及其解决方案,如在没有正确配置的情况下试图写入数据时出现错误等情况的处理。
CPPC++_嵌入式硬件的物联网解决方案blinker库与Arduino ESP8266 ESP32一起工作
CPPC++_逆向调用QQ Mojo IPC与WeChat XPlugin
CPPC++_现代活动指标
CPPC++_Xournal是一款手写笔记软件,支持PDF注释,使用C语言编写,支持GTK3,支持Linux,如Ubu
资源概述: 本资源提供了一套完整的学生实习管理系统解决方案,涵盖了前台小程序页面与后台管理系统两大模块。前台小程序页面设计简洁直观,用户可根据不同身份(学生或企业)进行登录。学生用户能够方便地浏览并投递感兴趣的实习岗位,而企业用户则能轻松发布实习信息,吸引优秀人才。后台管理系统功能全面,包括个人中心、首页、学生管理、教师管理、企业管理、招聘管理、评分管理以及实习管理等多个方面,为管理员提供了强大的数据管理和操作工具。 技术栈亮点: SSM框架:系统后台采用Spring、Spring MVC和MyBatis Plus(简称SSM)作为核心开发框架,确保了系统的稳定性、可扩展性和可维护性。Spring作为控制反转(IoC)和面向切面编程(AOP)的容器,为系统提供了强大的业务逻辑处理能力;Spring MVC则负责处理Web请求和响应,实现了前后端的分离;MyBatis Plus作为持久层框架,简化了数据库操作,提高了开发效率。 MySQL数据库:系统采用MySQL作为数据库存储解决方案,支持大数据量的存储和高效查询。 如有侵权请联系我删除,谢谢
微服务闪聚支付项目
博客链接 https://blog.csdn.net/weixin_47560078/article/details/143714557 文章从原理介绍出发,实现了 Rust 与 Java 的互调。利用 JNI 技术,可以充分发挥 Rust 的性能优势,同时保持 Java 的跨平台特性。这种技术组合适用于对性能要求较高的应用场景,如图像处理、数据分析和系统级编程等。
cppc++
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
分布式事务lcn
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
cppc++
安卓手机与电脑的socket通信源码
Anaconda:JupyterNotebook使用教程.docx
Amazon S3:S3静态网站托管教程.docx
Python商品销售数据分析可视化项目源码(期末大作业).zip,个人经导师指导并认可通过的98分大作业设计项目。主要针对计算机相关专业的正在做期末大作业设计的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业,代码资料完整下载可用。 Python商品销售数据分析可视化项目源码(期末大作业).zip,个人经导师指导并认可通过的98分大作业设计项目。主要针对计算机相关专业的正在做期末大作业设计的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业,代码资料完整下载可用。Python商品销售数据分析可视化项目源码(期末大作业).zip,个人经导师指导并认可通过的98分大作业设计项目。主要针对计算机相关专业的正在做期末大作业设计的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业,代码资料完整下载可用。Python商品销售数据分析可视化项目源码(期末大作业).zip,个人经导师指导并认可通过的98分大作业设计项目。主要针对计算机相关专业的正在做期末大作业设计的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业,代码资料完整下载可用。Python商品销售数据分析
CPPC++_wechathookWeChatApi微信Api微信hook微信接口python微信接口java微信Ap