??xml version="1.0" encoding="utf-8" standalone="yes"?>
J2EE1.4
新特性之JSP 2.0的新Ҏ?
作者:务实工作?/span>
发文旉Q?span lang="EN-US">2003.10.27
SUN
的新?span lang="EN-US">J2EE1.4提供了在J2EE中开?span lang="EN-US">Web Service的基Q对开发工具做了一些重要的增强Q在应用E序部v和服务器理斚w也提供了新的标准Q在集成性和安全性方面有所增强Q提升了J2EE 开?span lang="EN-US">Web应用E序的能力;在编E模型方面的重要变化包括JSP表达式语a、简化的标记库等Q?span lang="EN-US">EJB 2.1中提供了新的timer服务Q查询语aQ?span lang="EN-US">QLQ也有所增强Q?span lang="EN-US">Jdbc3.0 API把通常?span lang="EN-US">Jdbc API与扩?span lang="EN-US">APIl合hQ?span lang="EN-US">J2EE Connectors规范和独立于消息cd?span lang="EN-US">EJB提供了对双向通信的支持。下面给大家重点介绍J2EE1.4中包含的JSP2.0?span lang="EN-US"> Servlet2.4?span lang="EN-US">Jdbc3.0以及EJB2.1斚w的新Ҏ?
<%@ page isELIgnored
Q?span lang="EN-US">"true|false"%>
${2000 % 20}
?b>isELIgnoredQ?span lang="EN-US">"true"时输Zؓ${2000 % 20}Q?b>isELIgnoredQ?span lang="EN-US">"false"时输Zؓ100?span lang="EN-US">Web容器默认isELIgnoredQ?span lang="EN-US">"false"?span lang="EN-US">
package ICW.taglib;
<%@ taglib prefix="ictag"
uri="/WEB-INF/ics-jsp2.tld" %>
Reminder:
<%@ taglib prefix="ictag"
tagdir="/WEB-INF/tags" %>
Tasks
Name:${name}
Date:${date}
Name:${name}
Plan:
Sun Microsystems ?1997
q下半年推出?Servlet APIQ将它定位ؓ CGI 开发h员用的一U功能强大的工具Q这些开发h员正在寻找比
CGIQ通用|关接口Q编E更高效和轻便的优秀解决Ҏ。但是,开发h员很快就发现 Servlet API
有其自n的缺点,从代码的可维护性和可扩展性方面来看,该解x案难以实施。在某种E度上,q种~点促团队开发一U允许在 HTML 中嵌?
Java 代码的解x??JavaServer Pages (JSP) 因此而出现?/p>
不久以后Q开发h员意识到表达与商务逻辑混合在一L复杂 JSP 不易于理解和维护。不能编?
scriplet 的页面制作h员所面的另一个问题是׃标准标记集而带来的 JSP 限制。这些限制得难点变成利?JSP
实施自定义标记的机制来创?JSP 自定义标记? JSP 标准标记?(JSTL) 是自定义标记库的集合Q它许?JSP 应用E序通用的核心功能封装ؓ单的标记。它不再需要?JSP scriptlet 表达式语a的灵感来自于 ECMAScript ?XPath 表达式语aQ它提供了在 JSP
中简化表辑ּ的方法。它是一U简单的语言Q基于可用的命名I间QPageContext
属性)、嵌套属性和寚w合、操作符Q算术型、关pd和逻辑型)的访问符、映到 Java cM静态方法的可扩展函C及一l隐式对象?br /> look and feel: http://www.javootoo.com/ This table lists the ASCII characters and their decimal, octal and
hexadecimal numbers. Characters which appear as names in parentheses (e.g., Host元素代表一个虚拟主机,虚拟L服务器的网l名Q比如www.mycompany.comQ和q行Catalinade的某个特定服务器联系h。ؓ了生效,|络名称必须在管理你所在的Internet域的DNS服务器进行登?--误pM的网l管理员?/P>
在许多情况下Q系l管理员可能希望为同一个虚拟主机或应用兌多个|络名称Q比如www.mycompany.com和company.comQ。这可以利用下面讨论的Host Name Alias特征来完成?/P>
在Engine元素中可以嵌套一个或多个Host元素。在Host元素中可以嵌套context元素。在与每个Engine相关联的所有Host中,必须有一个Host的名UCEngine的defaultHost属性匹配?/P>
以下的描qC用变?/I>$CATALINA_HOME来指Tomcat 5安装的目录。大多数的相对\径都是以该目录ؓ基准。但是,通过讄CATALINA_BASE目录Q可以运行多个Tomcat 5实例Q这时你应该使用$CATALINA_BASE来作为目录基准,而不是?CATALINA_HOME?/EM> 所有Host的实现必L持如下属性: 虚拟L的Applicaton Base目录。这是在该虚拟主Z发布web应用的目录\径。你可以指定l对路径Q或者用相对于 q个标志表示Q在Tomcatq行的时候,攑ֈappBase目录下的新的web应用是否自动发布。缺省ؓtrue。这斚w的更多信息参考应用自动发?/P> 实现的Javacd。该cdd现org.apache.catalina.Host接口。如果没有指定,使用标准实现Q在下面定义Q?/P> q个标志表明q个host的web应用是否由host configurator 自动发布。缺省ؓtrue。这斚w的更多信息参考自动应用发布?/P> 虚拟L的网l名Uͼ也就是在DNS服务器上注册的名U。嵌套在Engine的所有Host中,必须有一个Host的名字与Engine的defaultHost属性相同。如果想为同一个虚拟主机指定多个网l名Uͼ参考主机名别名?/P>
Host的标准实现是org.apache.catalina.core.StandardHost。它q支持如下的附加属?/P>
与Engine相关联的Logger的调试信息的详细E度。数字越大,输出详l。如果没有指定,~省gؓ0?/P> 如果不想使用Context XML配置文g来发布web应用Q设为false。同时也失去了利用manager应用E序安装web应用或者?war”文件的能力Q这些web应用?war文g不在Host的配|基准目?CODE>$CATALINA_HOME/conf/[engine_name]/[host_name]下面Q?/P>
web应用使用catalina的安全许可发布,如果需要让不可信的用户理web应用Q这个值可以设为false。缺省ؓtrue?/P> Host使用的错误报告valve的Javacd。这个valve的责L输出错误报告。设|这个值可以定制Tomcat产生的错误页面的格式。这个类必须实现org.apache.catalina.Valve接口。如果没有指定,使用~省?/P>
og.apache.catalina.valvees.ErrorReportValve. 如果希望位于appBase目录下的WAR文g解压~成对应的目录结构,设ؓtrue。如果希望直接从WAR文gq行web应用Q设为false。更多信息参考应用自动发布?/P> Host的web应用使用的时目录的路径。每个应用都有自q子目录,用于临时的读写。如果在Context中设|了workDir属性,它将会覆盖Host的workDir属性。如Servlet Specification中所qͼ通过servlet context的属性javax.servlet.context.tempdirQ这个目录可以被servlet使用。如果没有指定,使用 可以在Host元素中嵌套一个或者多个Context元素Q每个Context元素代表q个虚拟L下的一个不同的web应用。同Ӟ你可以嵌套一个DefaultContext元素Q用来定义后l发布的web应用的缺省?/P>
可以在Host元素中选择嵌套一个DefaultContext元素Q用来定义自动发布的web应用的缺省特性?/P>
下列元素可以嵌套在Host元素中,但至多只能嵌套一个实例: 正常情况下,q行web服务器会生成讉K日志。访问日志以标准格式为每个请求输Z行信息。Catalina包含一个可选的Valve实现Q可以用标准格式生成日志,q可以用Q意定制的格式?/P>
通过在EngineQHost或者Context中嵌套一个Valve元素QCatalina会ؓ该容器处理的所有请求创问日志,如下所C: 如果使用标准的Host实现Q当CatalinaW一ơ启动时Q如果deployOnStartup属性ؓtrueQtomcat会自动采取如下的步骤Q?/P>
除了启动时候的自动发布以外Q在Tomcatq行的时候,当新的XML 配置文gQWAR文g或者子目录Q包含新的web应用Q放到appBase目录下,或者当XML配置文g攑ֈ 在许多服务器环境中,多个|络名称可能指向同一个IP地址Q比如,www.mycompany.com和company.com都指?92.168.1.1Q。正常情况下Q每个网l名U应该在conf/server.xml中对应一个Host元素Q每个Host元素有自q一套web应用?/P>
但是Q有些情况下Q可能希望两个或者更多网l名U解析到同一个虚拟主ZQ运行相同的一套web应用。这U情늚典型用途是公司|站。用户可以用www.mycompany.com和company.com讉K同样的内容和应用?/P>
通过在Host元素中嵌套一个或者多个Alias元素Q可以完成上q功能?/P>
Z使这个策略生效,所有的|络名称必须在DNS服务器登讎ͼ指向q行Catalina实例的同一台计机?/P>
如果一个Java对象需要知道Context什么时候启动,什么时候停止,可以在这个对象中嵌套一个Listener元素。该Listener元素必须实现了org.apache.catalina.LifecycleListener接口Q在发生对应的生命期事g的时候,通知该Listener。可以按照如下的格式配置q样的ListenerQ?/P>
如果想知道过滤器支持的更多选项的信息,参考Remote Address Filter和Remote Host Filter 在许多环境尤其是门户环境下,对特定虚拟主Z的一套web应用Q只希望对用戯行一ơ认证。这可以在Host元素中嵌套如下的元素完成Q?/P>
单次dҎ如下规则q作Q?/P>
许多web服务器会自动以"~"和用户名开始的URI映射到用户主目录下的某个目录Q通常为public_htmlQ。在Catalina中,通过使用Ҏ的Listener元素Q可以完成上q功?/P>
在利?etc/password来标识有效用LUnixpȝ下用如下配|: 在不使用/etc/password的服务器上,可以要求Catalina指定的基准目录下的所有目录(比如c:\homesQ看成是用户ȝ录: 如果某个名ؓcraigmcc的用Lȝ录已l设|好Q通过使用如下URLQ可以浏览它的内容: 使用q个特征需要注意如下几个问题:
java.sql.Timestamp a = new java.sql.Timestamp(System.currentTimeMillis());
2:
java.util.Date a = new java.util.Date();
3:
java.util.Date a;
a.setTime(System.currentTimeMillis());
]]>
一?span lang="EN-US">JSP 2.0的新Ҏ?/span>
JSP 2.0
属于J2EE 1.4q_Q它?span lang="EN-US">JSP 1.2基础之上增加了新的功能。它保证了向下兼容,原先使用?span lang="EN-US">JSP技术在JSP 2.0中都可以支持?span lang="EN-US">JSP 2.0的新功能主要包括下面几部分:
(一)q行环境变化
1?span lang="EN-US">web.xml格式变化
我们知道JSP 1.2可以?span lang="EN-US">Java 2标准?span lang="EN-US">1.3版本q行Q?span lang="EN-US">JSP 2.0要求使用Java
2标准?span lang="EN-US">1.4或更新版本,JSP 2.0使用?span lang="EN-US">Servlet 2.4规定?span lang="EN-US">WebE序部v描述格式?span lang="EN-US">
?span lang="EN-US">WebE序描述文gweb.xml中需要?span lang="EN-US">xml schema打头的格式。在web.xml中主要的变化是所有有?span lang="EN-US">JSP的设|信息要攑֜标记中。下面程序例1昄了一?span lang="EN-US">web.xml大致的样子?span lang="EN-US">
?span lang="EN-US">1Q?span lang="EN-US">
.......
http://www.icconcept.com/ics/sample-taglib
/WEB-INF/jsp/sample-taglib.tld
........
For config the ICW sample
application
JSPConfiguration
/jsp/datareset.jsp
true<
Q?span lang="EN-US">el-ignored>
ISO-8859-1
true
/jsp/prelude.jspf
/jsp/coda.jspf
2
?span lang="EN-US">JSP讄
在标记提供了WebE序?span lang="EN-US">JSPE序的设|信息。包括和两类元素。定义了WebE序使用?span lang="EN-US">custom tagQ它的用法和以前JSP 1.2中的用法相同。定义了一l?span lang="EN-US">JSP的特性。这些特性实际上对应JSP?span lang="EN-US">page directive定义的特性。通过只不q可以方便地对多个具有相同属性的JSPl一定义?span lang="EN-US">
定义一个或多个URL样式Q在中定义的属性会适用于匹配这?span lang="EN-US">URL样式的所?span lang="EN-US">JSP文g。在中的属性可以定义以下设|:
(1)允许或禁止用表辑ּ语言(EL)
在中可以讑֮是否允许对应?span lang="EN-US">JSP使用JSTL表达式语a(EL)。如果属性标记被讑֮?span lang="EN-US">falseQ?span lang="EN-US">JSP中的EL表达式会被处理;如果?span lang="EN-US">trueQ?span lang="EN-US">Web容器会在转换JSP时忽?span lang="EN-US">EL表达式?span lang="EN-US">
(2)允许或禁止?span lang="EN-US">scripting
属性可以允许或止使用JSP的脚本语a(scripting)。如果这个属性标记对应ؓ trueQ即scripting元素被禁止,?span lang="EN-US">JSP中不能?span lang="EN-US">scriptletQ?span lang="EN-US">scripting表达式和declarationQ否则会有{换错 误。当q个属性标CؓfalseӞJSP可以像在1.2版本之前那样使用脚本语言?span lang="EN-US">
(3)声明JSP~码
通过标记可以讄对应?span lang="EN-US">JSP|页的编码。这个属性对应每?span lang="EN-US">JSP中的pageEncoding属性,Web容器根据这个属性对JSP内容q行~码?span lang="EN-US">
(4)对应隐含包括(Implicit Includes)
在中可以在对?span lang="EN-US">JSP中加入抬?span lang="EN-US">(preludes)和结?span lang="EN-US">(coda)Q用和属性可以设定在JSP|页中包括的preludes?span lang="EN-US">coda?span lang="EN-US">jspf文g。这些文件的位置相对于当?span lang="EN-US">WebE序?span lang="EN-US">context。当有超q一?span lang="EN-US">preludes?span lang="EN-US">coda元素在中ӞJSP会按照其序加入到内容中?span lang="EN-US">
(?span lang="EN-US">)引入表达式语a(EL)
JSP 2.0的一个主要特Ҏ它支持表达语a(expression language)?span lang="EN-US">JSTL表达式语a可以使用标记格式方便地访?span lang="EN-US">JSP的隐含对象和JavaBeanslgQ?span lang="EN-US">JSTL的核心标记提供了程和@环控?功能。自制标C有自定义函数的功能,因此基本上所?span lang="EN-US">seriptlet能实现的功能都可以由JSP替代。在JSP 2.0中,量使用EL而JSP的格式更一致?span lang="EN-US">
?span lang="EN-US">web.xml的中可以控制一l?span lang="EN-US">JSP是否使用ELQ在每个JSP中也可以指定是否?span lang="EN-US">JSP使用EL。在page directive中的isELIgnored属性用来指定是否忽略。格式ؓQ?span lang="EN-US">
如果讑֮为真Q那?span lang="EN-US">JSP中的表达式被当成字符串处理。比如下面这个表辑ּ
虽然JSP 2.0可以?span lang="EN-US">JSP中完全用表达语a而避?span lang="EN-US">scriptletQ在实际~程中,应该ҎE序的功能要求和~程人员的自w条仉择合适的方式。用表达语 a?span lang="EN-US">JSP比较方便规整Q但是由于需要将标记q行转换Q在W一ơ被调用时会比较慢;有些~程人员׃?span lang="EN-US">Java比较了解Q因而更习惯JSP 1.2之前的编E方式,因此Q在使用中应因地制宜地选择适用的编E方法?span lang="EN-US">
(?span lang="EN-US">)SimpleTag
JSP 2.0中加入了新的创徏自制标记?span lang="EN-US">APIQ?span lang="EN-US">javax.servlet.jsp.tagext.SimpleTag定义了用来实现简单标记的接口。和 JSP 1.2中的已有接口不同的是Q?span lang="EN-US">SimpleTag接口不?span lang="EN-US">doStartTag()?span lang="EN-US">doEndTag()ҎQ而提供了一个简单的doTag()?法。这个方法在调用该标记时只被使用一ơ。而需要在一个自制标C实现的所有逻辑q程、@环和ҎC的评估等都在q个Ҏ中实现。从q个斚w来讲Q?span lang="EN-US"> SimpleTag?span lang="EN-US">IterationTag可以辑ֈ同等的作用。但SimpleTag的方法和处理周期要简单得多。在SimpleTag中还有用来设
|?span lang="EN-US">JSP内容?span lang="EN-US">seUspBody()?span lang="EN-US">getJspBody()Ҏ?span lang="EN-US">Web容器会?span lang="EN-US">setJspBody()Ҏ定义一个代?span lang="EN-US">JSP内容?span lang="EN-US"> JspFragment对象。实?span lang="EN-US">SimpleTag标记的程序可以在doTagҎ中根据需要多ơ调?span lang="EN-US">getJspBody().invoke()Ҏ
以处?span lang="EN-US">JSP内容?span lang="EN-US">
例如Q程序例2 SimpleTagҎ指定的次?span lang="EN-US">(times)q行循环q输出当前序?span lang="EN-US">(sequence)。程序的l构比较单,所有逻辑都在doTagҎ中实现?span lang="EN-US">
?span lang="EN-US">2Q?span lang="EN-US">
import
javax.servlet.jsp.JspException;
import
javax.servlet.jsp.tagext.SimpleTagSupport;
import java.util.HashMap;
import java.io.IOException;
public class IterationSimpleTag
extends SimpleTagSupport{
private int times;
public void setTimes(int_times){
this.times=_times;
}
public void doTag() throws
JspException,IOException{
HashMap params=new HashMap();
for(int i=0; i
q个标记?span lang="EN-US">TLD文g内容如下Q它使用?span lang="EN-US">XML schcma定义标记的用方法?span lang="EN-US">
E序?span lang="EN-US">3如下Q?span lang="EN-US">
1.0
Jwad book simple tag
/JwadSimpleTag
Simple Tag Handler
iteration
ICW.taglib.IterationSimpleTag
scriptless
Iteration Tag
Current iterationnumber
sequence
times
true
true
E序?span lang="EN-US">4中的JSP使用上面?span lang="EN-US">3中定义的IterationSimpleTagQ它ҎWebh参数中给定的“times?/span>的D行一定次数的循环。在每次循环中将输出"sequence"的倹{?span lang="EN-US">
?span lang="EN-US">4Q?span lang="EN-US">
Interation Simple Tag
This is the ${sequence} Of ${times}
times of reminder
(
?span lang="EN-US">)使用JSP
fragment
JSP 2.0
中的一个主要功能是JSP fragmentQ它的基本特Ҏ可以使处?span lang="EN-US">JSP的容器推q评?span lang="EN-US">JSP标记属性。我们知道一?span lang="EN-US">JSP是首先评?span lang="EN-US">JSP标记的属性,然后在处?span lang="EN-US">JSP标记 时用这些属性,?span lang="EN-US">JSP fragment提供了动态的属性。也是_q些属性在JSP处理其标C时是可以被改变的?span lang="EN-US">JSP需要将q样的属性定义ؓ javax.servlet.jsp.tagext.JspFragmentcd。当JSP标记讄成这UŞ式时Q这U标记属性实际上的处理方法类g?
C。在实现标记的程序中Q标记属性可以被反复评估多次。这U用法称?span lang="EN-US">JSP fragment?span lang="EN-US">JSP fragmentq可以定义在一?span lang="EN-US">SimpleTag处理E序中用的自制标记动作。像前面例子说明的,getJspBodyq回一?span lang="EN-US"> JspFragment对象q可以在doTagҎ中多ơ用。需要注意的是,使用JSP fragment?span lang="EN-US">JSP只能有一般的文本?span lang="EN-US">JSP actionQ不能有scriptlet?span lang="EN-US">scriptlet表达式?span lang="EN-US">
我们可以单地认ؓJSP fragment是一D可以重复用的JSP。一D?span lang="EN-US">JSP fragment可以被传递到另一?span lang="EN-US">JSP中ƈ被用。与JSP include概念不同的是Q?span lang="EN-US">JSP fragment一般功能比较短简单而且重复使用率高?span lang="EN-US">
JSP fragment一般在标记体内或标C内定义。每ơ当含有JSP fragment的标记被使用ӞWeb容器生成一?span lang="EN-US">JspFragment对象Q这个对象和当前JSP?span lang="EN-US">page scope联系h。同Ӟq个JspFragment对象和包含它的父标记建立联系?span lang="EN-US">JspFragment对象可以有两U调用方式:使用Java~写 的标记处理程序,或者用标记文?span lang="EN-US">(tag file)。标记文件可以用,或者动作?span lang="EN-US">JSP fragment?span lang="EN-US"> JSP标记文g可以?span lang="EN-US">JSP fragment共同工作?span lang="EN-US">CustomTag都是以编E方式实现的?span lang="EN-US">JSP标记文g是用文本文g格式(JSP语法)实现自制标记Q这也是JSP 2.0的一个主要新功能。一个标记文件可以对应一个标讎ͼ可以不需tld文g定义该标记的Ҏ。这P即ɾ~程人员不熟?span lang="EN-US">JavaQ也可以使用JSP语法 定义自己的标记。标记文件一般?span lang="EN-US">.tag为后~q放?span lang="EN-US">WebE序?span lang="EN-US">/WEB-INF目录下?span lang="EN-US">
E序?span lang="EN-US">5中的taskstatus.jsp使用了两?span lang="EN-US">JSP fragment。这?span lang="EN-US">JSP的功能是昄一l?span lang="EN-US">Task的名U和完成日期Q它通过定义了两D?span lang="EN-US">JSPfragment(名称?span lang="EN-US">onSehedule?span lang="EN-US">delayed)。在标记内的JSP是JSPfragmentQ而标记被一个包围。这个标记是一个通过标记文g定义的自制标讎ͼ它的定义文g?span lang="EN-US">/WEB-INF/tags目录下。标记文件的名称和标记名UC致ؓ“listTasks.tag"。这个标C使用到前面定义的两个JSP fragment?span lang="EN-US">
?span lang="EN-US">5:
JSP Fragment Sample
Using Tag Files
${pianDate}
Actural:${actDate}
(
?span lang="EN-US">)其他Ҏ?/span>
JSP2.0
q有一些其他特性变化,比如严格修正?span lang="EN-US">I18N的语法规则,改进JSP对应XML语法从而允怋?span lang="EN-US">namespaces{。这些ƈ不是核心功能Q大家可以参?span lang="EN-US">java.sun.com的有兌料了解功能的l节Q这里就不再阐述?/span>
]]>
和表辑ּQ而用表辑ּ的更高语法。它q实C通用目的的功能,如P代和条g化、数据管理格式化、XML
操作、数据库讉K、国际化和对本地化信息敏感的格式化标C?SQL 标记。JSTL 1.0 推出?EL 的概念,但只限于 JSTL 标记。在
JSP 2.0 中,您可以用带模板文本?ELQ甚臛_以通过 javax.servlet.jsp.el 获得~程方式的访问?br />
在我们了?JSTL 如何适应环境以及?JSTL 表达式语a相关的限制以后,我们来看 JSP 2.0 的重要优点之一 ?JSP 表达式语a (EL)。我们将特别涉及C下内容:
JSP 表达式语a定义
在无脚本?JSP 面中支?EL 的机?/a>
表达式语a语法
JSP EL 中有效的表达?/a>
使用 EL 表达?/a>
JSP 表达式语a定义
EL 提供了在 JSP 脚本~制元素范围外用运行时表达式的功能。脚本编制元素是指页面中能够用于?JSP 文g中嵌?Java 代码的元素。它们通常用于对象操作以及执行那些影响所生成内容的计。JSP 2.0 ?EL 表达式添加ؓ一U脚本编制元素?br />
脚本~制元素h三个从属形式Q?
]]>
</action>
redirect="true"造成错误
Cannot find bean blacktags in any scope
]]>
{到要在web.xml加入taglib
<taglib>
<taglib-uri>/WEB-INF/tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/tiles.tld</taglib-location>
</taglib>
始终会报?br>后来把头部改?br><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
......
</web-app>
l于可以加taglib?但原来的filter又报?最后把filter和filter-mapping攑֜最前面,l于ok.
]]>
java开源: http://www.open-open.com/
]]>(etx) 3 0003 0x03 | # 35 0043 0x23 | C 67 0103 0x43 | c 99 0143 0x63
(eot) 4 0004 0x04 | $ 36 0044 0x24 | D 68 0104 0x44 | d 100 0144 0x64
(enq) 5 0005 0x05 | % 37 0045 0x25 | E 69 0105 0x45 | e 101 0145 0x65
(ack) 6 0006 0x06 | & 38 0046 0x26 | F 70 0106 0x46 | f 102 0146 0x66
(bel) 7 0007 0x07 | ' 39 0047 0x27 | G 71 0107 0x47 | g 103 0147 0x67
(bs) 8 0010 0x08 | ( 40 0050 0x28 | H 72 0110 0x48 | h 104 0150 0x68
(ht) 9 0011 0x09 | ) 41 0051 0x29 | I 73 0111 0x49 | i 105 0151 0x69
(nl) 10 0012 0x0a | * 42 0052 0x2a | J 74 0112 0x4a | j 106 0152 0x6a
(vt) 11 0013 0x0b | + 43 0053 0x2b | K 75 0113 0x4b | k 107 0153 0x6b
(np) 12 0014 0x0c | , 44 0054 0x2c | L 76 0114 0x4c | l 108 0154 0x6c
(cr) 13 0015 0x0d | - 45 0055 0x2d | M 77 0115 0x4d | m 109 0155 0x6d
(so) 14 0016 0x0e | . 46 0056 0x2e | N 78 0116 0x4e | n 110 0156 0x6e
(si) 15 0017 0x0f | / 47 0057 0x2f | O 79 0117 0x4f | o 111 0157 0x6f
(dle) 16 0020 0x10 | 0 48 0060 0x30 | P 80 0120 0x50 | p 112 0160 0x70
(dc1) 17 0021 0x11 | 1 49 0061 0x31 | Q 81 0121 0x51 | q 113 0161 0x71
(dc2) 18 0022 0x12 | 2 50 0062 0x32 | R 82 0122 0x52 | r 114 0162 0x72
(dc3) 19 0023 0x13 | 3 51 0063 0x33 | S 83 0123 0x53 | s 115 0163 0x73
(dc4) 20 0024 0x14 | 4 52 0064 0x34 | T 84 0124 0x54 | t 116 0164 0x74
(nak) 21 0025 0x15 | 5 53 0065 0x35 | U 85 0125 0x55 | u 117 0165 0x75
(syn) 22 0026 0x16 | 6 54 0066 0x36 | V 86 0126 0x56 | v 118 0166 0x76
(etb) 23 0027 0x17 | 7 55 0067 0x37 | W 87 0127 0x57 | w 119 0167 0x77
(can) 24 0030 0x18 | 8 56 0070 0x38 | X 88 0130 0x58 | x 120 0170 0x78
(em) 25 0031 0x19 | 9 57 0071 0x39 | Y 89 0131 0x59 | y 121 0171 0x79
(sub) 26 0032 0x1a | : 58 0072 0x3a | Z 90 0132 0x5a | z 122 0172 0x7a
(esc) 27 0033 0x1b | ; 59 0073 0x3b | [ 91 0133 0x5b | { 123 0173 0x7b
(fs) 28 0034 0x1c | < 60 0074 0x3c | \ 92 0134 0x5c | | 124 0174 0x7c
(gs) 29 0035 0x1d | = 61 0075 0x3d | ] 93 0135 0x5d | } 125 0175 0x7d
(rs) 30 0036 0x1e | > 62 0076 0x3e | ^ 94 0136 0x5e | ~ 126 0176 0x7e
(us) 31 0037 0x1f | ? 63 0077 0x3f | _ 95 0137 0x5f | (del) 127 0177 0x7fASCII Name Description C Escape Sequence nul null byte \0 bel bell character \a bs backspace \b ht horizontal tab \t np formfeed \f nl newline \n cr carriage return \r vt vertical tab esc escape sp space
]]>
q是建外键的列与要关联的列类型不匚w造成的?br>一个表用powerdesigner导入的整型长度ؓ11
另一个直接再mysql中徏立的表默认整型长度是10
造成不能建立外键
]]>
Tomcat服务器配|参?/H1>
Host容器
概述
属?/STRONG>
公共属?/STRONG>
属?/FONT>
描述
appBase
$CATALINA_HOME
的\径。有关web应用的自动识别和发布的更多信息,请参考应用自动发布?/P>
autoDeploy
backgroundProcessorDelay
q个
g表在该host及其子容器(包括所有的wrappersQ上调用backgroundProcessҎ的gӞ以秒为单位。如果g时值非负,子容器不会被调用Q这意味着子容器用自q处理U程。如果该gؓ正,会创Z个新的线E。在{待指定的时间以后,该线E在Host及其子容器上调用backgroundProcessҎ。Host使用后台处理q行与web应用实时发布有关的操作。如果没有指定,~省值是Q?Q说明host依赖其所属的Engine的后台处理?/P>
className
deployOnStartup
name
标准实现
属?/FONT>
描述
debug
deployXML
errorReportValveClass
unpackWARs
workDir
$CATALINA_HOME/work
下面的合适的目录?/P>
嵌套lg
专有特征
讉K日志
参考Access Log ValveQ以获得更多配置属性的信息Q?/BLOCKQUOTE>
<Host name="localhost" ...>
...
<Valve className="org.apache.catalina.valves.AccessLogValve"
prefix="localhost_access_log." suffix=".txt"
pattern="common"/>
...
</Host>
应用自动发布
$CATALINA_HOME/conf/[engine_name]/[host_name]
目录中的MXML文g都包含一个Context元素Q以及它的相关的子元素)Q通常情况下,q个<Context>的docBase属性指向一个web应用目录的绝对\径,或者是WAR文g的绝对\径?
$CATALINA_HOME/conf/[engine_name]/[host_name]目录
Q的时候,该web应用被自动发布。auto deployer也负责跟tweb应用的如下变化:
L名别?/STRONG>
<Host name="www.mycompany.com" ...>
...
<Alias>mycompany.com</Alias>
...
</Host>
生命期Listeners
注意Q一个listener可以hL多的附加属性。属性名与JavaBean的属性名相对应,使用标准的属性命名方法?BR>
<Host name="localhost" ...>
...
<Listener className="com.mycompany.mypackage.MyListener" ... >
...
</Host>
hqo?/STRONG>
Ҏ个发送到EngineQHost或者Context的请求,可以要求Catalina查IP地址或主机名U。Catalina使用一pd配置好的“接受”或者“拒l”过滤器对客L的地址或者主机名q行查,qo器是按照正则表达式语法定义的Q由Jakarta Regexp正则表达式库支持。不被接受的h会返回一个HTTP“Forbidden”错误。下面是qo器的定义?
<Host name="localhost" ...>
...
<Valve className="org.apache.catalina.valves.RemoteHostValve"
allow="*.mycompany.com,www.yourcompany.com"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="192.168.1.*"/>
...
</Host>
单次dQSingle Sign OnQ?/FONT>
<Host name="localhost" ...>
...
<Valve className="org.apache.catalina.authenticator.SingleSignOn"
debug="0"/>
...
</Host>
用户Web应用
<Host name="localhost" ...>
...
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html"
userClass="org.apache.catalina.startup.PasswdUserDatabase"/>
...
</Host>
<Host name="localhost" ...>
...
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html"
homeBase=c:\Homes"
userClass="org.apache.catalina.startup.HomesUserDatabase"/>
...
</Host>
http://www.mycompany.com:8080/~craigmcc
]]>
if ("request".equals(mapping.getScope())) {
request.setAttribute(mapping.getAttribute(), articleForm);
} else {
session.setAttribute(mapping.getAttribute(), articleForm);
}
上面的代码把Form攑օRequestq返回给客户?BR>
在界面显C的jsp中有如下声明
<html:form action="/articleEdit" name="articleForm" type="com.xianeizhu.struts.form.ArticleForm" scope="request">
....
<html:text property="title" />
昄该Form的title属?BR>
scope="request"如果漏掉Q会造成数据昄为空