??xml version="1.0" encoding="utf-8" standalone="yes"?>h色视频在线观看,国产一区二区三区免费不卡,久久久久久久久久久久久9999http://www.aygfsteel.com/bnlovebn/category/12154.html《周易》曰Q?lt;br> 天行健,君子以自Z?乑֍)<br> 地势坤,君子以厚徯?坤卦) zh-cnTue, 14 Jun 2011 19:06:56 GMTTue, 14 Jun 2011 19:06:56 GMT60APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending taskshttp://www.aygfsteel.com/bnlovebn/archive/2011/06/12/352125.html重归本垒QBingQ?/dc:creator>重归本垒QBingQ?/author>Sun, 12 Jun 2011 05:51:00 GMThttp://www.aygfsteel.com/bnlovebn/archive/2011/06/12/352125.htmlhttp://www.aygfsteel.com/bnlovebn/comments/352125.htmlhttp://www.aygfsteel.com/bnlovebn/archive/2011/06/12/352125.html#Feedback0http://www.aygfsteel.com/bnlovebn/comments/commentRss/352125.htmlhttp://www.aygfsteel.com/bnlovebn/services/trackbacks/352125.html最qorcale数据只有一台可以服务,Dhibernate q接数据库每?3分钟׃?#8220;APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks”的错?
原因?hibernate 使用c3p0q接orcale数据后不会释?Q?c3p0的最大连接数?00Q但昄c3p0有BugQ导致数据库q接池不够用Q导致进E锁歅R?br />后换Proxool后,观察正常?br />
下面转引其它|友文章说明c3p0 ?Proxool?dbcp  的区?
1<!-- JDBC驱动E序 -->   
2<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</property> <!-- 数据库用户名 -->   
3<property name="connection.username">root</property> <!-- 数据库密?nbsp;-->

上面的一D配|,?span class="hilite2" style="background-color: #ffffff">c3p0?span class="hilite1" style="background-color: #ffffff">dbcp中,都是必需的,因ؓhibernate会根据上q的配置来生成connectionsQ再交给c3p0?span class="hilite1" style="background-color: #ffffff">dbcp理.

1 C3P0

只需在hibernate.cfg.xml中加?
1<property name="c3p0.min_size">5</property>   
2<property name="c3p0.max_size">30</property>   
3<property name="c3p0.time_out">1800</property>   
4<property name="c3p0.max_statement">50</property>   
5

q有在classespath中加?span class="hilite2" style="background-color: #ffffff">c3p0-0.8.4.5.jar


2 dbcp

在hibernate.cfg.xml中加?
 1<property name="dbcp.maxActive">100</property>   
 2<property name="dbcp.whenExhaustedAction">1</property>   
 3<property name="dbcp.maxWait">60000</property>   
 4<property name="dbcp.maxIdle">10</property>   
 5   
 6<property name="dbcp.ps.maxActive">100</property>   
 7<property name="dbcp.ps.whenExhaustedAction">1</property>   
 8<property name="dbcp.ps.maxWait">60000</property>   
 9<property name="dbcp.ps.maxIdle">10</property>  
10

q有在classespath中加入commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar.

3 proxool

׃数据库connection在较长时间没有访问下会自动断开q接Q导致浏览出错,增加proxool作ؓ数据库pool。它有自动连接功能?br />1)、从http://proxool.sourceforge...下蝲proxoolQ释放proxool.jar到WEB-INF/lib

2)、在hibernate.cfg.xml中增加:
1<property name="hibernate.proxool.pool_alias">dbpool</property>   
2<property name="hibernate.proxool.xml">proxool.xml</property>   
3<property name="connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>  
4

3)、在与hibernate.cfg.xml同目录Qsrc根目录下Q增加proxool.xml文gQ?br />
 1<?xml version="1.0" encoding="utf-8"?>   
 2<!-- the proxool configuration can be embedded within your own application's.    
 3 Anything outside the "proxool" tag is ignored. -->   
 4<something-else-entirely>   
 5 <proxool>   
 6   <alias>dbpool</alias>   
 7   <!--proxool只能理p׃生的q接-->   
 8   <driver-url>   
 9     jdbc:mysql://127.0.0.1:3306/wlsh?characterEncoding=GBK&useUnicode=true&autoReconnect=true     </driver-url>   
