- 浏览: 664587 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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出现的原因
Servlet的缺陷:1、写静态页面必须部署后才能看到效果,很难控制页面的外观。
2、 从技术角度来说Servlet是Java代码和HTML静态代码的混合代码。
3、从市场竞争角度来说,微软推出了ASP产品。
JSP的改进 :1、JSP是标签式的文本文件(区Servlet是Java文件)
2、JSP不需要编译(实际上是由服务器自动监测JSP文件的变化,由服务器将其翻译成Java代码后然后再进行编译并在第一次请求时创建一个Servlet实例。正因为如此,第一次访问JSP页面时会后延迟)
3、JSP不用写配置文件
4、JSP以静态代码为主,Java代码为辅。Servlet反之。
JSP从本质上来说内核还是Servlet,但与Servlet不是替代关系而是一种互补的关系。JSP适合于写显示层的动态页面,而Servlet则适合写控制层的业务控制(页面转发)。
JSP往纯标签方向发展,Servlet往纯代码方向发展,他们以Servlet内核(请求响应式的工作方式)往两个方向发展。
*********************************************************************
JSP简介:
JSP分为静态页面代码和动态代码(动态生成静态内容的部分)。
JSP在部署应用时该讲JSP页面放在对应应用的跟目录下
JSP被容器自动翻译成Java源文件其保存路径为:
Tomcat/work/Catalina/localhost/应用目录
JSP编程原则:少写代码多写标签(简化页面开发)。
*********************************************************************
JSP的优点:
1、静态内容和表示逻辑相分离。
2、减化了开发过程
3、支持软件重用
4、自动翻译和编译
5、扩展性强
6、平台无关的
7、是J2EE蓝图的一部分
*********************************************************************
JSP语法元素分为三大块:指令、动作和代码
指令
用于从JSP发送一个信息到容器上。他用来设置全局变量,声明类,要实现的方法和输出内容等。指令在JSP整个文件内有效。它为翻译阶段提供了全局信息。
格式<%@………%>
代码(脚本)
动作又分为4块:声明、表达式、代码块和注释
1、声明:<%!…….%>
用来定义在产生的类文件中的类的属性和方法。不能声明类。
由于servlet是工作在多线程环境下,所以尽量不要在servlet方法体外声明成员变量。
2、表达式:<%=……..%>
在JSP请求处理阶段计算他的值,表达式生成的代码是Service方法中的一个代码片断。
JSP对于声明的处理:1、计算表达式的值
2、将值转换成String
3、用out.println发送标签
3、代码段:<%………%>
是一段可以在处理请求时间执行的Java代码。可以产生输出,也可以是一些流程控制语句。在代码段中定义的变量为service方法中的局部变量。
4、注释:
显示注释:<!――……..――>
隐式注释:<%――……――%>
*********************************************************************
组件:对底层API有用的类进行封装,简化开发者开发的难度。
封装了若干对象的结构,完成一个相对独立的功能
为了重用封装成一个黑盒,对用户是透明的
*********************************************************************
在JSP中为什么引入JavaBean?
将底层的API的类封装在组件中,增强页面(JSP)的可读性,增强了代码的复用性。
Bean主要负责计算,JSP则负责显示结果。
<jsp:useBean id = "BeanName" class = "className" sope="范围域">
该标签表示创建或使用一个对象。
例:
<jsp:useBean id="user" class="com.tarena.User" scope="session" />
<%--
1)创建或查找session范围内的一个类型为com.tarena.User的JavaBean对象。
首先调用session.getAttribute(id的值);
判断返回值是否为null,如果为null,创建一个类型为com.tarena.User的JavaBean对象
并将该对象以id的值为KEY保存到session的属性中(sesssion.setAttribute(id的值,JavaBean对象))
2)声明的一个脚本语言中的临时变量,名字为id的值,值为JavaBean对象。
--%>
BeanName:bean的引用变量名同时还是Session中的key(该属性名是我们自定义的)
className:类的全名
范围域:page|request|session|application,就是指定创建好的JavaBean对象放在那个范围对象中。
page:当前页面有效
request:同一次请求中有效
session:在于对应用户的会话中有效
application:服务器开启时创建,服务器关闭时销毁。
<jsp:setProperty name="name" property="propertyName" param="paramName"/>
name="name:javaBean标识名
property="propertyName:javaBean属性名
param="paramName":要传的参数名
通过标签来调用对象的方法。
Jsp内部会根据propertyName前加上set查找并调用到对应的set方法。
注意:要使用该标签,对应的类必须符合JavaBean规范。
<jsp:getProperty name="name" property="propertyName" />
name="name:javaBean标识名
property="propertyName:javaBean属性名
注:该标签完全可以用更简练的表达式来取代。<%=name.getpropertyName()%>
*********************************************************************
JavaBean的定义:
1、是一个普通的Java类
2、在结构上没有预先的规定,不需要容器,不需要继承类或实现接口
3、要求必须放在包中,要求实现Serializable接口
4、要求有一个无参的构造方法.
5、属性的类型必须保持唯一,返回值必须和set方法参数类型一致
6、对每个属性要有对应的get和set方法。注:隐藏属性可以没有
7、可以有外观作为显示控制,事件机制。
*********************************************************************
在JSP中新建一个Bean或引用一个Bean实例的过程:
先去指定的范围找session中的key对应的属性(对象),如果session中没有则new一个JavaBean,并将该对象作为session中的key保存,通过<JSP:setProperty…../>来初始化新建的Bean。
注:<JSP:setProperty…../>该标签只有在new一个JavaBean时才会生效,如果session中有对应对象则忽略该标签。
<JSP:setProperty name="beanName" Property="propertyName" value="String constant"/>
*********************************************************************
常用的指令标签
1、指定包名:
<%@ page import="Java.util.Collection"%> //注:包名后不用;号
2、指定一个Http会话中这个页面是否参与
<%@page session = "true|false"%> //注:默认为ture
3、定义该页面出现异常时调用的页面
<%@page errorPage="error.jsp"%>
4、指定页面是否为异常处理页面
<%@page isErrorPage="true|false"%>
5、定义JSP中输出流的编码和页面响应的MIME类型
<%@page contentType="test/html; charset=GBK"%>
MIME:多用途互联网邮件扩展协议。
6、指定JSP页面的编码
<%@page pageEncoding="GBK"%>
7、标签库指令
<%@tablelib%>
*********************************************************************
常用的动作标签
1、<jsp:param>
以健值对的形式传递一个或多个参数给动态页面,一般结合<JSP:include>、<jsp:forward>、<JSP:plugin>标签一起使用。
<jsp:Param name="paramName" value="paramValue"/>
2、<jsp:include>
用于在当前JSP页面里动态的包含一个静态或动态页面资源,做到页面代码的复用。在运行上效率比<%@page include%>指令低,但可以动态增加内容。
<jsp:include page="fileName" flush="true|false"/>
flush="true|false"表示在包含另一个页面之前是否要自动刷新。
3、<jsp:forward>
用于将请求转发到另一个JSP、servlet或静态资源文件。
<jsp:forward page="url"/>
4、<jsp:setProperty>
该操作和useBean一起协作,用来设置Bean的简单属性和索引属性(注:要求request中参数名与Bean中的对应属性同名)
(1)<jsp:setProperty name="beanName" property="*"/>
设置Bean属性的快捷方式,Jsp内在机制会将request中的参数与Bean对应的属性通过set方法赋值。
(2)<jsp:setProperty name="beanName" property="propertyName"/>
使用request中的一个参数来指定Bean中的一个属性值
(3)<jsp:setProperty name="beanName" property="propertyName" param="proName"/>
在Bean属性的名字和request中参数名字不同时使用该方法,param指定的是request中的参数名,property对应bean中的属性名。
注:在(1)(2)(3)中如果request对象的参数值中有空值那么对应的Bean属性将不会设定任何值。
(4)<jsp:setProperty name="beanName" property="propertyName" value="proValue"/>
value是一个可选属性,使用指定的值来设定Bean的属性。
注:不能在一个<jsp:setProperty>中同时使用param和value,两者都是设定Bean属性的值,不是方式不同而已。
(5)<jsp:getProperty>
用来访问一个Bean的属性,其对应的值将转成化为一个String,然后发送到输出流中,如果属性是一个对象,将调用toString()方法。
<jsp:getProperty name="userSession" property="name"/>
userSession:Bean名字(Id)
name:属性名
(6)<jsp:useBean>
用来在Jsp页面中创建一个Bean实例,并指定他的名字以及作用范围。
<jsp:useBean id="bean" scop="page|…." TypeSpel/>
a、id:用来指定实例对象的变量名
b、scope="page|request|session|application"
用来指定Bean存在的范围以及ID变量名的有效范围
注:在创建Bean的Jsp文件中<%@page%>指令中必须指定Session=true,否则可能会导致致命的错位发生。
c、typespec可以是一下四者之一
class="className"
class="className" type="typeName"
beanName="beanName" type="typeName"
type="typeName"
注:class="className"表示bean的类路径和类名,这个class不能是抽象的,必须一个公用无参的构造器。
type="typeName" type可以是一个类本身(class),也可以是一个类的父类,或者是一个类的接口。如果没有使用class或BeanName指定type,Bean将不会被实例化。
*********************************************************************
中文乱码问题:
1、页面中
2、传参过程中
3、数据库中
*********************************************************************
JSP中的内置对象:
application、session、request、page、response、out、Config、exception
名称 类型 注释和范围
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.servlet.jsp. HttpJspPage page
Exception java.lang.Throwable page
*********************************************************************
JSP中的自定义标签:
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) 不带属性和主体的简单标签:<mytaglibs:SomeTag/>;
2) 不带主体但有属性的标签:<mytaglibs:SomeTag user="TonyDeng"/>;
3) 带有主体和属性的标签:<mytaglibs:SomeTag user="TonyDeng">
...// 标签体
</mytaglibs:SomeTag>;
注意: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
自定义标签库(中)
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中定义)之一;
3)1.2的标签在内存中是可复用的。
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
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
*********************************************************************
EL
"."表示对javaBean属性的访问。
EL中的隐含对象:param
${empty student}判断对象是否为空
这里需要注意的是如果student是一个集合,如果集合中没有元素的话,EL依然视他为空。
EL是一种弱类型的语言
<c:forEach begin="1" end="6" step="1" var="i">
<h${i} align="center">${100 * i}</h${i}>
</c:forEach>
在EL内置对象PageContext、pageScope、requestScope、sessionScope、ApplicationScope、
Param、cookie、
*********************************************************************
JSTL
标准标签库
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
关于刷新导致重复提交的问题:浏览器刷新的含义是重新执行最近的一个请求。
Expand - Collapse * Jsp(Java Server Page) o 附加知识
+ Web Server Apache、IIS
# 这些Server无法产生动态内容
需要通过WEB辅助应用如CGI、Servlet
o 解释Jsp 文件原理
+ 通过request 第一次请求jsp文件 将翻译成java 文件
.然后编译成java,然后通过生成一个Servlet对象 如果下次访问将成绶存里拿
除非源jsp源文件有变化。
o 变量定义及使用
+ 局部定义是按html文件的顺序,定义必需在使用前
+ 成员变量定义任意
o 方法定义及使用
+ 不能定义在脚本里
o Jsp指令
+ page
# import
* 类java导包
# Session
* 默认为true
跟request.getSession(true)一样
* 使用<% page sesion=false%>
跟request.getSession(false)一样
# errorPage
* 处理异常
# 设置指令 <%@ page errorPage="error.jsp" %>
+ include
# 将目标包含进来
如果页面的框架
* <%@ include =""%>
# 在翻译时包含
+ taglib
o Jsp 动作(Action)
+ forward
# 等价于request.dispatcher.forward();
# <jsp:forward page="footer.jsp">
<jsp:param value="admin" name="name"/>
</jsp:forward>
等价于servlet
request.dispatcher.forward("").forward(req,resp);
里面的 <jsp:param value="admin" name="name"/>等价于 request.getParameter("name").
+ include
# 示:<jsp:include page="footer.jsp"></jsp:include>
# 可传参与include 指令不同
include 动作运行时触发
o 隐含对象
+ request
+ response
Servlet的缺陷:1、写静态页面必须部署后才能看到效果,很难控制页面的外观。
2、 从技术角度来说Servlet是Java代码和HTML静态代码的混合代码。
3、从市场竞争角度来说,微软推出了ASP产品。
JSP的改进 :1、JSP是标签式的文本文件(区Servlet是Java文件)
2、JSP不需要编译(实际上是由服务器自动监测JSP文件的变化,由服务器将其翻译成Java代码后然后再进行编译并在第一次请求时创建一个Servlet实例。正因为如此,第一次访问JSP页面时会后延迟)
3、JSP不用写配置文件
4、JSP以静态代码为主,Java代码为辅。Servlet反之。
JSP从本质上来说内核还是Servlet,但与Servlet不是替代关系而是一种互补的关系。JSP适合于写显示层的动态页面,而Servlet则适合写控制层的业务控制(页面转发)。
JSP往纯标签方向发展,Servlet往纯代码方向发展,他们以Servlet内核(请求响应式的工作方式)往两个方向发展。
*********************************************************************
JSP简介:
JSP分为静态页面代码和动态代码(动态生成静态内容的部分)。
JSP在部署应用时该讲JSP页面放在对应应用的跟目录下
JSP被容器自动翻译成Java源文件其保存路径为:
Tomcat/work/Catalina/localhost/应用目录
JSP编程原则:少写代码多写标签(简化页面开发)。
*********************************************************************
JSP的优点:
1、静态内容和表示逻辑相分离。
2、减化了开发过程
3、支持软件重用
4、自动翻译和编译
5、扩展性强
6、平台无关的
7、是J2EE蓝图的一部分
*********************************************************************
JSP语法元素分为三大块:指令、动作和代码
指令
用于从JSP发送一个信息到容器上。他用来设置全局变量,声明类,要实现的方法和输出内容等。指令在JSP整个文件内有效。它为翻译阶段提供了全局信息。
格式<%@………%>
代码(脚本)
动作又分为4块:声明、表达式、代码块和注释
1、声明:<%!…….%>
用来定义在产生的类文件中的类的属性和方法。不能声明类。
由于servlet是工作在多线程环境下,所以尽量不要在servlet方法体外声明成员变量。
2、表达式:<%=……..%>
在JSP请求处理阶段计算他的值,表达式生成的代码是Service方法中的一个代码片断。
JSP对于声明的处理:1、计算表达式的值
2、将值转换成String
3、用out.println发送标签
3、代码段:<%………%>
是一段可以在处理请求时间执行的Java代码。可以产生输出,也可以是一些流程控制语句。在代码段中定义的变量为service方法中的局部变量。
4、注释:
显示注释:<!――……..――>
隐式注释:<%――……――%>
*********************************************************************
组件:对底层API有用的类进行封装,简化开发者开发的难度。
封装了若干对象的结构,完成一个相对独立的功能
为了重用封装成一个黑盒,对用户是透明的
*********************************************************************
在JSP中为什么引入JavaBean?
将底层的API的类封装在组件中,增强页面(JSP)的可读性,增强了代码的复用性。
Bean主要负责计算,JSP则负责显示结果。
<jsp:useBean id = "BeanName" class = "className" sope="范围域">
该标签表示创建或使用一个对象。
例:
<jsp:useBean id="user" class="com.tarena.User" scope="session" />
<%--
1)创建或查找session范围内的一个类型为com.tarena.User的JavaBean对象。
首先调用session.getAttribute(id的值);
判断返回值是否为null,如果为null,创建一个类型为com.tarena.User的JavaBean对象
并将该对象以id的值为KEY保存到session的属性中(sesssion.setAttribute(id的值,JavaBean对象))
2)声明的一个脚本语言中的临时变量,名字为id的值,值为JavaBean对象。
--%>
BeanName:bean的引用变量名同时还是Session中的key(该属性名是我们自定义的)
className:类的全名
范围域:page|request|session|application,就是指定创建好的JavaBean对象放在那个范围对象中。
page:当前页面有效
request:同一次请求中有效
session:在于对应用户的会话中有效
application:服务器开启时创建,服务器关闭时销毁。
<jsp:setProperty name="name" property="propertyName" param="paramName"/>
name="name:javaBean标识名
property="propertyName:javaBean属性名
param="paramName":要传的参数名
通过标签来调用对象的方法。
Jsp内部会根据propertyName前加上set查找并调用到对应的set方法。
注意:要使用该标签,对应的类必须符合JavaBean规范。
<jsp:getProperty name="name" property="propertyName" />
name="name:javaBean标识名
property="propertyName:javaBean属性名
注:该标签完全可以用更简练的表达式来取代。<%=name.getpropertyName()%>
*********************************************************************
JavaBean的定义:
1、是一个普通的Java类
2、在结构上没有预先的规定,不需要容器,不需要继承类或实现接口
3、要求必须放在包中,要求实现Serializable接口
4、要求有一个无参的构造方法.
5、属性的类型必须保持唯一,返回值必须和set方法参数类型一致
6、对每个属性要有对应的get和set方法。注:隐藏属性可以没有
7、可以有外观作为显示控制,事件机制。
*********************************************************************
在JSP中新建一个Bean或引用一个Bean实例的过程:
先去指定的范围找session中的key对应的属性(对象),如果session中没有则new一个JavaBean,并将该对象作为session中的key保存,通过<JSP:setProperty…../>来初始化新建的Bean。
注:<JSP:setProperty…../>该标签只有在new一个JavaBean时才会生效,如果session中有对应对象则忽略该标签。
<JSP:setProperty name="beanName" Property="propertyName" value="String constant"/>
*********************************************************************
常用的指令标签
1、指定包名:
<%@ page import="Java.util.Collection"%> //注:包名后不用;号
2、指定一个Http会话中这个页面是否参与
<%@page session = "true|false"%> //注:默认为ture
3、定义该页面出现异常时调用的页面
<%@page errorPage="error.jsp"%>
4、指定页面是否为异常处理页面
<%@page isErrorPage="true|false"%>
5、定义JSP中输出流的编码和页面响应的MIME类型
<%@page contentType="test/html; charset=GBK"%>
MIME:多用途互联网邮件扩展协议。
6、指定JSP页面的编码
<%@page pageEncoding="GBK"%>
7、标签库指令
<%@tablelib%>
*********************************************************************
常用的动作标签
1、<jsp:param>
以健值对的形式传递一个或多个参数给动态页面,一般结合<JSP:include>、<jsp:forward>、<JSP:plugin>标签一起使用。
<jsp:Param name="paramName" value="paramValue"/>
2、<jsp:include>
用于在当前JSP页面里动态的包含一个静态或动态页面资源,做到页面代码的复用。在运行上效率比<%@page include%>指令低,但可以动态增加内容。
<jsp:include page="fileName" flush="true|false"/>
flush="true|false"表示在包含另一个页面之前是否要自动刷新。
3、<jsp:forward>
用于将请求转发到另一个JSP、servlet或静态资源文件。
<jsp:forward page="url"/>
4、<jsp:setProperty>
该操作和useBean一起协作,用来设置Bean的简单属性和索引属性(注:要求request中参数名与Bean中的对应属性同名)
(1)<jsp:setProperty name="beanName" property="*"/>
设置Bean属性的快捷方式,Jsp内在机制会将request中的参数与Bean对应的属性通过set方法赋值。
(2)<jsp:setProperty name="beanName" property="propertyName"/>
使用request中的一个参数来指定Bean中的一个属性值
(3)<jsp:setProperty name="beanName" property="propertyName" param="proName"/>
在Bean属性的名字和request中参数名字不同时使用该方法,param指定的是request中的参数名,property对应bean中的属性名。
注:在(1)(2)(3)中如果request对象的参数值中有空值那么对应的Bean属性将不会设定任何值。
(4)<jsp:setProperty name="beanName" property="propertyName" value="proValue"/>
value是一个可选属性,使用指定的值来设定Bean的属性。
注:不能在一个<jsp:setProperty>中同时使用param和value,两者都是设定Bean属性的值,不是方式不同而已。
(5)<jsp:getProperty>
用来访问一个Bean的属性,其对应的值将转成化为一个String,然后发送到输出流中,如果属性是一个对象,将调用toString()方法。
<jsp:getProperty name="userSession" property="name"/>
userSession:Bean名字(Id)
name:属性名
(6)<jsp:useBean>
用来在Jsp页面中创建一个Bean实例,并指定他的名字以及作用范围。
<jsp:useBean id="bean" scop="page|…." TypeSpel/>
a、id:用来指定实例对象的变量名
b、scope="page|request|session|application"
用来指定Bean存在的范围以及ID变量名的有效范围
注:在创建Bean的Jsp文件中<%@page%>指令中必须指定Session=true,否则可能会导致致命的错位发生。
c、typespec可以是一下四者之一
class="className"
class="className" type="typeName"
beanName="beanName" type="typeName"
type="typeName"
注:class="className"表示bean的类路径和类名,这个class不能是抽象的,必须一个公用无参的构造器。
type="typeName" type可以是一个类本身(class),也可以是一个类的父类,或者是一个类的接口。如果没有使用class或BeanName指定type,Bean将不会被实例化。
*********************************************************************
中文乱码问题:
1、页面中
2、传参过程中
3、数据库中
*********************************************************************
JSP中的内置对象:
application、session、request、page、response、out、Config、exception
名称 类型 注释和范围
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.servlet.jsp. HttpJspPage page
Exception java.lang.Throwable page
*********************************************************************
JSP中的自定义标签:
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) 不带属性和主体的简单标签:<mytaglibs:SomeTag/>;
2) 不带主体但有属性的标签:<mytaglibs:SomeTag user="TonyDeng"/>;
3) 带有主体和属性的标签:<mytaglibs:SomeTag user="TonyDeng">
...// 标签体
</mytaglibs:SomeTag>;
注意: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
自定义标签库(中)
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中定义)之一;
3)1.2的标签在内存中是可复用的。
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
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
*********************************************************************
EL
"."表示对javaBean属性的访问。
EL中的隐含对象:param
${empty student}判断对象是否为空
这里需要注意的是如果student是一个集合,如果集合中没有元素的话,EL依然视他为空。
EL是一种弱类型的语言
<c:forEach begin="1" end="6" step="1" var="i">
<h${i} align="center">${100 * i}</h${i}>
</c:forEach>
在EL内置对象PageContext、pageScope、requestScope、sessionScope、ApplicationScope、
Param、cookie、
*********************************************************************
JSTL
标准标签库
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
关于刷新导致重复提交的问题:浏览器刷新的含义是重新执行最近的一个请求。
Expand - Collapse * Jsp(Java Server Page) o 附加知识
+ Web Server Apache、IIS
# 这些Server无法产生动态内容
需要通过WEB辅助应用如CGI、Servlet
o 解释Jsp 文件原理
+ 通过request 第一次请求jsp文件 将翻译成java 文件
.然后编译成java,然后通过生成一个Servlet对象 如果下次访问将成绶存里拿
除非源jsp源文件有变化。
o 变量定义及使用
+ 局部定义是按html文件的顺序,定义必需在使用前
+ 成员变量定义任意
o 方法定义及使用
+ 不能定义在脚本里
o Jsp指令
+ page
# import
* 类java导包
# Session
* 默认为true
跟request.getSession(true)一样
* 使用<% page sesion=false%>
跟request.getSession(false)一样
# errorPage
* 处理异常
# 设置指令 <%@ page errorPage="error.jsp" %>
+ include
# 将目标包含进来
如果页面的框架
* <%@ include =""%>
# 在翻译时包含
+ taglib
o Jsp 动作(Action)
+ forward
# 等价于request.dispatcher.forward();
# <jsp:forward page="footer.jsp">
<jsp:param value="admin" name="name"/>
</jsp:forward>
等价于servlet
request.dispatcher.forward("").forward(req,resp);
里面的 <jsp:param value="admin" name="name"/>等价于 request.getParameter("name").
+ include
# 示:<jsp:include page="footer.jsp"></jsp:include>
# 可传参与include 指令不同
include 动作运行时触发
o 隐含对象
+ request
+ response
发表评论
-
JS前端DES加密参数
2016-07-08 14:27 11731DES加密为可解密的机制,这里使用DES进行加密方便后台解密还 ... -
包含日期和时间的选择器(转)
2012-09-27 16:11 1096转载自: http://www.cnblogs.com/swe ... -
jsp通用分页实现脚本
2012-09-26 17:12 1702工具脚本使用时只需替换url的问号前半部分即可。 此页面需要j ... -
Web项目设置页面不缓存
2012-08-04 19:55 2872htm网页 <meta http-equiv=&qu ... -
使用Filter实现访问监控
2012-07-15 21:40 1514实现Servlet的接口过滤器接口Filter实现对用户访问页 ... -
Properties配置文件读取工具类
2012-05-17 15:33 2622配置文件必须放在src目录下。 import java.i ... -
浏览器对js支持的差异
2011-11-16 17:31 970document.all firefox不支持,IE支持 -
网页iframe标签使用
2011-11-04 10:50 1437iframe使用很简单,使用src属性指向另一个你需要包含的另 ... -
js去除前后空格方法
2011-10-26 14:34 1186js去除前后空格方法 //去除前后空格方法 String ... -
js获取下拉列表选中项的值和文本(select)以及获取单选按钮(radio)组的值和修改选中项[转]
2011-10-25 15:59 1274一、获取下拉列表选中 ... -
jsp之jstl标签(c) (转)
2011-09-23 13:37 1801一.核心标签库 它是JSTL中的核心库,为日常任务提供 ... -
java web项目自定义配置文件路径
2011-01-25 17:30 10859在java web项目中添加配置文件,满足数据库配置参数以及其 ... -
jsp笔记
2010-03-31 00:44 1515day1 JSP 定义: 1)Jav ... -
jsp学习
2010-03-31 00:31 1077JSP介绍 1. 概况 1) 以文本为基础能够返回动态内容 ...
相关推荐
提供的"jsp课件"包含了PPT格式的学习资料,这是一份非常适合初学者的教程。通过PPT,你可以系统地了解JSP的基本概念、语法、页面生命周期以及如何与其他Web技术(如Servlet、JavaBean、EL和JSTL)配合使用。 在自学...
不错的JSP课件,容量也比较大,希望能够帮助到你
综上所述,"jsp课件及源码"是一个适合初学者的资源,它将帮助学习者理解Java在企业级Web开发中的应用,包括JSP的基本语法、生命周期、内置对象、EL和JSTL的使用,以及如何与Servlet和MVC模式相结合。通过学习这些...
在"最实用的jsp课件,吐血奉献!"这个资源中,我们可以深入学习到JSP的核心概念和技术。 1. **Web应用基础**: Web应用是一种基于HTTP协议的客户端-服务器架构,用户通过浏览器发送请求,服务器接收并处理请求,...
第1章 JSP概述.ppt 第2章 JSP页面元素.ppt 第3章 JSP内置对象.ppt 第4章 JSP中的文件操作.ppt 第5章 JSP数据库.ppt 第九章servlet.ppt 第六章javabean.ppt
综上所述,"jsp课件更好的实现"这个主题涵盖了大量的Web开发基础知识,包括JSP的原理、使用方法以及与Servlet、MVC框架的关系。通过深入学习和实践,你可以掌握创建高效、可维护的动态网站的技术。"Servlet"作为JSP...
**JavaServer Pages(JSP)技术详解** JavaServer Pages(JSP)是Java平台上的一个标准,用于开发动态Web应用程序。它是Sun Microsystems(现已被Oracle公司收购)在2000年推出的一种技术,旨在简化Java Web应用的...
【标题】"外教的jsp课件"指出这是一份由外籍教师教授的关于Java Server Pages(JSP)的课程资料。JSP是Java平台上用于创建动态web应用程序的技术,它结合了HTML、Java代码和脚本元素,允许开发者在服务器端生成HTML...
【正则表达式与JSP课件】是一个深入讲解Web开发技术的课程资源包,涵盖了JSP、Servlet、J2EE以及正则表达式等多个关键领域。这些知识点在现代Web应用开发中扮演着至关重要的角色。 首先,让我们来探讨一下**正则...
本篇将深入探讨“浙工大软件班的JSP课件PPT”中的核心知识点,旨在为学习者提供全面的JSP(JavaServer Pages)技术理解。浙江工业大学软件工程专业以其严谨的教学体系著称,其JSP课程内容自然涵盖了这一领域的基础到...
jSP课件(JAVABEAN),网页编程,来看看吧
jsp课件教程 part1 jsp课件教程 part1jsp课件教程 part1
本压缩包文件“Jsp课件以及课本课后答案.rar”包含了JSP学习的相关资料,包括课件和课本课后答案,对于没有教材的学生来说是一个宝贵的参考资料。 **一、JSP简介** `chapter01 JSP简介.ppt`提供了对JSP基础概念的...
【北大青鸟ACCP 5.0 JSP课件】是北大青鸟教育机构推出的针对Java Web开发的高级课程,旨在培养具备扎实JSP技术基础的IT专业人才。该课程内容丰富,涵盖了JSP(Java Server Pages)的核心概念、原理以及实际应用,...
这个"JSP课件PPT"应该包含以上提到的各个方面,通过一系列幻灯片深入浅出地讲解了JSP的基础知识、核心概念以及实际应用案例。对于想要深入理解JSP的软件开发人员来说,这是一份非常宝贵的资源,可以帮助他们提升技能...
**JSP技术基础** ...通过学习这套JSP课件,学员将能够掌握JSP的基础知识,理解其工作流程,并具备创建简单的JSP应用的能力。对于希望从事Web开发或者提升现有技能的人员来说,这是一个非常实用的学习资源。
jsp 课件 教程 part4 jsp 课件 教程 part4