Taglib
Struts、Spring、Hibernate三大框架的原理和优点
Struts的原理和优点.Struts工作原理MVC即Model—View—Controller的缩写,是一种常用的设计模式。
MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
MVC的工作原理,如下图1所示:Struts 是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。
Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展.Struts的工作原理,视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。
控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。
ActionServlet是一个通用的控制组件。
这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。
它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。
另外控制组件也负责用相应的请求参数填充Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。
动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。
最后动作类把控制权传给后续的JSP 文件,后者生成视图。
所有这些控制逻辑利用Struts-config.xml文件来配置。
模型:模型以一个或多个java bean的形式存在。
这些bean分为三类:Action Form、Action、JavaBean or EJB.Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。
Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。
jsp、taglib、velocity、freemarker等都过时了吗?解决方案
jsp、taglib、velocity、freemarker等都过时了吗?解决方案jsp、taglib、velocity、freemarker等都过时了吗,我是老程序员,以前做BS结构开发,用的是jsp、taglib、velocity、freemarker等技术以输出HTML,但是今天,我发现这些技术似乎将被淘汰了,新的开发模式不再输出html了,因此上述技术不再有用,或者只局部用一点点。
新的技术往往用ext等js组件,界面就是一个静态的HTML,包含了一些组件,发往后台的请求不再是处理后输出HTML,而是输出JSON格式的数据了,有些类库可以把javaBean直接作为json输出,以输出HTML为目标的jsp、taglib、velocity、freemarker等技术再也用不到了。
真的是再也用不到了吗,基于ext等js类库并且完全以Ajax方式交互json数据,这种将是主流并将完全代替传统的web技术吗,------解决方案--------------------------------------------------------怎么可能过时呢,我做的项目很少用ajax现在做的项目甲方不允许用ajax------解决方案--------------------------------------------------------还不是看客户需求了,正确的时间选择正确的技术才是王道如果1个100万的项目摆在你面前,客户就要求你用老技术,因为他们用着习惯了,那你说做还是不做,呵呵------解决方案--------------------------------------------------------Ajax 一般用于公共的网站比较多,作为企业内部使用的管理系统为了安全性一般很少使用Ajax 的,大多数都是基于传统的请求/响应方式。
另外,企业内部的管理系统稳定性和安全性是首要,用户体验相对于比较次要。
jsp、taglib、velocity、freemarker等都过时了吗?解决方案
jsp> taglib、velocity、freemarker 等都过时了吗?解决方案jsp、taglib> velocity> freemarker 等都过时了吗,我是老程序员,以前做BS结构开发,用的是jsp、taglibs velocity、freemarker等技术以输出HTML,但是今天,我发现这些技术似乎将被淘汰了,新的开发模式不再输出html 7,因此上述技术不再有用,或者只局部用一点点。
新的技术往往用ext等js组件,界面就是一个静态的HTML,包含了一些组件,发往后台的请求不再是处理后输出HTML,而是输出JS0N格式的数据了,有些类库可以把javaBean直接作为json输出,以输出HTML为LI标的jsp、taglib^ velocity、freemarker等技术再也用不到了。
真的是再也用不到了吗,基于ext等js类库并且完全以Ajax方式交互json数据,这种将是主流并将完全代替传统的web技术吗,怎么可能过时呢,我做的项H很少用ajax现在做的项口甲方不允许用ajax----- 解决方案--------------还不是看客户需求了,正确的时间选择正确的技术才是王道如果1个100万的项口摆在你面前,客户就要求你用老技术,因为他们用着习惯了,那你说做还是不做,呵呵Ajax 一般用于公共的网站比较多,作为企业内部使用的管理系统为了安全性一般很少使用Ajax的,大多数都是基于传统的请求/响应方式。
另外,企业内部的管理系统稳定性和安全性是首要,用户体验相对于比较次要。
----- 解决方案-----------------------------------------------------探讨我是老程序员,以前做BS结构开发,用的是jsp、taglibs velocity、freemarker等技术以输出HTML,但是今天,我发现这些技术似乎将被淘汰了,新的开发模式不再输出html T,因此上述技术不再有用,或者只局部用一点点。
JSP课后习题参考答案
JSP课后习题参考答案●JSP引擎调用Java虚拟机解释执行.class文件,并将运行结果返回给服务器。
●服务器将运行结果以HTML形式作为响应返回给客户端的浏览器。
由于一个JSP页面在第一次被访问时要经过翻译、编译和执行这几个步骤,所以客户端得到响应所需要的时间比较长。
当该页面再次被访问时,它对应的.class文件已经生成,不需要再次翻译和编译,JSP引擎可以直接执行.class文件,因此JSP页面的访问速度会大为提高。
2. 简述JSP两种体系结构。
答:JSP规范中分别称作JSP Model 1 和JSP Model 2,它们的本质区别在于处理批量请求的位置不同。
Model1,在Model1体系中,JSP页面独自响应请求并将处理结果返回客户。
这里仍然存在显示与内容的分离,因为所有的数据存取都是由JavaBean来完成的。
尽管Model1体系十分适合简单应用的需要,它却不能满足复杂的大型Web应用程序需要。
不加选择地随意运用Model 1,会导致JSP页内被嵌入大量的脚本片段或Java代码。
尽管这对于Java程序员来说可能不是什么大问题,但如果JSP页面是由网页设计人员开发并维护的这就确实是个问题了。
从根本上讲,将导致角色定义不清和职责分配不明,给项目管理带来不必要的麻烦。
Model2体系结构,是一种把JSP与Servlet联合使用来实现动态内容服务的方法。
它吸取了两种技术各自的优点,用JSP生成表示层的内容,让Servlet完成深层次的处理任务。
Servlet充当控制者的角色,负责管理对请求的处理,创建JSP页面需要使用的Bean和对象,同时根据用户的动作决定把哪个JSP页面传给请求者。
在JSP页面内没有处理逻辑,它仅负责检索原先由Servlet创建的对象或JavaBean,从Servlet中提取动态内容插入静态模板。
分离了显示和内容,明确了角色的定义以及实现了开发者与网页设计者的分开。
项目越复杂,使用Model 2体系结构的优势就越突出。
第2章 JSP语法基础 2.3 JSP指令元素、2.4 JSP动作元素
第2章 JSP语法基础
2.3 JSP指令元素 2.4 JSP动作元素
JSP开发案例教程
本章内容
01 脚本元素 03 JSP指令元素
02 案例ch2.2_datetime: 时间格式化
04 JSP动作元素
05 案例ch2.5_include: 框架类型网页
06 小结与练习
2.3 JSP指令元素
指定在当前页
4
session
中是否允许 10 isThreadSafe 指定是否线程安全
session操作
5
buffer
指定处理页面 输出内容时的 11 缓冲区大小
autoFlush
是定当缓冲区满时是 否自动清空
指定当前页面
说明当前页面是否为
6
errorPage 运行异常时调 12 isErrorPage 其他页面的异常处理
该JSP动作表示获取或创建一个名称为guess的、属于类com.GuessNumber的、生命周期 为session的对象,详见本书案例ch5.4_guessNumber(猜数游戏)。
JSP开发案例教程
所有的动作元素需要两个属性:
id属性
id属性是动作元素的唯一标识,可以在 JSP页面中被引用。动作元素创建的id值 可以通过PageContext来调用。
可以使用绝对或相对URL。 ✓ tagDir属性指示前缀将被用于标识在WEB-INF/tags目录下的标签文件。
2.4 JSP动作元素
JSP开发案例教程
2.4 JSP动作元素
JSP动作元素
➢ JSP动作利用XML语法格式的标记,来控制JSP容器Servlet引擎的行为。 ➢ 利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件
JSP页面的构成
JSP页⾯的构成JSP页⾯就是带有JSP元素的常规Web页⾯,它由静态内容和动态内容构成。
其中,静态内容指HTML元素,动态内容(JSP元素)包括指令元素、脚本元素、动作元素、注释等内容。
1、指令元素指令元素主要⽤于为转换阶段提供JSP页⾯的相关信息,指令不会产⽣任何输出到当前的输出流中,它指定了有关页⾯本⾝的信息,这些信息在请求之间⼀直保持不变。
指令元素语法为<%@ directive{attr="value"}%>。
指令元素有三种:page、include、taglib。
1)page该指令⽤于整个页⾯,定义与页⾯相关的属性,它是JSP页⾯和容器的通信员,⼀般放在JSP页⾯的第⼀⾏。
与page相关的属性如下:属性描述buffer指定out对象使⽤缓冲区的⼤⼩autoFlush控制out对象的缓存区contentType指定当前JSP页⾯的MIME类型和字符编码errorPage指定当JSP页⾯发⽣异常时需要转向的错误处理页⾯isErrorPage指定当前页⾯是否可以作为另⼀个JSP页⾯的错误处理页⾯extends指定servlet从哪⼀个类继承import导⼊要使⽤的Java类info定义JSP页⾯的描述信息isThreadSafe指定对JSP页⾯的访问是否为线程安全language定义JSP页⾯所⽤的脚本语⾔,默认是Javasession指定JSP页⾯是否使⽤sessionisELIgnored指定是否执⾏EL表达式isScriptingEnabled确定脚本元素能否被使⽤a、import="导包列表",可以多次导⼊,也可以⽤逗号分隔开。
b、language=“scriptingLangeuage”,指定在脚本元素使⽤的脚本语⾔,默认是Java。
c、contentType="cinfo",指定HTTP响应的头部的Content-Type值。
Jsp页面使用taglib标签报错500的问题
Jsp页⾯使⽤taglib标签报错500的问题花了⼤量时间查阅⼤量资料后解决了,下⾯我说⼀下我解决问题的整个经过。
出现问题后我查阅资料,⼤部分给出的原因是没有添加avax.servlet.jstl的依赖,或者是项⽬打包输出的构建⽂件lib中不包含这个包的依赖,我仔细检查后发现,我本地项⽬确实存在。
继续查阅资料说,少⼀个standard包的依赖,我继续尝试,在项⽬中添加standard包的依赖,并在tomcat的lib⽬录⾥也添加了jstl及standard 包,继续运⾏,发现还是报错。
然后继续查阅资料,原因因为项⽬jsp页⾯引⽤的taglib标签所使⽤的tld⽂件没有从jstl包中加载出来,导致报错,解决⽅式是在项⽬的WEB-INF下添加jstl中所有tld⽂件。
于是乎,我在本地项⽬的WEB-INF下建⽴了⼀个taglib⽂件夹,把jstl包解压后,把⾥⾯jar包的META-INF\中.tld全部拷贝出后放在新建的⽂件夹中。
解决⽅式是暴⼒了点,还是先解决问题再说,于是乎再次运⾏。
原本这⾥就结束了,但是我不⽢⼼,这么解决太暴⼒了,⽽且影响项⽬结构,看起来很乱,于是乎继续翻阅资料。
偶然发现了⼀篇博客,说是tomcat的catalina.properties配置⽂件⾥如果配置了跳过tld扫描会导致项⽬⽆法加载.tld⽂件的问题,所以解决办法是把catalina.properties 配置⽂件中的tomcat.util.scan.StandardJarScanFilter.jarsToSkip字段修改为\总结:我看⽹上很多说法,说是tomcat添加tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar后会提⾼tomcat的启动速度,也会解决因为扫描.tld⽂件⽽导致卡在启动项⽬⼗⼏分钟的问题,但是带来的弊端就是jsp页⾯taglib标签500错误,所以这个问题的两种解决⽅式,⼤家根据⾃⼰情况⾃⾏选择:1. 第⼀种:在项⽬的WEB-INF下添加jstl中所有tld⽂件,这样会导致项⽬结构看起来很乱,好处是不使⽤JSP作为视图层时,tomcat启动速度增加。
Jsp入门--语法格式(%%)、指令(page、include、taglib)
Jsp⼊门--语法格式(%%)、指令(page、include、taglib)JSP脚本1. <% java代码 %>⽅法内部的代码都可以写在个位置<% String s1 = "hello jsp"; %>2. <%=java代码 %>把java代码运⾏的结果在页⾯显⽰, 要求java代码是⼀个表达式<%=s1 %>3. <%! java代码 %> 使⽤很少对属性的声明,⽅法的声明4、jsp的注释 <%-- ... --%>JSP是特殊的Servlet JSP是⼀种特殊的Servlet,当JSP页⾯⾸次被访问时,容器(Tomcat)会先把JSP编译成Servlet,然后再去执⾏Servlet。
所以JSP其实就是⼀个Servlet!JSP真⾝存放⽬录 JSP⽣成的Servlet存放在${CATALANA}/work⽬录下,我经常开玩笑的说,它是JSP的“真⾝”。
我们打开看看其中的内容,了解⼀下JSP的“真⾝”。
你会发现,在JSP中的静态信息(例如<html>等)在“真⾝”中都是使⽤out.write()完成打印!这些静态信息都是作为字符串输出给了客户端。
JSP的整篇内容都会放到名为_jspService的⽅法中!JSP指令语法:语法格式: <%@ 指令名属性名1=值1 属性名2 = 值2.... %>1. page指令: 对jsp页⾯⼀些设置2. include指令: 包含其他jsp页⾯3. taglib指令: 引⼊标签库 (往后)page指令page指令是最为常⽤的指定,也是属性最多的属性!page指令没有必须属性,都是可选属性。
例如<%@page %>,没有给出任何属性也是可以的!在JSP页⾯中,任何指令都可以重复出现!默认创建的jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>属性:1、 language: jsp⽀持的编程语⾔: 值只能是java2、 pageEncoding: 设置jsp的编码:指定当前JSP页⾯的编码!这个编码是给服务器看的3、 Content-type: contentType属性与response.setContentType()⽅法的作⽤相同! 它会完成两项⼯作,⼀是设置响应字符流的编码,⼆是设置content-type响应头。
JSP基本的语法、3个编译指令、7个动作指令、9个内置对象
JSP基本的语法、3个编译指令、7个动作指令、9个内置对象⽬录⼀、jsp概述JSP是java server page的缩写,其**==本质是⼀个简化的servlet**,是⼀种动态⽹页技术标准。
jsp页⾯是在HTML页⾯中嵌⼊java程序段。
使⽤jsp开发的应⽤程序能够跨平台。
⼆、jsp基本的语法2.1 jsp表达式jsp表达式⽤于向页⾯输出信息。
语法格式例如以下:<%= 表达式 %>如:<%= 5+6 %>注意:<%与=之间不能有空格,=与后⾯的表达式之间能够有空格,另外没有语句结束符号;。
2.2 jsp声明标识声明标识⽤语在jsp页⾯中定义全局的变量或者⽅法,通过声明标识定义的变量和⽅法能够被整个jsp页⾯訪问。
语法格式例如以下:<%!声明变量或者⽅法的代码%>如<%!String str = "test";%>注意:<%与!之间不能有空格,!与其后⾯的代码之间能够有空格。
2.3 jsp代码段代码⽚段就是嵌在jsp页⾯中的java代码或脚本代码。
会在页⾯请求的处理期间被运⾏,java代码能够实现定义变量、流程控制等功能。
脚本代码能够通过使⽤jsp内置对象在jsp页⾯输出内容、处理请求和响应、訪问session等,代码⽚段的语法格式例如以下:<% java代码或者脚本代码 %>2.4 jsp注释2.4.1 HTML注释HTML注释格式:<!-- html凝视 -->html凝视不会显⽰在⽹页中。
在浏览器中查看源代码的时候能够看到注释信息。
2.4.2 代码⽚段注释由于代码⽚段即为java代码或者脚本代码,代码⽚段的注释和java语法⼀样。
单⾏注释写在//之后,多⾏注释写在/* */ 之间,⽂档提⽰注释写在/**与 */之间。
//单⾏注释/*多⾏注释第⼀⾏多⾏注释第⼆⾏*//**⽂档注释*/2.4.3 隐藏注释html注释在查看⽹页源代码的时候能够看到,所以严格来说这样的注释并不安全,jsp提供的隐藏注释在浏览器和查看源代码的时候都看不到。
jsp练习题(打印版)
jsp练习题(打印版)### JSP 练习题题目一:JSP 基础1. 简述 JSP 的全称及其主要作用。
2. 描述 JSP 页面的基本结构。
3. 列举 JSP 中常用的内置对象,并简述它们的作用。
题目二:JSP 脚本元素1. 编写一个 JSP 页面,使用 scriptlet 打印出当前日期和时间。
2. 描述 JSP 中的表达式(Expression)和声明(Declaration)的区别。
3. 给出一个使用 JSP 表达式输出变量值的示例。
题目三:JSP 指令1. 解释 JSP 中的 page 指令和 include 指令的区别。
2. 编写一个使用 include 指令的 JSP 页面,将头部和尾部信息包含进来。
3. 描述 taglib 指令的作用,并给出一个使用它的示例。
题目四:JSP 动作元素1. 描述 JSP 中的 forward 动作元素的作用。
2. 编写一个使用 forward 动作元素将请求转发到另一个 JSP 页面的示例。
3. 列举 JSP 中的常用动作元素,并简述它们的用途。
题目五:JSP 数据库操作1. 编写一个 JSP 页面,使用 JDBC 连接数据库,并查询数据库中的用户信息。
2. 描述在 JSP 页面中处理数据库查询结果的一般步骤。
3. 给出一个使用 JSP 显示数据库查询结果的示例。
题目六:JSP 会话管理1. 描述 JSP 中的 session 对象的作用。
2. 编写一个 JSP 页面,使用 session 对象存储用户登录信息。
3. 描述 session 对象的生命周期,并给出一个使用 session 存储和获取信息的示例。
题目七:JSP 错误处理1. 描述 JSP 页面中的错误页面(errorPage)的作用。
2. 编写一个 JSP 页面,当发生错误时,能够将用户重定向到错误页面。
3. 描述 JSP 页面中的错误代码和异常类型的关系。
题目八:JSP 过滤器1. 描述 JSP 过滤器(filter)的作用。
JSP的学习(3)——语法知识二之page指令
JSP的学习(3)——语法知识⼆之page指令 本篇接上⼀篇《》,继续来学习JSP的语法。
本⽂主要从JSP指令中的page指令,对其各个属性进⾏详细的学习:JSP指令: JSP指令是为JSP引擎⽽设计的,JSP指令不产⽣任何可见输出,只是告诉在转换成Servlet的过程中如何处理JSP页⾯中的其余部分。
在JSP 2.0 规范中共定义了三个指令: 1) page指令 2) include指令 3) taglib指令 taglib指令是导⼊标签库的指令,以后会介绍到。
JSP指令格式:<%@指令(如page、include或taglib) 属性1="属性值" 属性2="属性值" … %>例如:<%@page contentType = "text/html;charset=utf-8" %> 如果⼀个指令有多个属性,这多个属性可以写在⼀个指令中,也可以分开写。
例如:1<%@page contentType = "text/html;charset=utf-8" %>2<%@page import = "java.util.Date" %>或者写成: <%@page contentType="text/html;charset=utf-8" import="java.util.Date" %>page指令 page指令⽤于定义JSP页⾯的各种属性,⽆论page指令出现在JSP页⾯中的什么地⽅,它作⽤的都是整个JSP页⾯,为了保持程序的可读性和良好习惯,page指令最好都放置在整个page页⾯的起始位置。
page指令包含以下属性(属性值为⽰例): (1). language = “java ” 指⽰JSP页⾯如果嵌⼊的代码为Java代码。
jsp第6章
(2) calculate.jsp文件的源代码如下。
<%@ page contentType="text/html; charቤተ መጻሕፍቲ ባይዱet=gb2312"%>
<FORM ACTION="" METHOD="post"> <INPUT TYPE="text" NAME="ok">
<INPUT TYPE="submit" VALUE="计算">
确的:
<%@ page import="java.io.* ", "javax.servlet.* ",
"java.util.Date"%>
或者 <%@ page import="java.io.* " %>
<%@ page import= "javax.servlet.* ",
"java.util.Date"%> 注意:page指令对整个页面有效,可以在JSP页面的
任何地方写这种代码。但是,好的习惯是把它写在JSP程
序的最前面,而且因为它是JSP页面指令,请记住一定要 写在<HTML>标记的前面。
6.1.2 include指令
include指令的作用是在JSP页面出现该指令的位置处
静态插入一个文件,即通知JSP容器在当前页面的include 指令位置上嵌入指定的资源文件的内容。include指令的语
出了page指令的属性及其作用。
表6.1 page指令的属性及其用法说明
jsp规范定义的三大元素
在JSP页面中,JSP元素可以分为三大类:JSP指令元素、JSP动作元素、JSP脚本元素。
一、JSP指令元素仅仅是在“翻译”阶段使用的,即把JSP翻译成Servlet。
JSP指令元素只有“三个”:page、taglib、include。
但每个指令可能有若干个属性。
比如:page指令有contentType属性、有import属性等。
二、jsp动作元素又可分为“三种”:JSP标准动作元素,JSP标准标记库(JSTL)动作元素,自定义动作元素。
JSP标准动作元素”是早期就存在的JSP规范定义的标准动作元素,它是由jsp作为前缀的标签。
例如:<jsp:useBean ……>就是JSP标准动作元素。
JSP标准标记库(JSTL)动作元素:是在JSP发展到后才来产生的,他主要由:1.核心库(core)、2.国际化和格式化库、3.关系数据库访问库、4.XML处理库、5.函数库,这五个库组成。
每个库的标签都对应相应的标签前缀,比如:核心库里面的标签前缀是c,<c:out……>。
由于现在的Web一般都采用MVC模式,所以JSTL中的关系数据库访问库一般比较少用到。
而在用纯JSP设计的Web中一般会用到。
自定义动作元素:如果觉得JSTL还不够用,你还可以开发自定义的定制动作。
自定义动作元素在这里不作介绍。
三、JSP脚本元素:JSP脚本元素在JSTL还没发展起来时,是JSP代码的主要组成部分,在JSP脚本里面可以写各种各样的java代码来完成各种任务。
但JSP页面中大量使用JSP脚本元素会使JSP页面凌乱,而且JSP页面使用JSP脚本元素不方便编程任务的分工。
可以说,JSTL就是为了解决JSP脚本元素带来的问题而产生的。
有了JSTL后,可以用JSTL 取代JSP脚本元素(但JSTL还在完善中,有时不能100%的取代JSP页面中的JSP脚本元素)。
EL表达式也是JSP在后来引进的。
他可以为JSP标记的属性等动态赋值,比JSP表达式更加简单易用。
JSP三大指令和七大动作标签
JSP的基本构成JSP页面主要由指令标签,注释,嵌入Java代码,JSP动作标签,HTML标记语言等五个元素组成。
【1】指令标签1.1 page指令<%@ page attr1=”value1” atrr2=”value2”.......%>page指令的常用属性如下:(1) language属性该属性用于设置JSP页面使用的语言,目前只支持Java语言。
例:<%@ page language=”java” %>(2) extends属性该属性用于设置JSP页面所继承的Java类,JSP和Servlet都可以继承指定的父类,但该属性并不常用.(3) import属性该属性用于设置JSP所导入的类包,JSP页面可以嵌入Java代码片段,这些Java代码在调用API时需要导入相应的类包。
例:<%@page import=”java.util.*” %> (4) pageEncoding属性该属性用于定义JSP页面的编码格式,指定的文件编码格式。
例:<%@ page pageEncoding=”UTF-8” %>(5) contentType属性该属性用于设置JSP页面的MIME类型和字符编码,浏览器会根据些解释页面。
例:<%@ page contentType=”text/html;charset=utf-8” %>(6) session属性该属性用于定义JSP页面是否使用session会话对象,其值是boolean类型,默认值为true. Eg:<%@ page session=”true” %>(7) buffer属性该属性用于设置out对象所使用的缓冲区大小,默认大小是8KB,单位只能是8的倍数。
Eg:<%@ page buffer=”128KB” %>(8) autoFlush属性该属性用于定义JSP页面缓冲存满时是否自动刷新缓存。
JSP语法基础
JSP语法基础1、JSP基本概念JSP(Java Server Pages,Java服务器页面)是一种Web动态页面技术,JSP是嵌入了Java程序段的HTML 文件,由HTML元素(静态部分)、JSP元素(动态部分)和JSP注释组成。
JSP文件后缀名为.jsp。
JSP运行时会被容器翻译为Servlet源代码(xxx_jsp.java)、自动编译为.class文件(xxx_jsp.class)、载入.class文件,然后生成Servlet对象。
JSP和Servlet一样是服务器端技术,允许运行在Web服务器端。
JSP定义在JavaWeb工程中WebRoot根路径下或其下的某个目录,其访问方式和访问HTML文件一致。
注意:如果JSP文件放在WEB-INF目录中时,不能直接访问,需通过Servlet转发。
JSP在运行时会动态编译成一个Servlet,其本质上是就是一个Servlet,JSP是对Servlet技术的扩展。
Servlet完全由Java程序代码构成,擅长于流程控制和业务逻辑处理,一般用作控制器(Controller);JSP 由HTML元素和JSP元素构成,对页面的静态内容和动态内容进行了有效分离,擅长于内容的展示,一般用作视图(View)。
注:翻译生成的xxx_jsp.java和xxx_jsp.class文件的位置:Tomcat中,在apache-tomcat\work\Catalina目录需;在Eclipse中,在workspace下\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\XXX\org\apache\jsp。
2、JSP元素JSP元素包括脚本元素、指令元素和动作元素。
脚本元素(3种)用来声明类成员与方法。
使用<%!与%>声明变量时,必须小心数据共享与线程安全的问题。
JSP taglib指令
JSP taglib 指令<% @ taglib %>指令声明此JSP 文件使用了自定义的标签,同时引用标签库,也指定了他们的标签的前缀。
首先要开发自己的标签库(taglib ),为标签库编写配置文件(以.tld 为后缀的文件),然后在JSP 页面中使用该自定义标签。
然后,通过该指令使用用户自定义标签。
这样增加了代码的重用程度,提高了开发效率。
这里自定义的标签含有标签和元素之分。
因为JSP 文件能够转化为XML ,所以了解标签和元素之间的联系很重要。
实际上,标签只是一个在意义的标记,是JSP 元素的一部分。
JSP 元素是JSP 语法的一部分,和XML 一样有开始标记和结束标记。
元素也可以包含其它的文本、标记和元素。
和标签库,prefix 表示在JSP 页面里引用这个标签的前缀,这些前缀不可以是jsp 、jspx 、java 、javax 、sun 、servlet 和sunw 等。
1.实现标签行为实现标签行为是将scriptlet 代码从原先所在的地方移到一个Java 类中,也就是创建一个Java 类的JavaBean 或者Servlet 文件,用于处理数据内容。
文件名:Tag.javaJSTL (JSP Standard Tag Library ,JSP 标准标签库)是一个不断完善的开放源代码的JSP 标签库,是由apache 的jakarta 小组来维护的。
JSTL 只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x 。
在JSP 2.0中也是作为标准支持的。
类。
然后,再创建一个doEndTag( )方法,并在该方法中通过“pageContext.getOut().println()”语句在页面中输入文本内容。
TagSupport类主要是标签处理类是否需要与标签体交互,如果需要交互的就用TagSupport,否则如果不需要交互就用BodyTagSupport。
taglib 原理和实现
第一章:taglib 原理和实现。
问题:T ag究竟是什么?如何实现一个T ag?一个tag就是一个普通的java类,它唯一特别之处是它必须继承T agSupport或者BodyT agSupport类。
这两个类提供了一些方法,负责jsp 页面和你编写的类之间的交互,例如输入,输出。
而这两个类是由jsp容器提供的,无须开发人员自己实现。
换句话说,你只需把实现了业务逻辑的类继承T agSupport或者BodyT agSupport,再做一些特别的工作,你的类就是一个T ag。
并且它自己负责和jsp页面的交互,不用你多操心。
“特别的工作”通常有以下几个步骤:1)提供属性的set方法,此后这个属性就可以在jsp页面设置。
以jstl 标签为例 <c:out value=""/>,这个value就是jsp数据到tag之间的入口。
所以tag里面必须有一个setValue方法,具体的属性可以不叫value。
例如setValue(String data){this.data = data;}这个“value”的名称是在tld里定义的。
取什么名字都可以,只需tag里提供相应的set方法即可。
2)处理 doStartT ag 或 doEndT ag 。
这两个方法是 T agSupport提供的。
还是以<c:out value=""/>为例,当jsp解析这个标签的时候,在“<”处触发 doStartT ag 事件,在“>”时触发 doEndT ag 事件。
通常在 doStartT ag 里进行逻辑操作,在 doEndT ag 里控制输出。
3)编写tld文件。
4)在jsp页面导入tld这样,你的jsp页面就可以使用自己的tag了。
通常你会发现自己绝大多数活动都集中在 doStartT ag 或 doEndT ag 方法里。
确实如此,熟悉一些接口和类之后,写taglib很容易。
c标签详解
C标签Java代码1.关键字:JSTL标签、<c:choose>、<c:forEach>、<c:forTokens>、<c:if>、<c:import>、<c:otherwise>、<c:out>、<c:param>、<c:redirect>、< c:remove>、<c:url>、<c:when>、<c:set>、<c:catch> 2.3.原来一直没有看过,我说过我是新手,但是好多资料上似乎也不重视 JSTL 。
我看项目源代码发现其中使用到了这个标签库,感觉其还真是方便,页面看起来更加清爽。
减少了 JAVA 程序员亲自写的代码量,还真验证了,不懒不做程序员,程序员如果写代码不想着偷懒,那么生活是很无趣的。
4.5.下面总结总结,学习学习。
:)6.7.JSP 标准标记库( Standard Tag Library , JSTL) 是一组以标准化格式实现许多通用的 Web 站点功能的定制标记。
8.9.JSP 技术的优势之一在于其定制标记库工具。
除了核心 JSP 标记,如 jsp:include 之外,定制标记库工具使您能够创建唯一的标记来描述以站点或应用程序为导向的操作。
一旦您创建了定制标记库 ( 简称 taglib) ,当您扩展项目或转向另一个项目时您可以重复使用这些标记。
您还可以将 taglib 传递给其它开发人员,从而他们可以在自己的网站上使用,或者在您 Web 应用程序的其它部分使用。
10.11.12.13. JSTL 的目标是为了简化 JSP 页面的设计。
对于页面设计人员来说,使用脚本语言(默认值是 JAVA 语言)操作动态数据是比较困难的,而采用标签和表达式语言相对容易一些, JSTL 的使用为页面设计人员和程序开发人员的分工协作提供了便利。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在JSP容器检查完一切它自己能检查的以后,它会为行为查找TagExtraInfo子 类(由<teiclass>元素定义)。如果定义了TagExtraInfo子类,它就将所有属 性信息放到TagData类的一个实例中,并调用TagExtraInfo的isValid()方法, 参数是装有信息的TagData类。 13. 如何重用标记处理程序
建议在release()方法中完成重置所有属性的工作。
• 14.
如何打包和安装标记库
在完成开发后,你可能希望将所有的标记处理程序类,TagExtraInfo 类,标记处理程序类中使用的bean和TLD打包到一个JAR文件里。这 样可以使得在应用程序中安装库更加容易。TLD在JAR文件中必须被 存为/META-INF/taglib.tld。 (1) 为了创建JAR文件,按照下面的结构来安排目录下的文件。 META-INF下:taglib.tld
一个简单的标签由下面的元素构成
• ⑴ JavaBeans:为了得到Java面向对象的好处, 可重用的代码应该放到一个独立的代码容器中。 这些JavaBeans并不是标签库的一部分。不过它 是你的代码库用来执行相关任务的基本代码块。 • ⑵ 标签处理:这是标签库的真正核心。一个标签 处理器将引用它需要的任何资源(你的 JavaBeans)和访问你的JSP页面的全部信息 (pageContext对象)。JSP页面也会将所有已经 被设置的标签属性和JSP页面上的标签体中的内 容传送给标签处理器。在标签处理器处理完毕后, 它将发回输出到你的JSP页面进行处理
4. 编写JSP文件
• <%@ page contentType="text/html;charset=gb2312" import="test1.*"%> • <%@ taglib uri="abc.tld" prefix="h8"%> • <html> • <body> • <h8:hh1/> • </body> • </html>
引用标签
• 1、采用绝对路径 • <%@ taglib uri=“/WEB-INT/abc.tld" prefix="h8"%> • 2、采用相对路径 • <%@ taglib uri="abc.tld" prefix="h8"%>
JSP标签库
JSP标签库(也称自定义库)可看成是 一套产生基于XML脚本的方法,它经由 JavaBeans来支持。在概念上说,标签 库是非常简单和可以重用的代码构造。 它可以大大简化你在页面中输入各种录 入框的代码
• 要开发一个自定义行为,需要使用一系列 的类和接口,这些类和接口在JSP1.1规范 中被称为标记扩展机制 (tag extension mechanism)。实现标记 处理程序所需要的所有接口和类都是在 javax.servlet.jsp.tagext包中定义的。两个 主要的接口分别是Tag和BodyTag。为了使 开发标记处理程序更加容易,API定义了两 个起支持作用的类:TagSupport和 BodyTagSupport。这两个类分别为上面的 两个接口提供了默认的实现。
• ⑶ 标签库的描述(tld文件):这是一个简单的XML文件, 它记录着标签处理器的属性、信息和位置。JSP容器通过 这个文件来得知从哪里及如何调用一个标签库。 • ⑷ 网站的web.xml文件:这是你网站的初始化文件,在这 个文件中,你定义了网站中用到的自定义标签,以及哪个 tld文件用来描述每个自定义的标签。 • ⑸ 分发文件(一个WAR或者JAR文件):如果你想重用 自定义标签的话,你需要一个方法来将它由一个项目转移 到另一个项目中。将标签库打包为一个JAR文件是一个简 单而且有效的方式。 • ⑹ 在你的JSP文件中作标签库声明:很简单,如果要用到 该标签的话,只要在页面声明一下就可以,其后,你就可 以在该JSP页面的任何地方使用它。
TLD文件中的内容:
• 1) 最顶部:标准的XML声明和一个DOCTYPE声明。(这两个声明指定 了文件的文档类型定义Document Type Definition , DTD)。 (2) (3) <taglib>元素: TLD的主元素,它包含了描述库的所有特定元素。 <tlibversion>元素:指定标记库的版本。必须
实例
• • • • • • • 1. 先编写标签处理程序 /* 标签处理器程序 */ package test1; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*;
• • • • • • •
• • • • • •
public class H1 extends TagSupport //BodyTagSupport { public int doStartTag() throws JspException { System.out.println("标签处理开始"); return SKIP_BODY; }
将所有类放在com目录上
文件结构设置好就使用jar命令创建一个JAR文件: jar cvf maojb.jar META-INF com (2) 将JAR文件拷贝到应用程序的WEB-INF/lib目录下。
3. 错误页面errorpage.jsp的代码:
• <html> <body> <%@ page isErrorPage="true" %> <%=exception.getMessage() %> </body> </html>
• 标记库是一个自定义行为的集合。在标记 库中除了标记处理程序的类文件以外,标 记库里还必须包括一个tld文件。这是一个 XML文件,它把所有的自定义行为的名称 映射到相应的标记处理程序类,而且对每 一个自定义行为所支持的所有属性进行了 描述。类文件和tld可以被打包到一个JAR文 件中以方便安装。
(4) <jspversion>元素:指定了库所依赖的JSP规范的版本。默认值为 1.1。可选
(5) <shortname>元素:必须元素。这个元素的值中不能包含空格或其 他特殊字符,也不能以数字或下划线开头。
(6)
(7)
<uri>元素:可选,字符规则同上。
<info&g一个<tag>元素。<tag>元素中包含了 描述自定义行为的各个方面的其他元素: <name> <tagclass> <teiclass> <bodycontent> <info> <attribute> l <name>元素是必须的。它包含了自定义行为元素对应的名称,这 个名称是唯一的。 l <tagclass>元素也是必须的。
l 如果行为引入了变量,或者需要进行语法验证,那么就要使用 <teiclass>元素。这个元素是可选的,用来制定TagExtraInfo子类的全 名。 l <bodycontent>元素是一个可选元素,它的三个可能值为: empty , JSP或tagdependent。 l <info>元素是可选的,用来描述行为的目的。
public int doEndTag() throws JspException { System.out.println("标签处理结束!"); return EVAL_PAGE; } };
2. 编写TLD文件的代码:
• <?xml version="1.0" encoding="UTF-8"?>
l tag元素还必须为行为的每个属性设置<attribute>元素。当然每个 元素中也包含了描述属性的另外一些元素:<name>,<required>和 <rtexprvalue>
•
12.
(1)
语法验证
最简单的语法验证是:
当JSP容器将一个JSP页面转化成Servlet时,它会将自定义行为元素和TLD中 行为元素的规范进行比较。这样就可以验证语法上的错误。 (2) 某些语法验证就要复杂许多了。如:一些属性依赖于其他属性是否 出现。有些属性是排他的,如果使用了这个就不能使用那个。某个可选的属 性必须和其它的可选属性一起使用。为了验证这些依赖性,JSP容器必须向 标记处理程序的TagExtraInfo子类寻求支持。
• • • • • • • • • • • •
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>h1</shortname> <uri>/struts/tags-logic-1.0.2</uri> <tag> <name>hh1</name> <tagclass>test1.H1</tagclass> <bodycontent>JSP</bodycontent> </tag> </taglib>