10   <driver-class>com.mysql.jdbc.Driver</driver-class>   
11   <driver-properties>   
12       <property name="user" value="root" />   
13       <property name="password" value="123456" />   
14   </driver-properties>   
15   <!-- proxool自动侦察各个q接状态的旉间隔(毫秒),侦察到空闲的q接马上回?时的销?/span>-->   
16   <house-keeping-sleep-time>90000</house-keeping-sleep-time>   
17   <!-- 最保持的I闲q接?/span>-->   
18   <prototype-count>5</prototype-count>   
19   <!-- 允许最大连接数,过了这个连接,再有hӞ排在队列中{候,最大的{待h数由maximum-new-connections军_-->   
20   <maximum-connection-count>100</maximum-connection-count>   
21   <!-- 最连接数-->   
22   <minimum-connection-count>10</minimum-connection-count>   
23 </proxool>   
24</something-else-entirely>  
25

于在hibernate3.0中,已经不再支持dbcp了,hibernate的作者在hibernate.org中,明确指出在实践中发现dbcp?BUG,在某些种情会产生很多I接不能释放,所以抛弃了对dbcp的支持。至于c3p0Q有评论说它的算法不是最优的Q因为网上查资料得知Q有|友做了一个实验,在同一目中分别用了几个常用的q接池,然后试其性能Q发现c3p0占用资源比较大,效率也不高。所以,Z上述原因Qproxool不少行家推荐使用Q而且暂时来说Q是负面评h(hun)是最的一个。在三星中也有项目是用proxool的。从性能和出错率来说QproxoolE微比前两种好些。C3P0Q稳定性似乎不错,在这斚wg有很好的口碑。至于性能Q应该不是最好的Q算是中规中矩的cd?
  Proxool的口似乎很好,不大见到负面的评P从官方资料上来看Q有许多有用的特性和特点Q也是许多h推荐的?br />

]]>
error:java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSourcehttp://www.aygfsteel.com/bnlovebn/archive/2007/09/12/144500.html重归本垒QBingQ?/dc:creator>重归本垒QBingQ?/author>Wed, 12 Sep 2007 07:16:00 GMThttp://www.aygfsteel.com/bnlovebn/archive/2007/09/12/144500.htmlhttp://www.aygfsteel.com/bnlovebn/comments/144500.htmlhttp://www.aygfsteel.com/bnlovebn/archive/2007/09/12/144500.html#Feedback1http://www.aygfsteel.com/bnlovebn/comments/commentRss/144500.htmlhttp://www.aygfsteel.com/bnlovebn/services/trackbacks/144500.htmljava.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource
很显然这是一个没有找到对应的cL件的异常?br /> q有两个包commons-pool.jar和commons-dbcp-1.2.1.jar需要引入到工程中?/span>


]]>
在你的struts应用中施展部分AJAX法(译)[转]http://www.aygfsteel.com/bnlovebn/archive/2007/07/31/133607.html重归本垒QBingQ?/dc:creator>重归本垒QBingQ?/author>Tue, 31 Jul 2007 08:33:00 GMThttp://www.aygfsteel.com/bnlovebn/archive/2007/07/31/133607.htmlhttp://www.aygfsteel.com/bnlovebn/comments/133607.htmlhttp://www.aygfsteel.com/bnlovebn/archive/2007/07/31/133607.html#Feedback1http://www.aygfsteel.com/bnlovebn/comments/commentRss/133607.htmlhttp://www.aygfsteel.com/bnlovebn/services/trackbacks/133607.html        本文介l在JSP面中包含一些JavaScriptq样一个简单而有效的Ҏ(gu)来结合AJAX和Struts。在此我们介l如何重C用已l存在的Struts actionsQ但此技术同样可用于你选择的其他Java-Web 框架。本Ҏ(gu)同样可^UdStruts或者JSF的下一个版本?

        AJAX?#8220;异步的JavaScript和XML”的羃写。这是一Ҏ(gu)术,而不是一个如Struts一L(fng)框架。ؓ什么在AJAX周围会有q么多的x?q是因ؓAJAX使web面看v来ƈ不像一个^面的文档Q而更像用h期望的如桌面应用的动态GUI应用E序。AJAX技术能在很多的览器上使用(包括IE和Netscape/Mozilla)。它已经为Microsoft(用于Outlook的web客户?和Google(用户Google Maps和Gmail)所使用?

  未用AJAX之前

  目前大多数的Struts应用都是标准?#8220;如同一个^面文档的web面”的结构。如果你x仿一些桌面应用程?比如那些使用Java SwingQVisual BasicQ或者Delphi建立的应用程?Q那么你有两个选择:你可以发送所有的可能作ؓ面的一部分被请求的信息Q用大量的JavaScript来操作其动态的昄(一个很慢ƈ且非企业UJava的方?;或者你可以不改变Ş式地提交到后台服务器(一U有效的Ҏ(gu)) 。AJAX提高l你了融合前面的最佌x?动态的面Q但是大多数的应用是在你的web服务器的JavaE序来处理的?/p>

  AJAX 101

  AJAX和现有的动态HTML技术非常相|q在其上增加了一个发送到“后台”服务器的h来获取需要的新的或者更新的信息。AJAX的机制在其他地方已经有详l的说明――请查看本文后的Resources来获取更多。但是你臛_需要知?

  •   1. XMLHttpRequest (如果你用的是IE览器的话,则是Microsoft.XMLHTTP的ActiveX的对?。这些对象,你可以在web面中用JavaScript调用。他们允怽作ؓ后台的调用方式来hweb服务器的内容(例如Q在表单提交后,屏幕q不像^时一hC?#8220;I白”)?
  •   2. XMLHttpRequest 和Microsoft.XMLHTTP q回的内容可以作为XML或者文本来处理。JavaScript(在你面上的)可以使用h的新内容来更新页面?
  •   3. 整个处理q程可以由普通的JavaScript事g来触?onclickQonchangeQonblurQ等?/li>

  在你的Struts应用中用AJAX

  你阅M本文Q然后你会对使用AJAX来创建动态的web面感兴,q且想知道如何将它加入到你的Struts应用中。这只是选择之一。那么你会如何选择?

  •   · {待Q知道Struts的下一个版本融合了AJAX技术。如果Struts开发者准备开发一个新的应用,q或怼是一个好的选择。再后面Q可能会是要求JSF也这样做――对其本wƈ不一件坏事,但是对于已经存在的系l这会带来最Ҏ(gu)的改变?
  •   · 你也可以直接采用新的Ҏ(gu)Q比如Direct Web Remoting (DWR) 和Ruby on RailsQ这些都是专为徏立AJAX应用的。如果你考虑不用Struts来开发web的话Q那么这些都是很又用的框Ӟq且值得一试。但是,q也同时意味着你必要重写你的应用?
  •   · 在你已经存在的Struts应用中增加AJAX。既然AJAX只是一Ҏ(gu)术而ƈ非框Ӟ那么它就很容易融入到Struts中。作为现有的pȝQ其E_?如,保持现有的库文g)是相当重要的。所以这个方法被推荐Qƈ且我们将在后面详l介l?/li>

  我们选择在Struts应用中增加AJAX的优势是:

  •   1. 它ƈ不需要Q何新的库文g或者服务器代码;只需要用现有的Struts库文件和action?
  •   2. 解决Ҏ(gu)中所有部分――JavaScriptQXMLQJava和Struts――早已ؓq泛所知?
  •   3. 此应用可以一块一块地UL到AJAX;我们可以定哪些部分对用h益,q先将它们更新到动态AJAX昄?/li>

  实现Ҏ(gu)

  我们如何真正的诏L们的选择?我们首先应该注意一?#8220;标准?#8221;(没有AJAX)Struts应用是如何工作的。在此应用中Q一个一般的事g程如下:

  •   1. 使用点击链接或者表单的提交按钮Q用户发送请求?
  •   2. web服务器运行处理请求的Struts Action来生成一个web面?
  •   3. 览器显Cweb面?
  •   4. 当用L(fng)M存的时候,信息由Struts框架中一个ActionFormcL转换q发送到服务器?
  •   5. 然后QStruts框架调用Struts Action来出来请?如,保存数据到数据库??
  •   6. 面再一ơ回传,处理程l箋?/li>

  现有的Struts应用

  一个演CZ件流E的单Struts应用可以在以下地址下蝲: struts-non-ajax.zip。此ZStruts的应用,是基于用L(fng)输入昄或者隐藏蓝色和l色的表根{图1昄了蝲入初始页面的画面。图2昄了用戯入值ƈ点击了提交后的画面。虽然简单,但它已经以表示一个Struts的工作流E?/p>

  ?1. 没有AJAX的例?初始屏幕

  ?2. 没有AJAX的例?输入值ƈ点击了提?/p> 服务器端的代码是:一个Struts Action使用struts-config.xml 中定义的D{发到(相同?JSP。这个例子代码中一些需要注意的地方?

  •   ·struts-config.xml文g所有的h重定向到http://localhost:8080/struts-non-ajax/(或者和你自q服务器相?的index.jsp?
  •   · index.jsp 包含了一个两个文本框的Struts form(showBlue和showGreen)。该面同样包含了标{,但是如同两个文本框被初始化ؓI,标签之间的内容ƈ不显C?
  •   · 用户输入?true或者f(xi)alse)q点L交按钮,处理控制(l过Struts框架Q读取struts-config.xml)提交到SampleActioncM?
  •   ·SampleAction记录下|然后转发到index.jsp。一个成熟的Struts应用可能会处理更多的事情Q不如保存或者查询数据库{?
  •   · index.jsp 现在重新处理h;如果ShowBlue或者ShowGreen的值是trueQ这些表格就昄出来?/li>

  该应用ƈ没有M“错误”。类似的Struts目好多q都是这样做的。但是,我们如何在不d复杂的JavaScript或者频J的表单提交的前提下Qؓ此应用增加动态的元素?

  我们的第一个Struts AJAX应用

  观察下下面的?和图4。第一眼看上去Q它们和前面的例子没有说明区别。它们的不同之处在于Q页面蝲入后(?)然后文本框中的值改变了Q窗体自动提交而不昄I白的,然后在图4中显C结果。普通的提交按钮仍然在,你也可以选择使用它?/p>

  ?3. 面载入后的AJAX例子

  ?4. AJAX调用后的AJAX例子

  dAJAX是出奇的Ҏ(gu)。服务器端的代码和前面的例子是一L(fng): 一个Struts的ActionForm来后L据,一个Struts的Action来执行需要的d(例如Q存储数据库)然后转发到适当的JSP面来显C结果?/p>

  l箋

  如果你希望就此停止阅?跌q个例子的工作说?Q但是这里的是和你需要{换你的Struts应用C个Struts-AJAX应用同样的风?

  •   1. 在你的web面中引入一个Ajax.js (该文件是struts-ajax.zip 例文件中的一部分)。Ajax.js 包含了所有需要发送和接收AJAX调用的JavaScriptҎ(gu)?
  •   2. 保你希望在AJAX调用中更新的web面的部分包含在标签中,q且l每个标{一个id?
  •   3. 当一些事件触发的时候就更新面(例如Q文本框的the onchange()Ҏ(gu))Q调用retrieveURL()Ҏ(gu)Q通过URL传递到需要执行服务器端处理的Struts Action?
  •   4. Z面的显C?更新Q最单的Ҏ(gu)是Struts Action转发回同L(fng)面。在本例中,showGreen/showBlue 文本框中的onchange()Ҏ(gu)来触发AJAX调用?/li>

  JavaScriptҎ(gu)retrieveURL()调用服务器的Struts(通过URL)Q获取JSP响应Q然后更新显C页面中?标签中的部分。就是这么简?

  AJAX解决Ҏ(gu)的细?/p>

  我们例子变为AJAX-Struts应用的时候,需要三个变?

  •   1. 增加一个JavaScriptҎ(gu)来完成到服务器的“背后?#8221;AJAX调用?
  •   2. 增加JavaScript代码来接收服务器的响应ƈ更新面?
  •   3. 在JSP面增加标签标签Q这个标{中内容在AJAX调用中更新?/li>

  我们详l的说明上面的每一步?/p> 发送AJAXh到服务器

  有两个方?在下面列?用于发送请求到服务器?/p>

  · retrieveURL()Ҏ(gu)获得服务器的URL和Struts form。URL用于使用AJAXQform的值用于传递到服务器?/p>

  · getFormAsString()Ҏ(gu)用于retrieveURL()中form命名的值组装成查询字符Ԍq发送到服务器?/p>

  使用Ҏ(gu)很简单,使用onclick()/onChange()事g来触发retrieveURL()更新昄?/p>

  在这两个Ҏ(gu)中有一些有的东西?/p>

  在retrieveURL()Ҏ(gu)中,req.onreadystatechange = processStateChange (注意Q没有括?q一行来告诉览器在服务器响应到辄时候调用processStateChange()Ҏ(gu)(该方法将在后面介l?。retrieveURL()Ҏ(gu)?现在已经是AJAX的标准了)同样军_是用IE览?ActiveX)q是使用Netscape/Mozilla (XmlHttpRequest) 来实现跨览器兼宏V?/p>

  getFormAsString()Ҏ(gu)HTML form转换成字W串q接在URL后面(q样允许我们发送HTTP GETh)。这个字W串是经q{换的(比如Q空D{换成%20{?Qƈ且是一个Struts能将其组装成ActionForm的格?q不需要Struts清楚的明白这个是来之AJAX的请?。注意,在本例中我们使用HTTP GETQ用HTTP POST的方法也是类似的?/p>

function retrieveURL(url,nameOfFormToPost) {

//url转换成字W串
url=url+getFormAsString(nameOfFormToPost);

//调用AJAX
if (window.XMLHttpRequest) {

// 非IE览?br>req = new XMLHttpRequest();
req.onreadystatechange = processStateChange;
try {
req.open("GET", url, true);
} catch (e) {
alert("Server Communication Problem\n"+e);
}
req.send(null);
} else if (window.ActiveXObject) {
// IE

req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange=processStateChange;
req.open("GET", url, true);
req.send();
}
}
}

getFormAsString() 是一?#8220;U有” Ҏ(gu)Q在retrieveURL()中用?/p>

function getFormAsString(formName){

//讄q回字符?br>returnString ="";

//取得表单的?br>formElements=document.forms[formName].elements;

//循环数组Q组装url
//?/strutsaction.do&name=value'q样的格?/p>

for(var i=formElements.length-1;i>=0; --i ){
//转化每一个?br>returnString+="&"
+escape(formElements[i].name)+"="
+escape(formElements[i].value);
}

//q回字符?br>return returnString;
}

Ҏ(gu)AJAX的响应更新web面

  到现在ؓ止,我们学习q了使用JavaScript来完成AJAX调用(前面列出)QStruts ActionQActionForm以及JSP(基本没有变化Q只是增加了标签)。ؓ了完善我们对Struts-AJAX目的了解,我们需要了解三个用于根据服务器q回的结果而更新页面的JavaScriptҎ(gu)?/p>

  •   · processStateChange(): 该方法在AJAX调用前设定。它在服务器响应到达后由XMLHttpRequest/Microsoft.XMLHTTP 对象调用?
  •   ·splitTextIntoSpan(): Ҏ(gu)响应Q@环取出数l中的元素组装成NewContent?
  •   ·replaceExistingWithNewHtml(): Ҏ(gu)span元素数组Q@环搜索,里面的元素调换掉页面中和它?someName'相同的中的内宏V注意,我们使用的是req.responseText Ҏ(gu)来获得返回的内容(它允许我们操作Q何文本的响应)。与此相对于的是req.responseXml (它的作用更大Q但是要求服务器q回是XHTML或者XML)?/li>

function processStateChange() {

if (req.readyState == 4) { // 完成
if (req.status == 200) { // 响应正常

//响应的文本分割成Span元素
spanElements =
splitTextIntoSpan(req.responseText);

//使用q些Span元素更新面
replaceExistingWithNewHtml(spanElements);

} else {
alert("Problem with server response:\n "
+ req.statusText);
}
}
}
replaceExistingWithNewHtml() 是ؓprocessStateChange()使用?#8220;U有”Ҏ(gu)?/p>

function replaceExistingWithNewHtml
(newTextElements){

//循环newTextElements
for(var i=newTextElements.length-1;i>=0;--i){

//判断是否?if(newTextElements[i].
indexOf("-1){

//获得span的名? 讄在第一和第二个引号之间
//认span元素是以下的格式
//NewContent
startNamePos=newTextElements[i].
indexOf('"')+1;
endNamePos=newTextElements[i].
indexOf('"',startNamePos);
name=newTextElements[i].
substring(startNamePos,endNamePos);

//获得内容Q在W一?gt;标记后的所有内?br>startContentPos=newTextElements[i].
indexOf('>')+1;
content=newTextElements[i].
substring(startContentPos);

//现在更新现有的Document中的元素Q?
// 保文档存在该元?br>if(document.getElementById(name)){
document.getElementById(name).
innerHTML = content;
}
}
}
splitTextIntoSpan() 是ؓprocessStateChange() 使用?#8220;U有”Ҏ(gu)?br>function splitTextIntoSpan(textToSplit){

//分割文档
returnElements=textToSplit.
split("")

//处理每个元素
for(var i=returnElements.length-1;i>=0;--i){

//删除掉第一个span后面的元?br>spanPos = returnElements[i].
indexOf("

//如果扑ֈ匚w的,获得span前的内容
if(spanPos>0){
subString=returnElements[i].
substring(spanPos);
returnElements[i]=subString;
}
}
return returnElements;
}

  新的控制?/p>

  d以下的JavaScript代码到我们的应用中,以下的步骤将在服务器和浏览器中执行?/p>

  •   1. 如同一个普通Struts应用装蝲面?
  •   2. 用户改变文本框的|触发一个onChange() 事gQ调用retrieveURL() Ҏ(gu)?
  •   3. 该JavaScriptҎ(gu)通过发送Struts明白的表单变?后台)h到服务器的Struts Action?
  •   4. 该JavaScriptҎ(gu)同样讑֮了第二个JavaScriptҎ(gu)的名字,此方法将到服务器响应完毕后调用。本例子中,讑֮为processStateChange() Ҏ(gu)?
  •   5. 如我们所预期的,服务器响应完毕,调用processStateChange() Ҏ(gu)?
  •   6. JavaScript?新的)服务器响应中循环取出所有元素。将面上存在与获得元素名字相同?中的元素替换掉?/li>

  在你的应用中设计AJAX

  以上描述的JavaScriptҎ(gu)能在大多数的应用中用,包括比我们的例子复杂得多的。但是,在用之前,你需要注意以下几?

  · 避免复制代码Q最好在初始化请?如,昄完整的页?和AJAX(更新部分面)h中用相同的Struts Action和JSP?/p>

  ·在公qAction(控制?中,军_JSP面(所有的JSP面或者其中的一部分)中的一个区域需要传送到览器。通过在web服务器的session或者ActionForm中设定标记来让JSP面知道哪些部分需要提交?/p>

  · 在JSP中,使用Struts 或者JSTL标签来决定提交的HTML区域?/p>

  使用AJAX的本例子Q可以在以下下蝲: struts-Ajax.zip

  l语

  AJAX技术允许我们在创徏和用web应用的时候完全的改变。本文介l了一个简单的技术,在现有的Struts应用中增加Struts的处理。它允许我们利用我们已有的东西,不仅仅是代码Q还包括了开发的技能。作Z个好的品,它同样允许我们写出更清晰Q更L(fng)植性的Java Struts应用?/p>

版权声明QTechtarget获Matrix授权发布,如需转蝲误pMatrix
作?作?Paul Browne;pawenwen(作者的blog:http://blog.matrix.org.cn/page/pawenwen)
译文:点击



]]>
在Servlet与JSP中取得当前文件所在的相对路径与绝对\径(路径相关Q?/title><link>http://www.aygfsteel.com/bnlovebn/archive/2007/07/27/132741.html</link><dc:creator>重归本垒QBingQ?/dc:creator><author>重归本垒QBingQ?/author><pubDate>Fri, 27 Jul 2007 04:23:00 GMT</pubDate><guid>http://www.aygfsteel.com/bnlovebn/archive/2007/07/27/132741.html</guid><wfw:comment>http://www.aygfsteel.com/bnlovebn/comments/132741.html</wfw:comment><comments>http://www.aygfsteel.com/bnlovebn/archive/2007/07/27/132741.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/bnlovebn/comments/commentRss/132741.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/bnlovebn/services/trackbacks/132741.html</trackback:ping><description><![CDATA[<p> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">根目录所对应的绝对\?</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> request.getServletPath() </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">); <br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>String strPathFile </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> request.getSession().getServletContext().getRealPath(request.getRequestURI()); <br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">文g的绝对\?</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> strPathFile </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">); <br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>String strDirPath </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> File(request.getSession().getServletContext().getRealPath(request.getRequestURI())).getParent(); <br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">目录的绝对\?</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> strDirPath </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">); <br>    this.getServlet().getServletContext().getRealPath("/");//在struts的action中取得当前系l的根目?br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top><br> 举例Q?a href="http://localhost:7001/myservlet/somepath/test?someparam=somevalue">http://localhost:7001/myservlet/somepath/test?someparam=somevalue</a><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>request.getPathInfo()Q返?/span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">somepath</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">test<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>request.getRequestURL()Q返回http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">localhost:7001/myservlet/somepath/test</span><span style="COLOR: #008000"><br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">request.getRequestURI()Q返?/span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">myservlet</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">somepath</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">test<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>request.getServletPath()Q返?/span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">myservlet<br><img src="http://www.aygfsteel.com/Images/OutliningIndicators/None.gif" align=top>request.getQueryString()Q返回someparam</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">somevalue<br>    request.getContextPath();  q回目?u><font color=#0000ff>/myservlet</font></u></span></div> <img src ="http://www.aygfsteel.com/bnlovebn/aggbug/132741.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bnlovebn/" target="_blank">重归本垒QBingQ?/a> 2007-07-27 12:23 <a href="http://www.aygfsteel.com/bnlovebn/archive/2007/07/27/132741.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts+FCKeditor修改d的html文本http://www.aygfsteel.com/bnlovebn/archive/2007/07/25/132216.html重归本垒QBingQ?/dc:creator>重归本垒QBingQ?/author>Wed, 25 Jul 2007 02:06:00 GMThttp://www.aygfsteel.com/bnlovebn/archive/2007/07/25/132216.htmlhttp://www.aygfsteel.com/bnlovebn/comments/132216.htmlhttp://www.aygfsteel.com/bnlovebn/archive/2007/07/25/132216.html#Feedback0http://www.aygfsteel.com/bnlovebn/comments/commentRss/132216.htmlhttp://www.aygfsteel.com/bnlovebn/services/trackbacks/132216.html<bean:write 默认的filter是true。表C把html敏感标签转换成{换成它们实体的等L(fng)。如<转换?amp;lt。设为false则不转换?/span>
         <FCK:editor id="classContent" basePath="/ECR_WWW/FCKeditor/"
         width
="500"
         height
="500"
         skinPath
="/ECR_WWW/FCKeditor/editor/skins/silver/"
         
>
         
         
<bean:write name="articleAdminForm" property="classContent" filter="false"/>
        
</FCK:editor>


]]>
FCKeditor2.4 JSP版用[转] http://www.aygfsteel.com/bnlovebn/archive/2007/07/24/132119.html重归本垒QBingQ?/dc:creator>重归本垒QBingQ?/author>Tue, 24 Jul 2007 09:58:00 GMThttp://www.aygfsteel.com/bnlovebn/archive/2007/07/24/132119.htmlhttp://www.aygfsteel.com/bnlovebn/comments/132119.htmlhttp://www.aygfsteel.com/bnlovebn/archive/2007/07/24/132119.html#Feedback1http://www.aygfsteel.com/bnlovebn/comments/commentRss/132119.htmlhttp://www.aygfsteel.com/bnlovebn/services/trackbacks/132119.html1.下蝲
FCKeditor2.3 (FCKeditot for java)
FCKeditor2.4 (FCKeditor基本文g)
以下是下载地址Q?br>http://www.fckeditor.net/download/default.html

2.建立目:
建立目tomcat/webapps/TestFCKeditor.

3.FCKeditor2.4解压~?br>FCKeditor2.4解压~?整个目录FCKeditor复制到项目的根目录下Qƈ解压羃出来的文件夹fckeditor重命名ؓFCKeditor
目录l构为:tomcat/webapps/TestFCKeditor/FCKeditor
然后FCKeditor-2.3.zipQjavaQ压~包中\web\WEB-INF\lib\目录下的两个jar文g拷到目的\WEB-INF\ lib\目录下。把其中的src目录下的FCKeditor.tld文gcopy到TestFCKedit/WEB-INF/?/p>

4.合ƈweb.xml:
FCKeditor-2.3.zip压羃包中\web\WEB-INF\目录下的web.xml文g合ƈ到项目的\WEB-INF\目录下的web.xml文g中?/p>


5. 修改合ƈ后的web.xml文g
修改合ƈ后的web.xml文gQ将名ؓSimpleUploader的Servlet的enabled参数值改为trueQ?br>以允怸传功能,Connector Servlet的baseDir参数值用于设|上传文件存攄位置?br>在web.xml最后添加标{֮?

<taglib>
    <taglib-uri>/TestFCKeditor</taglib-uri>
    <taglib-location>/WEB-INF/FCKeditor.tld</taglib-location>
 </taglib>

现在的web.xml文g没有<taglib>标签了,应该直接在jsp文g中用:<%@ taglib uri="

 

6. 映射:
上面文g中两个servlet的映分别ؓQ?editor/filemanager/browser/default/connectors/jsp/connector
?editor/filemanager/upload/simpleuploaderQ需要在两个映射前面加上/FCKeditorQ?br>x?FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector?br>/FCKeditor/editor/filemanager/upload/simpleuploader?br>q两个名字根据你攑֜工程中的FCKeditor文g夹名U而定。?/p>


7.修改skin文g?br>q入skin文g夹,如果你想使用fckeditor默认的这U奶黄色Q?br>那就把除了default文g夹外的另两个文g夹直接删?Q徏议不删除Q以后要用到其中的一个文件夹Q?/p>

8.删除无用文g
删除/FCKeditor/目录下除fckconfig.js, fckeditor.js, fckstyles.xml, fcktemplates.xml四个文g以外的所有文Ӟ保留文g夹editor
删除目录/editor/_source,
删除/editor/filemanager/browser/default/connectors/下的所有文?br>删除/editor/filemanager/upload/下的所有文?br>删除/editor/lang/下的除了fcklanguagemanager.jsQ我下蝲的没有这个文Ӟ, en.js, zh.js, zh-cn.js四个文g的所有文?/p>

9.修改配置Q?br>打开/FCKeditor/fckconfig.js
修改 FCKConfig.DefaultLanguage = 'zh-cn' ;
把FCKConfig.LinkBrowserURL{的值替换成以下内容Q?br>FCKConfig.LinkBrowserURL
= FCKConfig.BasePath + "filemanager/browser/default/browser.html?Connector=connectors/jsp/connector" ;

FCKConfig.ImageBrowserURL
= FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector" ;

FCKConfig.FlashBrowserURL
= FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector" ;

FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=File' ;
FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Flash' ;
FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/upload/simpleuploader?Type=Image' ;

10.其它
fckconfig.js总配|文Ӟ可用记录本打开Q修改后文件存为utf-8 ~码格式。找刎ͼ

FCKConfig.TabSpaces = 0 ; 改ؓFCKConfig.TabSpaces = 1 ; 卛_~辑器域内可以用Tab键?/p>

如果你的~辑器还用在|站前台的话Q比如说用于留言本或是日记回复时Q那׃得不考虑安全了,
在前台千万不要用Default的toolbarQ要么自定义一下功能,要么qpȝ已经定义好的BasicQ?br>也就是基本的toolbarQ找刎ͼ
FCKConfig.ToolbarSets["Basic"] = [
['Bold','Italic','-','OrderedList','UnorderedList','-',/*'Link',*/'Unlink','-','Style','FontSize','TextColor','BGColor','-',
'Smiley','SpecialChar','Replace','Preview'] ] ;
q是改过的BasicQ把囑փ功能LQ把d链接功能LQ因为图像和链接和flash和图像按钮添加功能都能让前台
늛接访问和上传文gQ?fckeditorq支持编辑域内的鼠标右键功能?/p>

FCKConfig.ContextMenu = ['Generic',/*'Link',*/'Anchor',/*'Image',*/'Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField',
/*'ImageButton',*/'Button','BulletedList','NumberedList','TableCell','Table','Form'] ;

q也是改q的把鼠标右键的“链接、图像,FLASHQ图像按?#8221;功能都去掉?/p>

  扑ֈQ?FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;
加上几种我们常用的字?br>FCKConfig.FontNames
= '宋体;黑体;隶书;楷体_GB2312;Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;


11.d文g
d文g /TestFCKeditor/test.jsp:
<%@ page language="java" import="com.fredck.FCKeditor.*" %>
<%@ taglib uri="/TestFCKeditor" prefix="FCK" %>
<script type="text/javascript" src="/TestFCKeditor/FCKeditor/fckeditor.js"></script>

<%--
三种Ҏ(gu)调用FCKeditor
1.FCKeditor自定义标{?(必须加头文g <%@ taglib uri="/TestFCKeditor" prefix="FCK" %> )
2.script脚本语言调用 (必须引用 脚本文g <script type="text/javascript" src="/TestFCKeditor/FCKeditor/fckeditor.js"></script> )
3.FCKeditor API 调用 (必须加头文g <%@ page language="java" import="com.fredck.FCKeditor.*" %> )
--%>


//标签调用方式
<%--
<form action="show.jsp" method="post" target="_blank">
<FCK:editor id="content" basePath="/TestFCKeditor/FCKeditor/"
width="700"
height="500"
skinPath="/TestFCKeditor/FCKeditor/editor/skins/silver/"
toolbarSet = "Default"
>
input
</FCK:editor>
<input type="submit" value="Submit">
</form>
--%>


//JS调用方式
<form action="show.jsp" method="post" target="_blank">
<table border="0" width="700"><tr><td>
<textarea id="content" name="content" style="WIDTH: 100%; HEIGHT: 400px">input</textarea>
<script type="text/javascript">
var oFCKeditor = new FCKeditor('content') ;
oFCKeditor.BasePath = "/TestFCKeditor/FCKeditor/" ;
oFCKeditor.Height = 400;
oFCKeditor.ToolbarSet = "Default" ;
oFCKeditor.ReplaceTextarea();
</script>
<input type="submit" value="Submit">
</td></tr></table>
</form>


//FCKeditor API 调用
<%--
<form action="show.jsp" method="post" target="_blank">
<%
FCKeditor oFCKeditor ;
oFCKeditor = new FCKeditor( request, "content" ) ;
oFCKeditor.setBasePath( "/TestFCKeditor/FCKeditor/" ) ;
oFCKeditor.setValue( "input" );
out.println( oFCKeditor.create() ) ;
%>
<br>
<input type="submit" value="Submit">
</form>
--%>

d文g/TestFCKeditor/show.jsp:
<%
String content = request.getParameter("content");
out.print(content);
%>

 


12.试
http://localhost:8080/TestFCKeditor/test.jsp


最后注意。。不同的版本 变量名称可能不一栗请参考你使用的API文档

配置选项:

AutoDetectLanguage=true/false 自动语a
BaseHref="" 相对链接的基地址
ContentLangDirection="ltr/rtl" 默认文字方向
ContextMenu=字符串数l?右键菜单的内?br>CustomConfigurationsPath="" 自定义配|文件\径和名称
Debug=true/false 是否开启调试功?q样,当调用FCKDebug.Output()?会在调试H中输出内容
DefaultLanguage="" ~省语言
EditorAreaCss="" ~辑区的样式表文?br>EnableSourceXHTML=true/false 为TRUE?当由可视化界面切换到代码|,把HTML处理成XHTML
EnableXHTML=true/false 是否允许使用XHTML取代HTML
FillEmptyBlocks=true/false 使用q个功能,可以空的块U元素用I格来替?br>FontColors="" 讄昄颜色拑֏器时文字颜色列表
FontFormats="" 讄昄在文字格式列表中的命?br>FontNames="" 字体列表中的字体?br>FontSizes="" 字体大小中的字号列表
ForcePasteAsPlainText=true/false 强制_脓(chung)为纯文本
ForceSimpleAmpersand=true/false 是否不把&W号转换为XML实体
FormatIndentator="" 当在源码格式下羃q代码用的字符
FormatOutput=true/false 当输出内Ҏ(gu)是否自动格式化代?br>FormatSource=true/false 在切换到代码视图时是否自动格式化代码
FullPage=true/false 是否允许~辑整个HTML文g,q是仅允许编辑B(ti)ODY间的内容
GeckoUseSPAN=true/false 是否允许SPAN标记代替B,I,U标记
IeSpellDownloadUrl=""下蝲拼写查器的网址
ImageBrowser=true/false 是否允许览服务器功?br>ImageBrowserURL="" 览服务器时q行的URL
ImageBrowserWindowHeight="" 囑փ览器窗口高?br>ImageBrowserWindowWidth="" 囑փ览器窗口宽?br>LinkBrowser=true/false 是否允许在插入链接时览服务?br>LinkBrowserURL="" 插入链接时浏览服务器的URL
LinkBrowserWindowHeight=""链接目标览器窗口高?br>LinkBrowserWindowWidth=""链接目标览器窗口宽?br>Plugins=object 注册插g
PluginsPath="" 插g文g?br>ShowBorders=true/false 合ƈҎ(gu)
SkinPath="" 皮肤文g夹位|?br>SmileyColumns=12 囄H列?br>SmileyImages=字符数组 囄H中囄文g名数l?br>SmileyPath="" 囄文g夹\?br>SmileyWindowHeight 囄H口高度
SmileyWindowWidth 囄H口宽度
SpellChecker="ieSpell/Spellerpages" 讄拼写查器
StartupFocus=true/false 开启时FOCUS到编辑器
StylesXmlPath="" 讄定义CSS样式列表的XML文g的位|?br>TabSpaces=4 TAB键生的I格字符?br>ToolBarCanCollapse=true/false 是否允许展开/折叠工具?br>ToolbarSets=object 允许使用TOOLBAR集合
ToolbarStartExpanded=true/false 开启是TOOLBAR是否展开
UseBROnCarriageReturn=true/false 当回车时是生BR标记q是P或者DIV标记

解决上传q:
在SimpleUploaderServlet.java和ConnectorServlet.java两个文g里找?br>DiskFileUpload upload = new DiskFileUpload();
分别在其后加?upload.setHeaderEncoding("utf-8");
q样解决了文件上传的中文q问题.
但是在控制台昄的中文内容还是ؕ?但是没关p?我们没必要去看控制台下的中文

----------------------------------------------------------------another
FCKeditor2.4.2 Java版用说?br>下蝲地址以及基本配置请参考:http://hi.baidu.com/wain19/blog/item/c33fb0fab74f24dfb48f312d.html

我的开发环境是ubuntu7.04, pȝ默认~码是utf-8,
期间Q本人遇C下面q些问题Q?/p>

问题一QXML request error: Internel Server Error(500)

出现错误的地Ҏ(gu)在:Ҏ(gu)入图片,点Browse按钮的时候:
XML request error: Internel Server Error(500)

找资料:http://lamono.javaeye.com/blog/49135
拯xalan.jar和serialize.jar?WEB-INF/libQ问题解冟?/p>

FCKeditor-java没有很好的解决中文问题。需要我们修改它的源代码后重新编译打包。打包过E如下:
1?新徏一个web工程名字为FCKeditor-java-2.3Q然后把FCKeditor-2.3-java.zip解压~后的代码拷贝到工程目录下?br>2。如果是用的Eclipse,使用快捷键Ctrl+Shift+R
在SimpleUploaderServlet.java和ConnectorServlet.java两个文g里找?br>DiskFileUpload upload = new DiskFileUpload();
分别在其后加?upload.setHeaderEncoding("utf-8");
现在如果直接q行antdQ会报下面的错误Q?br>taskdef class org.apache.catalina.ant.DeployTask cannot be found

3?把tomcat安装目录?server/lib中的catalina-ant.jar拯?WEB-INF/lib目录 下?br>4?打开build.xml
扑ֈ
<property name="catalina.home"
修改成你自己的tomcat安装目录
<property name="catalina.home"         value="/home/uniquejava/tool/tomcat5028/"/>
扑ֈ
<taskdef name="deploy"
修改成如下内?br>     <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask">
        <classpath refid="compile.classpath">
        </classpath>
    </taskdef>
    <taskdef name="list" classname="org.apache.catalina.ant.ListTask">
        <classpath refid="compile.classpath">
        </classpath>
    </taskdef>
    <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask">
        <classpath refid="compile.classpath">
        </classpath>
    </taskdef>
    <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask">
        <classpath refid="compile.classpath">
        </classpath>
    </taskdef>

q行antddist, 可以生成新的FCKeditor-2.3.jar?/p>

问题三: 上传时新建的中文目录全部q?虽然上传到服务器上的文g名正常,但在JSP面点下载链接时文g名ؕ码导致不能正怸载?/p>

查找资料QTOMCAT 链接参数有中文时Qؕ码解x?br>    <Connector port="8080"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000"
               disableUploadTimeout="true" URIEncoding="utf-8" />
              
    <Connector port="8009"
               enableLookups="false" redirectPort="8443" debug="0"
               protocol="AJP/1.3" URIEncoding="utf-8" />
              
Ҏ(gu)?
使用useBodyEncodingForURI="true". q个Ҏ(gu)适合你的TOMCAT实例下需要跑多个不同Encoding的程序时。(有点怀疑?Q)
<... maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
       enableLookups="false" redirectPort="8443" acceptCount="100"
      connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true" />

     enableLookups="false" redirectPort="8443" protocol="AJP/1.3" useBodyEncodingForURI="true" /

我只试了Ҏ(gu)一Q问题解冻I

q样, FCKeditorl于可以正常使用了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。?br>=================================================================
以下Z人原?
http://blog.csdn.net/nickshen3/
怎么FCKeditor2.4使用在自qweb中?br>1. 在webapps创徏test文g夏Vwebapps\test
2. 下载的FCKeditor2.3的Java包FCKeditor-2.3.zip解压~,q将web文g夹下的两个文件夹_samplesQW(xu)EB-INF拯到刚才徏立的webapps\test下。再src文g夹下的FCKeditor.tld拯到WEB-INF下?br>3. 在webapps\test\下徏立文件夹FCKeditor ?br>4. 刚才下载的 FCKeditor_2.4.3.zip 解压~,然后fckeditor文g夹下?editorQ文件夹Q?fckconfig.js,fckeditor.js,fckstyles.xml,fcktemplates.xml。四个文件拷贝到刚才建立的文件夹FCKeditor下?br>5.修改test\_samples\jsp\sample02.jsp文gQ将原来?br>       <FCK:editor id="EditorDefault" basePath="/FCKeditor/"
改ؓ<FCK:editor id="EditorDefault" basePath="/test/FCKeditor/"。以后用的时候只需test换成目的名U即可?br>6.打开tomcat。测?a href="http://localhost:8080/test/_samples/jsp/sample02.jsp">Http://localhost:8080/test/_samples/jsp/sample02.jsp?br>ok?br>
另外 Q? http://www.aygfsteel.com/youxia/archive/2007/03/15/104077.html 



]]>
使用qo?Filter)对请求做l一的认证处?/title><link>http://www.aygfsteel.com/bnlovebn/archive/2007/07/04/128019.html</link><dc:creator>重归本垒QBingQ?/dc:creator><author>重归本垒QBingQ?/author><pubDate>Wed, 04 Jul 2007 01:31:00 GMT</pubDate><guid>http://www.aygfsteel.com/bnlovebn/archive/2007/07/04/128019.html</guid><wfw:comment>http://www.aygfsteel.com/bnlovebn/comments/128019.html</wfw:comment><comments>http://www.aygfsteel.com/bnlovebn/archive/2007/07/04/128019.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/bnlovebn/comments/commentRss/128019.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/bnlovebn/services/trackbacks/128019.html</trackback:ping><description><![CDATA[     摘要: Filter有要实现的三Ҏ(gu)Qvoid init(FilterConfig config) throws ServletExceptionvoid doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletExceptionvoid destroy...  <a href='http://www.aygfsteel.com/bnlovebn/archive/2007/07/04/128019.html'>阅读全文</a><img src ="http://www.aygfsteel.com/bnlovebn/aggbug/128019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bnlovebn/" target="_blank">重归本垒QBingQ?/a> 2007-07-04 09:31 <a href="http://www.aygfsteel.com/bnlovebn/archive/2007/07/04/128019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>动态WEB应用中的用户SESSION理Ҏ(gu)http://www.aygfsteel.com/bnlovebn/archive/2007/07/04/128006.html重归本垒QBingQ?/dc:creator>重归本垒QBingQ?/author>Wed, 04 Jul 2007 00:59:00 GMThttp://www.aygfsteel.com/bnlovebn/archive/2007/07/04/128006.htmlhttp://www.aygfsteel.com/bnlovebn/comments/128006.htmlhttp://www.aygfsteel.com/bnlovebn/archive/2007/07/04/128006.html#Feedback1http://www.aygfsteel.com/bnlovebn/comments/commentRss/128006.htmlhttp://www.aygfsteel.com/bnlovebn/services/trackbacks/128006.html要有q么一个监听器Q当加入session时就可以触发一个加入session事gQ在sessionq期时就可以触发一个删除事Ӟ那么我们的把要处理的东西加入到这两个事g中就可以做很多于SESSION相关q的事。如在线用户的管理,单点登陆{等?br>在J2EE中可以实现HttpSessionBindingListener接口Q此接口有两要实现的Ҏ(gu)?br> void valueBound(HttpSessionBindingEvent event) 当实现此接口的监听类和sessionl定时触发此事g?br>void valueUnbound(HttpSessionBindingEvent event) 当sessionq期或实现此接口的监听类卸裁时触发此事g?br>
下面是一个示例解x案:可以把登陆用L(fng)信息记录在缓冲池中,当SESSIONq期Ӟ用户信息自动删除?br>一个用户信息接口。一个用L(fng)冲池。一个HttpSessionBindingListener接口的监听类?br>

public interface LoginUserMessage {}

 

public class LoginUserPool {
    
private Map map = new HashMap();
    
private static LoginUserPool loginUserPool = new LoginUserPool();
    
private LoginUserPool(){}
    
public static LoginUserPool getInstance() {
        
return loginUserPool;
    }

    
public void addLoginUserMessage(String sessionId,LoginUserMessage loginUserMessage){
       map.remove(sessionId);
       map.put(sessionId,loginUserMessage);
    }

    
public LoginUserMessage removeLoginUserMessage(String sessionId){
        
return  (LoginUserMessage) map.remove(sessionId);
    }

    
public LoginUserMessage getLoginUserMessage(String sessionId){
        
return (LoginUserMessage) map.get(sessionId);
    }

    
public Map getLoginUserMessages(){
        
return map;
    }

    
public boolean isEmpty(){
        
return  map.isEmpty();
    }

}

 

public class UserLoginListener implements HttpSessionBindingListener{
    
private final Log logger = LogFactory.getLog(getClass());
    
private String sessionId = null;
    
private LoginUserMessage loginUserMessage = null;
    
private LoginUserPool loginUserPool = LoginUserPool.getInstance();

    
public LoginUserMessage getLoginUserMessage() {
        
return loginUserMessage;
    }

    
public void setLoginUserMessage(LoginUserMessage loginUserMessage) {
        
this.loginUserMessage = loginUserMessage;
    }

    
public String getSessionId() {
        
return sessionId;
    }

    
public void setSessionId(String sessionId) {
        
this.sessionId = sessionId;
    }

    
/* (non-Javadoc)
     * @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
     
*/

    
public void valueBound(HttpSessionBindingEvent event) {
        
// TODO Auto-generated method stub
        if(this.getLoginUserMessage() != null){
            loginUserPool.addLoginUserMessage(
this.getSessionId(),this.getLoginUserMessage());
            logger.info(
"用户信息加入~存池成?/span>");
        }

        
this.setLoginUserMessage(null);
    }


    
/* (non-Javadoc)
     * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
     
*/

    
public void valueUnbound(HttpSessionBindingEvent event) {
        
// TODO Auto-generated method stub
        if(!loginUserPool.isEmpty()){
            loginUserPool.removeLoginUserMessage(sessionId);
            logger.info(
"用户信息从缓存池中移除成?/span>");
        }

    }


}


q样子的话,当在应用中把userLoginListener加入到session中时Q就会自动把用户信息加入到缓冲池中了?br>如:
 session.setAttribute("userLoginListener",userLoginListener);



Q原创,转蝲请保留文章出?a id=Editor_Edit_hlEntryLink title="view: 动态WEB应用中的用户SESSION理Ҏ(gu)" href="http://www.aygfsteel.com/bnlovebn/archive/2007/07/04/128006.html" target=_blank>http://www.aygfsteel.com/bnlovebn/archive/2007/07/04/128006.htmlQ?br>



]]>
JSP文g下蝲的几U方?/title><link>http://www.aygfsteel.com/bnlovebn/archive/2007/02/12/99431.html</link><dc:creator>重归本垒QBingQ?/dc:creator><author>重归本垒QBingQ?/author><pubDate>Mon, 12 Feb 2007 05:41:00 GMT</pubDate><guid>http://www.aygfsteel.com/bnlovebn/archive/2007/02/12/99431.html</guid><wfw:comment>http://www.aygfsteel.com/bnlovebn/comments/99431.html</wfw:comment><comments>http://www.aygfsteel.com/bnlovebn/archive/2007/02/12/99431.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/bnlovebn/comments/commentRss/99431.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/bnlovebn/services/trackbacks/99431.html</trackback:ping><description><![CDATA[ <span id="Codehighlighter1_36_1003_Open_Text"> </span>Q。最直接最单的Q方式是把文件地址直接攑ֈhtml面的一个链接中。这样做的缺Ҏ(gu)把文件在服务器上的\径暴露了Qƈ且还无法Ҏ(gu)件下载进行其它的控制Q如权限Q。这个就不写CZ了?br />Q。在服务器端把文件{换成输出,写入到responseQ以response把文件带到浏览器Q由览器来提示用户是否愿意保存文g到本地。(CZ如下Q?br /><span id="Codehighlighter1_7_640_Open_Text"></span><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000"><%</span><span style="COLOR: #000000"><br /> response.setContentType(fileminitype);<br /> response.setHeader(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Location</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,filename);<br /> response.setHeader(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Cache-Control</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">max-age=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> cacheTime);<br /> response.setHeader(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Content-Disposition</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">attachment; filename=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> filename); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">filename应该是编码后?utf-8)</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000"> response.setContentLength(filelength);<br /> OutputStream outputStream </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> response.getOutputStream();<br /> InputStream inputStream </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FileInputStream(filepath);<br /> </span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[] buffer </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">];<br /> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /> </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> ((i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> inputStream.read(buffer)) </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) {<br />  outputStream.write(buffer, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, i);<br />  }<br /> outputStream.flush();<br /> outputStream.close();<br /> inputStream.close();<br /> outputStream </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /><br /></span><span style="COLOR: #000000">%></span></div><br />Q。既然是JSP的话Q还有一U方式就是用Applet来实现文件的下蝲。不q客户首先得信Q你的q个Applet程序,p个程序来接受由servlet发送来的数据流Qƈ写入到本地?br />servlet端示?br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> service(HttpServletRequest req, HttpServletResponse res)<br />            </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> ServletException, IOException {<br />        res.setContentType(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> text/plain </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        OutputStream outputStream </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> {<br />            outputStream </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> res.getOutputStream();<br />            popFile(srcFile, outputStream)) ;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">把文件\径ؓsrcFile的文件写入到outputStream中?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        } </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (IOException e) {<br />            e.printStackTrace();<br />        }<br />    } </span></div><br />JApplet端示?<br /><span id="Codehighlighter1_36_1002_Open_Text"></span><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">   URLConnection con;<br />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> {<br />            con </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> url.openConnection();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">url是被调用的SERVLET的网址 如http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">localhost:8080/sendDateSevlet.do  </span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">            con.setUseCaches(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br />            con.setDoInput(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br />            con.setDoOutput(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br />            con.setRequestProperty(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Content-Type</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br />                </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">application/octet-stream</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />            InputStream in </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> con.getInputStream();<br />            ProgressMonitorInputStream pmInputStream </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ProgressMonitorInputStream(<br />                    pane, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">正在从服务器下蝲文g内容</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, in);<br />            ProgressMonitor pMonitor </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> pmInputStream<br />                    .getProgressMonitor();<br />            pMonitor.setMillisToDecideToPopup(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">);<br />            pMonitor.setMillisToPopup(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">);<br />            String localfilepath </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> localstr </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> filename ;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">localfilepath本地路径,localstr文g文g夹,filename本地文g?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">     </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(saveFilsaveFilee(localfilepath,pmInputStream)){ </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Ҏ(gu)saveFilsaveFilee是把输入pmInputStream写到文glocalfilepath中。                   ?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">     openLocalFile(localfilepath);<br />            }</span></div><p><br /><span id="Codehighlighter1_36_955_Open_Text"></span><br />Q。顺便把JApplet上传文g的代码也贴上?<br />JApplet端示?</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">URLConnection con;<br />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> {<br />            con </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> url.openConnection();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">url是被调用的SERVLET的网址 如http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">localhost:8080/sendDateSevlet.do         </span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">     con.setUseCaches(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br />            con.setDoInput(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br />            con.setDoOutput(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br />            con.setRequestProperty(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Content-Type</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br />                </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">application/octet-stream</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />            <br />            OutputStream out </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> con.getOutputStream();<br />            String localfilepath </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> localstr </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> filename; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">localfilepath本地路径,localstr文g文g夹,filename本地文g?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">            getOutputStream(localfilepath,out);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">文ggetOutputStream是把文glocalfilepath写到输出out中?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">            InputStream in </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> con.getInputStream();<br />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br />        }</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (IOException e) {<br />               System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">文g上传出错Q?/span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />            e.printStackTrace();<br />        }<br /></span></div><br />servlet端代码示?br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> service(HttpServletRequest req, HttpServletResponse res)<br />            </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> ServletException, IOException {<br />        res.setContentType(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> text/plain </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        InputStream inputStream </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> {<br />            inputStream </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> res.getInputStream();<br />            writefile(srcFile, inputStream);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">把输入流inputStream保存到文件\径ؓsrcFile的文件中</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        } </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (IOException e) {<br />            e.printStackTrace();<br />        }<br />    } </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> end service<br /></span></div><br /> ȝQ在文g的传输中是流的Ş式存在的Q在盘上是文g的Ş式存在的。我们要做的只是通过HttpServletRequest和HttpServletResponseQ或者是response和request来发送流和读取流。以及把文g转换成流或把{换成文g的操作?img src ="http://www.aygfsteel.com/bnlovebn/aggbug/99431.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bnlovebn/" target="_blank">重归本垒QBingQ?/a> 2007-02-12 13:41 <a href="http://www.aygfsteel.com/bnlovebn/archive/2007/02/12/99431.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp文g上传的处?/title><link>http://www.aygfsteel.com/bnlovebn/archive/2007/01/22/95254.html</link><dc:creator>重归本垒QBingQ?/dc:creator><author>重归本垒QBingQ?/author><pubDate>Mon, 22 Jan 2007 03:42:00 GMT</pubDate><guid>http://www.aygfsteel.com/bnlovebn/archive/2007/01/22/95254.html</guid><wfw:comment>http://www.aygfsteel.com/bnlovebn/comments/95254.html</wfw:comment><comments>http://www.aygfsteel.com/bnlovebn/archive/2007/01/22/95254.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/bnlovebn/comments/commentRss/95254.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/bnlovebn/services/trackbacks/95254.html</trackback:ping><description><![CDATA[     摘要: jsp文g上传大多采用采用开源项目来化处理,q里列出常用的两个jar包的实现Qƈq行比较Q说明他们的优缺点和应该注意的问题? Commons FileUploadQ可以在http://jakarta.apache.org/commons/fileupload/下蝲Q这个包需要Commons IO的支持,可以在http://jakarta.apache.org/commo...  <a href='http://www.aygfsteel.com/bnlovebn/archive/2007/01/22/95254.html'>阅读全文</a><img src ="http://www.aygfsteel.com/bnlovebn/aggbug/95254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bnlovebn/" target="_blank">重归本垒QBingQ?/a> 2007-01-22 11:42 <a href="http://www.aygfsteel.com/bnlovebn/archive/2007/01/22/95254.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse中classpath和link配制ȝhttp://www.aygfsteel.com/bnlovebn/archive/2006/12/21/89295.html重归本垒QBingQ?/dc:creator>重归本垒QBingQ?/author>Thu, 21 Dec 2006 07:26:00 GMThttp://www.aygfsteel.com/bnlovebn/archive/2006/12/21/89295.htmlhttp://www.aygfsteel.com/bnlovebn/comments/89295.htmlhttp://www.aygfsteel.com/bnlovebn/archive/2006/12/21/89295.html#Feedback0http://www.aygfsteel.com/bnlovebn/comments/commentRss/89295.htmlhttp://www.aygfsteel.com/bnlovebn/services/trackbacks/89295.html
      在eclipse中可以非常方便的做到?br />
      在工E文件目录中点右键,打开“构\径”—?gt;“配制构\径”,可以进行相关的cdQ类文gQ配制文件的讄?br />
      在“库”中可以加入~译q行旉要的cdQ在“源代码”中可以link入编译运行需要的c,同时q要吧设|源文g的位|以及输Z|。在“项目”中可以加入q行时依赖的其它project。在“排序和导出”可以对讄好的cdQ类文gQ配制文件进行排序,可以讑֮哪些文g要导出到盘上?img src ="http://www.aygfsteel.com/bnlovebn/aggbug/89295.html" width = "1" height = "1" />

]]>
有关JSP/Servlet的重定向技术综q如?/title><link>http://www.aygfsteel.com/bnlovebn/archive/2006/12/14/87623.html</link><dc:creator>重归本垒QBingQ?/dc:creator><author>重归本垒QBingQ?/author><pubDate>Thu, 14 Dec 2006 01:44:00 GMT</pubDate><guid>http://www.aygfsteel.com/bnlovebn/archive/2006/12/14/87623.html</guid><wfw:comment>http://www.aygfsteel.com/bnlovebn/comments/87623.html</wfw:comment><comments>http://www.aygfsteel.com/bnlovebn/archive/2006/12/14/87623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/bnlovebn/comments/commentRss/87623.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/bnlovebn/services/trackbacks/87623.html</trackback:ping><description><![CDATA[1.RequestDispatcher.forward()<br />是在<font color="#ff0000">服务器端</font>起作?当用forward()?Servlet engine传递HTTPh从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文g,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在b.jsp都可以获?参数自动传?<br />但forward()无法重定向至有frame的jsp文g,可以重定向至有frame的html文g,同时forward()无法在后面带参数传?比如servlet?name=frank,q样不行,可以E序内通过response.setAttribute("name",name)来传至下一个页?<br /><br />  重定向后览器地址栏URL不变.<br /><br />?在servlet中进行重定向<br />public void doPost(HttpServletRequest request,HttpServletResponse response)<br />throws ServletException,IOException<br />{<br /><br />    response.setContentType("text/html; charset=gb2312");<br /><br />    ServletContext sc = getServletContext();<br /><br />    RequestDispatcher rd = null;<br /><br />    rd = sc.getRequestDispatcher("/index.jsp");   //定向的页?br /><br />    rd.forward(request, response);<br /><br />}<br />通常在servlet中用,不在jsp中用?br /><br />2.response.sendRedirect()<br />  是在用户?font color="#ff0000">览器端</font>工作,sendRedirect()可以带参C?比如servlet?name=frank传至下个面,同时它可以重定向至不同的L?sendRedirect()可以重定向有frame.的jsp文g.<br />  重定向后在浏览器地址栏上会出现重定向面的URL? <p><span id="wmqeeuq" class="content"></span><span id="wmqeeuq" class="content">sendRedirect()实际上是reponse.setStatus(302)的快h式,后者用于设|Http响应的状态代码?/span></p><p><span id="wmqeeuq" class="content"><br />?在servlet中重定向<br />public void doPost(HttpServletRequest request,HttpServletResponse response)<br /><br />    throws ServletException,IOException<br /><br />{<br /><br />    response.setContentType("text/html; charset=gb2312");<br /><br />    response.sendRedirect("/index.jsp");<br /><br />}<br />׃response是jsp面中的隐含对象Q故在jsp面中可以用response.sendRedirect()直接实现重定位?br />注意Q?br />(1).使用response.sendRedirectӞ前面不能有HTML输出?br />qƈ不是l对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制Q一般在8KQ我是说JSP SERVERQ,q就意味着Q除非你关闭了cacheQ或者你使用了out.flush()强制hQ那么在使用sendRedirect之前Q有量的HTML输出也是允许的?br />(2).response.sendRedirect之后Q应该紧跟一句return;<br />我们已经知道response.sendRedirect是通过览器来做{向的Q所以只有在面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出q有什么意义呢Q而且有可能会因ؓ后面的输出导致{向失败?br />比较Q?br />(1).Request Dispatcher.forward()是容器中控制权的转向Q在客户端浏览器地址栏中不会昄{向后的地址Q?br />(2).response.sendRedirect()则是完全的蟩转,览器将会得到蟩转的地址Qƈ重新发送请求链接。这P从浏览器的地址栏中可以看到跌{后的链接地址?br />前者更加高效,在前者可以满需要时Q尽量用RequestDispatcher.forward()Ҏ(gu).<br /><br />注:在有些情况下Q比如,需要蟩转到一个其它服务器上的资源Q则必须使用HttpServletResponse.sendRequest()Ҏ(gu)?br /><br />3.<jsp:forward page="" /> <br /><br />它的底层部分是由RequestDispatcher来实现的Q因此它带有RequestDispatcher.forward()Ҏ(gu)的印记?br /><br /><br />如果?lt;jsp:forward>之前有很多输?前面的输出已使缓冲区?自动输出到客户?那么该语句将不v作用,q一点应该特别注意?br />另外要注意:它不能改变浏览器地址Q刷新的话会D重复提交<br /><br />4.JSP中实现在某页面停留若q秒?自动重定向到另一面<br />在html文g中,下面的代码:<br />  <meta http-equiv="refresh" content="300; url=target.jsp"><br />  它的含义Q在5分钟之后正在览的页面将会自动变为target.htmlq一c代码中300为刷新的延迟旉Q以Uؓ单位。targer.htmlZ惌{向的目标?若ؓ本页则ؓ自动h本页?br />  ׃可知Q可以通过setHeader来实现某面停留若干U后,自动重定向到另一面?br />  关键代码Q?br />      String content=stayTime+";URL="+URL;<br />      response.setHeader("REFRESH",content);<br /></span> </p><img src ="http://www.aygfsteel.com/bnlovebn/aggbug/87623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bnlovebn/" target="_blank">重归本垒QBingQ?/a> 2006-12-14 09:44 <a href="http://www.aygfsteel.com/bnlovebn/archive/2006/12/14/87623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个applet——servlet通讯的例?/title><link>http://www.aygfsteel.com/bnlovebn/archive/2006/12/12/87154.html</link><dc:creator>重归本垒QBingQ?/dc:creator><author>重归本垒QBingQ?/author><pubDate>Tue, 12 Dec 2006 02:43:00 GMT</pubDate><guid>http://www.aygfsteel.com/bnlovebn/archive/2006/12/12/87154.html</guid><wfw:comment>http://www.aygfsteel.com/bnlovebn/comments/87154.html</wfw:comment><comments>http://www.aygfsteel.com/bnlovebn/archive/2006/12/12/87154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/bnlovebn/comments/commentRss/87154.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/bnlovebn/services/trackbacks/87154.html</trackback:ping><description><![CDATA[     摘要: ---servlet文g import  java.io. * ; import  java.util.Date; import  javax.servlet. * ; import  javax.servlet.http. * ;...  <a href='http://www.aygfsteel.com/bnlovebn/archive/2006/12/12/87154.html'>阅读全文</a><img src ="http://www.aygfsteel.com/bnlovebn/aggbug/87154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bnlovebn/" target="_blank">重归本垒QBingQ?/a> 2006-12-12 10:43 <a href="http://www.aygfsteel.com/bnlovebn/archive/2006/12/12/87154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面跌{(javascript/php/asp)http://www.aygfsteel.com/bnlovebn/archive/2006/11/03/78959.html重归本垒QBingQ?/dc:creator>重归本垒QBingQ?/author>Fri, 03 Nov 2006 09:45:00 GMThttp://www.aygfsteel.com/bnlovebn/archive/2006/11/03/78959.htmlhttp://www.aygfsteel.com/bnlovebn/comments/78959.htmlhttp://www.aygfsteel.com/bnlovebn/archive/2006/11/03/78959.html#Feedback1http://www.aygfsteel.com/bnlovebn/comments/commentRss/78959.htmlhttp://www.aygfsteel.com/bnlovebn/services/trackbacks/78959.html

ASP面Q?br /><%response.redirect "面路径"%>


有好几种Ҏ(gu)Q?br />(1)在页面中跌{Q加入以下句子,2U后跛_test.html
   <meta HTTP-EQUIV=REFRESH CONTENT='2; URL=test.html'>
(2)2U后转到l(f)y2.php
   <script>setTimeout("location.href="/home/ly2.php'",2000)</script>
(3)在php中用header()函数跌{Q?br />   header("Location :http://www.xxx.com");
(4)用一个按钮,点击后蟩转:(5U按?
 


<input type=button value=Return onClick

="javascript:location.href('URL');">
   <input type=button value=Return onClick=

"javascript:window.location.href('URL');">
   <input type=button value=Return onClick

="javascript:window.location.replace('URL');">
   <input type=button value=Return onClick

="javascript:window.location.assign('URL');">
   <input type="button" value="Return" onClick

="window.location='URL'" /><!--q种最?->



]]>
Spring文g上传http://www.aygfsteel.com/bnlovebn/archive/2006/10/23/76792.html重归本垒QBingQ?/dc:creator>重归本垒QBingQ?/author>Mon, 23 Oct 2006 09:24:00 GMThttp://www.aygfsteel.com/bnlovebn/archive/2006/10/23/76792.htmlhttp://www.aygfsteel.com/bnlovebn/comments/76792.htmlhttp://www.aygfsteel.com/bnlovebn/archive/2006/10/23/76792.html#Feedback1http://www.aygfsteel.com/bnlovebn/comments/commentRss/76792.htmlhttp://www.aygfsteel.com/bnlovebn/services/trackbacks/76792.html    <bean id="multipartResolver"
          
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
          
<description>
                  ifpre::要用文件上传功能,必须在定义文件中加入MeltipartResolver,
                  可以选用CommonsMutipartResolver或CosMultipartResolver
          
</description>
        
<property name="maxUploadSize">
            
<value>1000000</value>
        
</property>
    
</bean>

同时上传文g使用到相依赖的Commands FileUploadQ所以要在lib目录中包括commons-fileupload.jar文g?br />

写完后调试的q程中,老报错:java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStreamQ少了commons-io.jarQ加上后Q就ok?br />
在Controller端,可以用以下方式取得上传的文gQ可以上传多个文Ӟ
 public Set getMultipartFileForForm(HttpServletRequest req) {
  MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) req;
  // CommonsMultipartFile file = (CommonsMultipartFile)
  // multipartRequest.getFile("attach");//attach为form为file的id?br />  // MultipartHttpServletRequest multipartRequest =
  // (MultipartHttpServletRequest)request;
  Set fileset = new LinkedHashSet();
  for (Iterator it = multipartRequest.getFileNames(); it.hasNext();) {
   String key = (String) it.next();
   MultipartFile file = multipartRequest.getFile(key);
   if (file.getOriginalFilename().length() > 0) {
    fileset.add(file);
   }
  }
  return fileset;
 }



]]>
ORACLE 自增序列SEQUENCEhttp://www.aygfsteel.com/bnlovebn/archive/2006/10/20/76388.html重归本垒QBingQ?/dc:creator>重归本垒QBingQ?/author>Fri, 20 Oct 2006 07:04:00 GMThttp://www.aygfsteel.com/bnlovebn/archive/2006/10/20/76388.htmlhttp://www.aygfsteel.com/bnlovebn/comments/76388.htmlhttp://www.aygfsteel.com/bnlovebn/archive/2006/10/20/76388.html#Feedback0http://www.aygfsteel.com/bnlovebn/comments/commentRss/76388.htmlhttp://www.aygfsteel.com/bnlovebn/services/trackbacks/76388.html
在oracle中sequence是所谓的序列P每次取的时候它会自动增加,一般用在需要按序列h序的地方?
1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限Q?
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几?
START WITH 1 -- ?开始计?
NOMAXVALUE -- 不设|最大?
NOCYCLE -- 一直篏加,不@?
CACHE 10;

一旦定义了emp_sequenceQ你可以用CURRVALQNEXTVAL
CURRVAL=q回 sequence的当前?
NEXTVAL=增加sequence的|然后q回 sequence ?
比如Q?
emp_sequence.CURRVAL
emp_sequence.NEXTVAL

可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW?SELECT 语句
- INSERT语句的子查询?
- NSERT语句的VALUES?
- UPDATE ?SET?

可以看如下例子:
INSERT INTO emp VALUES
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);

SELECT empseq.currval FROM DUAL;

但是要注意的是:
- W一ơNEXTVALq回的是初始|随后的NEXTVAL会自动增加你定义的INCREMENT BY|然后q回增加后的倹{CURRVAL Lq回当前SEQUENCE的|但是在第一ơNEXTVAL初始化之后才能用CURRVALQ否则会出错。一ơNEXTVAL会增加一ơSEQUENCE的|所以如果你在同一个语句里面用多个NEXTVALQ其值就是不一L(fng)。明白?

- 如果指定CACHE|ORACLE可以预先在内存里面攄一些sequenceQ这样存取的快些。cache里面的取完后Qoracle自动再取一l到cache?使用cache或许会蟩P 比如数据库突然不正常down掉(shutdown abort),cache中的sequence׃丢失. 所以可以在create sequence的时候用nocache防止q种情况?

2、Alter Sequence
你或者是该sequence的ownerQ或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果惌改变start|必须 drop sequence ?re-create .
Alter sequence 的例?
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE -- ?0000后从头开?
NOCACHE ;


影响Sequence的初始化参数Q?
SEQUENCE_CACHE_ENTRIES =讄能同时被cache的sequence数目?

可以很简单的Drop Sequence
DROP SEQUENCE order_seq;

CZSequenceQ?br />
CREATE SEQUENCE SCOTT.DMIFPOSTID 
    START WITH 
261
    INCREMENT BY 
1
    NOMINVALUE
    NOMAXVALUE
    NOCYCLE
    CACHE 
20
    NOORDER


3、如何?br />         W一U方法:一般来说需要新Z个触发器QTRIGGERQ,使得在插入数据之前先q行Sequence生成自增受?br />CZTrigger
CREATE OR REPLACE TRIGGER SCOTT.DMIFATTACH_TRG
BEFORE INSERT 
ON SCOTT.DMIFATTACH
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW 
begin
    select SCOTT.DMIFATTACHID.nextval into :
new.ATTACHID from dual;
  end;

         W二U方法:可以在插入数据时直接调用?br />          insert into table(id,name) values(seq_name.nextval,'名字');

         其它Q对于hibernate来说Q在插入数据之前会先q行一ơSequence生成id的,所以这时如果还有触发器QTRIGGERQ,又要再运行一ơSequenceQ于是就会发现id是以Qؓ步进增加的。这时把Trigger删除Q步q就为1了?br />         如果使用hibernate则需要在hbm.xml文g中把QD的生成方式设为sequence.
    <id
        name
="postid"
        type
="java.lang.Integer"
        column
="POSTID"
    
>
        
<meta attribute="field-description">
           @hibernate.id
            generator
-class="sequence"
            type
="java.lang.Integer"
            column
="POSTID"


        
</meta>
        
<!--讄id生成方式-->
          
<generator class="sequence">
            
<param name="sequence">SCOTT.DMIFPOSTID</param>
         
</generator>
    
</id>

同时在调用this.getHibernateTemplate().save()Ҏ(gu)时会自动生成Ҏ(gu)sequence把查询到的id号setl这个对象的id.

]]>
jsp操作存储q程q返回?/title><link>http://www.aygfsteel.com/bnlovebn/archive/2006/09/12/69142.html</link><dc:creator>重归本垒QBingQ?/dc:creator><author>重归本垒QBingQ?/author><pubDate>Tue, 12 Sep 2006 05:55:00 GMT</pubDate><guid>http://www.aygfsteel.com/bnlovebn/archive/2006/09/12/69142.html</guid><wfw:comment>http://www.aygfsteel.com/bnlovebn/comments/69142.html</wfw:comment><comments>http://www.aygfsteel.com/bnlovebn/archive/2006/09/12/69142.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/bnlovebn/comments/commentRss/69142.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/bnlovebn/services/trackbacks/69142.html</trackback:ping><description><![CDATA[ <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #000000"><%</span> <span style="COLOR: #000000">@page contentType</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">text/html;charset=gb2312</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000"> language</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">java</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">import</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">d7ith.*</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">%></span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #000000"><</span> <span style="COLOR: #000000">jsp:usejBean id</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">DataConn</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000"> scope</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">page</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">d7ith.DataConn</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/></span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #000000"><%</span> <span style="COLOR: #000000">@page </span> <span style="COLOR: #0000ff">import</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">java.sql.*</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">%></span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #000000"><%</span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />  String oracleDriver </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">oracle.jdbc.driver.OracleDriver</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />  String oracleUrl </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">jdbc:oracle:thin:@10.119.40.94:1521:d7i</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />  String username </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">system</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />  String password </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">d7i</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />  Connection conn </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />  ResultSet rs </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">;<br /><img id="Codehighlighter1_473_579_Open_Image" onclick="this.style.display='none'; Codehighlighter1_473_579_Open_Text.style.display='none'; Codehighlighter1_473_579_Closed_Image.style.display='inline'; Codehighlighter1_473_579_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_473_579_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_473_579_Closed_Text.style.display='none'; Codehighlighter1_473_579_Open_Image.style.display='inline'; Codehighlighter1_473_579_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />  </span> <span style="COLOR: #0000ff">try</span> <span id="Codehighlighter1_473_579_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_473_579_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    Class.forName(oracleDriver);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    conn </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> DriverManager.getConnection(oracleUrl,username,password);<br /><img id="Codehighlighter1_612_643_Open_Image" onclick="this.style.display='none'; Codehighlighter1_612_643_Open_Text.style.display='none'; Codehighlighter1_612_643_Closed_Image.style.display='inline'; Codehighlighter1_612_643_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_612_643_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_612_643_Closed_Text.style.display='none'; Codehighlighter1_612_643_Open_Image.style.display='inline'; Codehighlighter1_612_643_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />  }</span> </span> <span style="COLOR: #0000ff">catch</span> <span style="COLOR: #000000">(ClassNotFoundException ex)</span> <span id="Codehighlighter1_612_643_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_612_643_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    out.print(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">装蝲驱动E序错误</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">);<br /><img id="Codehighlighter1_666_697_Open_Image" onclick="this.style.display='none'; Codehighlighter1_666_697_Open_Text.style.display='none'; Codehighlighter1_666_697_Closed_Image.style.display='inline'; Codehighlighter1_666_697_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_666_697_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_666_697_Closed_Text.style.display='none'; Codehighlighter1_666_697_Open_Image.style.display='inline'; Codehighlighter1_666_697_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />  }</span> </span> <span style="COLOR: #0000ff">catch</span> <span style="COLOR: #000000">(SQLException ex)</span> <span id="Codehighlighter1_666_697_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_666_697_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    out.print(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">不能够连接数据库</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />  }</span> </span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />  String sql </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">{call R5.o7chkpsd(?,?,?)}</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">;<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />  CallableStatement stmt </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> conn.prepareCall(sql);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    stmt.setString(</span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">,</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">R5</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">);  </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">输入参数</span> <span style="COLOR: #008000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #000000">    stmt.setString(</span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">,</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">111111</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    stmt.registerOutParameter(</span> <span style="COLOR: #000000">3</span> <span style="COLOR: #000000">,Types.CHAR); </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">输出参数为结果集参数</span> <span style="COLOR: #008000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #000000">    stmt.executeQuery();<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    String str </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> stmt.getString(</span> <span style="COLOR: #000000">3</span> <span style="COLOR: #000000">);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    out.println(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">W二个参Cؓ:</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">+</span> <span style="COLOR: #000000">str);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span> <span style="COLOR: #000000">%></span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </div> <img src ="http://www.aygfsteel.com/bnlovebn/aggbug/69142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/bnlovebn/" target="_blank">重归本垒QBingQ?/a> 2006-09-12 13:55 <a href="http://www.aygfsteel.com/bnlovebn/archive/2006/09/12/69142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP一个密码验证的Ҏ(gu)http://www.aygfsteel.com/bnlovebn/archive/2006/06/20/53933.html重归本垒QBingQ?/dc:creator>重归本垒QBingQ?/author>Tue, 20 Jun 2006 03:30:00 GMThttp://www.aygfsteel.com/bnlovebn/archive/2006/06/20/53933.htmlhttp://www.aygfsteel.com/bnlovebn/comments/53933.htmlhttp://www.aygfsteel.com/bnlovebn/archive/2006/06/20/53933.html#Feedback1http://www.aygfsteel.com/bnlovebn/comments/commentRss/53933.htmlhttp://www.aygfsteel.com/bnlovebn/services/trackbacks/53933.htmltomcat服务器:
在应用web的web-inf下面的web.xml中定义用戯色及其可以访问的面?br />

   < security-constraint >
    
< web-resource-collection >
      
< web-resource-name > admin </ web-resource-name >
      
< url-pattern > /ch12/admin/* </ url-pattern >
      
< url-pattern > /ch12/search/delete.jsp </ url-pattern >
    
</ web-resource-collection >
    
< auth-constraint >
      
< role-name > admin </ role-name >
    
</ auth-constraint >
  
</ security-constraint >

  
< security-constraint >
    
< web-resource-collection >
      
< web-resource-name > search </ web-resource-name >
      
< url-pattern > /ch12/search/* </ url-pattern >
    
</ web-resource-collection >
    
< auth-constraint >
      
< role-name > admin </ role-name >
      
< role-name > user </ role-name >
    
</ auth-constraint >
  
</ security-constraint >

  
< login-config >
    
< auth-method > BASIC </ auth-method >
    
< realm-name > ORA Examples </ realm-name >
  
</ login-config >

  
< security-role >
    
< role-name > admin </ role-name >
  
</ security-role >
  
< security-role >
    
< role-name > user </ role-name >
  
</ security-role >

在tomcat-user.xml定义用户Q及其所属角艌Ӏ?br />
  <user username="hans" password="secret" roles="user"/>
  
<user username="paula" password="boss" roles="admin"/>

在bean中实现用L(fng)角色取得Q同时让其可以支持ELQ?br />
package com.ora.jsp.tags;

import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.jstl.core.*;
import org.apache.taglibs.standard.lang.support.*;

public class IfUserInRoleTag extends ConditionalTagSupport {
    
private String valueEL;

    
public void setValue(String value) {
        valueEL 
= value;
    }


    
public boolean condition() throws JspTagException {
        
/*
         * Evaluate the EL expression, if any
         
*/

        String role 
= null;
        
try {
            role 
= (String)
             
//ExpressionEvaluatorManager.evaluate可以使valueEL用于ELQ属性名为value               
                  ExpressionEvaluatorManager.evaluate("value", valueEL, 

                    String.classthis, pageContext);
        }

        
catch (JspException e) {
            
throw new JspTagException(e.getMessage());
        }

        HttpServletRequest request 
= 
            (HttpServletRequest) pageContext.getRequest();
        
return request.isUserInRole(role);//取得角色cd
    }

}


在tld文g中定义EL自定义标{?br />
  <tag>
    
<name>ifUserInRole</name>
    
<tag-class>com.ora.jsp.tags.IfUserInRoleTag</tag-class>
    
<body-content>JSP</body-content>
    
<description>
      Evaluates its body if the current, authenticated, user belongs to
      the specified security role, and optionally saves the result
      of the test as a Boolean in a variable specified by the var and 
      scope attributes.
    
</description>
    
<attribute>
      
<name>value</name>
      
<required>true</required>
    
</attribute>
    
<attribute>
      
<name>var</name>
      
<required>false</required>
    
</attribute>
    
<attribute>
      
<name>scope</name>
      
<required>false</required>
    
</attribute>
  
</tag>

在应用程序jsp面中调用自定义标签q行讉K控制
<%@ taglib prefix="ora" uri="orataglib" %>

<ora:ifUserInRole value="admin" var="isAdmin" />



]]>
վ֩ģ壺 | ̨| | | | | | Զ| | | Ͻ| | | | ͤ| | | ǿ| | | | | | | | Դ| | | ޳| | ֥| | ɽ| | | ױ| Ͼ| | | հ| ܱ|