﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-insomnia,politic,proficient ,sensible.-随笔分类-java连接数据库解析</title><link>http://www.blogjava.net/youngturk/category/51784.html</link><description>The world is a fine place , and worth fighting for it.</description><language>zh-cn</language><lastBuildDate>Wed, 09 Jan 2013 02:35:01 GMT</lastBuildDate><pubDate>Wed, 09 Jan 2013 02:35:01 GMT</pubDate><ttl>60</ttl><item><title>web应用从tomat向weblogic8中迁移遇到的三个问题</title><link>http://www.blogjava.net/youngturk/archive/2013/01/09/394000.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Wed, 09 Jan 2013 01:00:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2013/01/09/394000.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/394000.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2013/01/09/394000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/394000.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/394000.html</trackback:ping><description><![CDATA[<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">一、系统环境</p>
<blockquote style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">
<p>1、web应用在tomcat上运行，一切正常。</p>
<p>2、OS：windows XP sp3</p>
<p>3、weblogic version：8.1.3.0</p></blockquote>
<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">二 、问题及解决方法</p>
<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1 、 weblogic.utils.ParsingException: nested TokenStreamException: antlr.TokenStreamIOException： 在web应用的WEB-INF目录下新增（如果没有）weblogic.xml文件，写入下面内容：</p>
<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="color: rgb(0,0,255)">&lt;?</span>xml version="1.0" encoding="UTF-8"<span style="color: rgb(0,0,255)">?&gt;</span><span class="Apple-converted-space">&nbsp;</span><br /><span style="color: rgb(0,0,255)">&lt;</span>!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN"<span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br /><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">weblogic</span>-<span style="color: rgb(255,0,0)">web</span>-<span style="color: rgb(255,0,0)">app</span><span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">session</span>-<span style="color: rgb(255,0,0)">descriptor</span><span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">session</span>-descriptor<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br /><br />&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">jsp</span>-<span style="color: rgb(255,0,0)">descriptor</span><span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">jsp</span>-<span style="color: rgb(255,0,0)">param</span><span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">param</span>-<span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">&gt;</span>encoding<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">param</span>-name<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">param</span>-<span style="color: rgb(255,0,0)">value</span><span style="color: rgb(0,0,255)">&gt;</span>UTF-8<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">param</span>-value<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">jsp</span>-param<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">jsp</span>-<span style="color: rgb(255,0,0)">param</span><span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">param</span>-<span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">&gt;</span>pageCheckSeconds<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">param</span>-name<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">param</span>-<span style="color: rgb(255,0,0)">value</span><span style="color: rgb(0,0,255)">&gt;</span>-1<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">param</span>-value<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">jsp</span>-param<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br /><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">jsp</span>-<span style="color: rgb(255,0,0)">param</span><span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">param</span>-<span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">&gt;</span>compilerSupportsEncoding<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">param</span>-name<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">param</span>-<span style="color: rgb(255,0,0)">value</span><span style="color: rgb(0,0,255)">&gt;</span>true<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">param</span>-value<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">jsp</span>-param<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">jsp</span>-<span style="color: rgb(255,0,0)">param</span><span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">param</span>-<span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">&gt;</span>verbose<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">param</span>-name<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">param</span>-<span style="color: rgb(255,0,0)">value</span><span style="color: rgb(0,0,255)">&gt;</span>false<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">param</span>-value<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">jsp</span>-param<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br />&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">jsp</span>-descriptor<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br /><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">charset</span>-<span style="color: rgb(255,0,0)">params</span><span style="color: rgb(0,0,255)">&gt;</span>&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">input</span>-<span style="color: rgb(255,0,0)">charset</span><span style="color: rgb(0,0,255)">&gt;</span>&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">resource</span>-<span style="color: rgb(255,0,0)">path</span><span style="color: rgb(0,0,255)">&gt;</span>/*<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">resource</span>-path<span style="color: rgb(0,0,255)">&gt;</span>&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">java</span>-<span style="color: rgb(255,0,0)">charset</span>-<span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">&gt;</span>UTF-8<span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">java</span>-charset-name<span style="color: rgb(0,0,255)">&gt;</span>&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">input</span>-charset<span style="color: rgb(0,0,255)">&gt;</span>&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">charset</span>-params<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br /><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(128,0,0)">weblogic</span>-web-app<span style="color: rgb(0,0,255)">&gt;</span><span class="Apple-converted-space">&nbsp;</span><br /></p>
<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"></p>
<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp; 保存，重新deploy应用<span class="Apple-converted-space">&nbsp;</span><br /></p>
<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">2、 sun.io.MalformedInputException：修改区域和语言选型。</p>
<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">控制面板-&gt;区域和语言选型-&gt;高级-&gt;代码页转换表，去掉54936（GB18030简体中文）前面的对勾，保存更改。重新deploy应用。</p>
<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">3 、weblogic.servlet.jsp.JspException: (line 1): page directive contentType at /unieap/ria3.3/pages/config.jsp:1 previously defined ：修改jsp文件，不能重复定义：&lt;%@ page contentType="text/html; charset=UTF-8"%&gt;</p>
<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在含有&lt;%@ include file="/unieap/ria3.3/pages/config.jsp"%&gt;这样的代码的JSP文件中，如果在文件头部已经定义了contentType，那么在被包含的文件中如果重复定义contentType，尽管相同，weblogoic也会报错，只能改JSP文件，保证一个页面中只有一个contentType的定义。这个问题在tomcat中是不存在的，可能是两个应用服务器的解析机制不同。</p><img src ="http://www.blogjava.net/youngturk/aggbug/394000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2013-01-09 09:00 <a href="http://www.blogjava.net/youngturk/archive/2013/01/09/394000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>主键的设置方式可以是这样,有待学习啊</title><link>http://www.blogjava.net/youngturk/archive/2013/01/08/393938.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Tue, 08 Jan 2013 02:24:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2013/01/08/393938.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/393938.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2013/01/08/393938.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/393938.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/393938.html</trackback:ping><description><![CDATA[<!--StartFragment -->
 
 
<div><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/youngturk/zhujian.jpg" width="679" longdesc="" height="90" /><br />&nbsp;<br /><br /><!--StartFragment -->


<div><img alt="" src="file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/2664282194/QQ/WinTemp/RichOle/E162BX%7BL~O2NY$_FEJ@V8LA.jpg" /> </div></div><img src ="http://www.blogjava.net/youngturk/aggbug/393938.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2013-01-08 10:24 <a href="http://www.blogjava.net/youngturk/archive/2013/01/08/393938.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在本数据库中创建DBlink解决同一网段不同数据库间访问</title><link>http://www.blogjava.net/youngturk/archive/2013/01/08/393935.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Tue, 08 Jan 2013 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2013/01/08/393935.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/393935.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2013/01/08/393935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/393935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/393935.html</trackback:ping><description><![CDATA[<div>例如:<br />&lt;!-- 从jdbc:oracle:thin:@10.128.5.65:1521:tjgwl1 中跳到(服务器间跳转)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.128.141.109:1521:tjgwlw数据库后面直接加@tjgwlw--&gt; <br /></div> <img src ="http://www.blogjava.net/youngturk/aggbug/393935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2013-01-08 10:04 <a href="http://www.blogjava.net/youngturk/archive/2013/01/08/393935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE编程，存储过程，自学笔记（备份）转</title><link>http://www.blogjava.net/youngturk/archive/2012/11/15/391366.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Thu, 15 Nov 2012 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2012/11/15/391366.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/391366.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2012/11/15/391366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/391366.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/391366.html</trackback:ping><description><![CDATA[<p>--创建过程名称<br />--create procedure 存储过程名字 is begin<br />--create or replace procedure&nbsp; 如果有就替换掉<br />----------------------------------------------<br />案例1：<br />--创建一个表<br />create table mytest(name varchar2(30),passwd varchar2(30));<br />--创建过程<br />create procedure sq_pro1 is<br />begin<br />--执行部分<br />insert into mytest values('zgx','888666');<br />end；</p>
<p>-- / 斜线回车</p>
<p><br />----------------------------------------------<br />如何查看错误信息：<br />show error&nbsp; 回车</p>
<p>--调用存储过程<br />1.exec 过程名(参数1，2....);<br />2.call 过程名(参数1，2....);<br />---------------------------------------------------<br />set serveroutput on;打开输出选项<br />set serveroutput off;关闭输出选项<br />dbms_&nbsp; 是包名的意思！<br />案例2：<br />dbms_output.put_line('helloWorld');&nbsp; <br />-----------------<br />declare<br />&nbsp;v_ename varchar2(5);--定义字符串变量<br />begin<br />&nbsp;--into v_ename意思:把查询出来数据 赋值给 v_ename;&amp;no是执行的时候会弹出输入框<br />&nbsp;select ename into v_ename from emp where empno=&amp;no;<br />&nbsp;--||代表 连接符号；<br />&nbsp;dbms_output.put_line('用户名是：'||v_ename); <br />end;<br />-----------<br />案例3：<br />declare<br />&nbsp;v_ename varchar2(5);--定义字符串变量<br />&nbsp;v_sal number(7,2);--定义字符串变量<br />begin<br />&nbsp;--如果是多个字段，用逗号隔开，顺序必须一样！！<br />&nbsp;select ename,sal into v_ename,v_sal from emp where empno=&amp;no;<br />&nbsp;--||代表 连接符号；<br />&nbsp;dbms_output.put_line('用户名是：'||v_ename||'工资：'||v_sal); <br />end;<br />---------------------<br />--异常的捕获<br />exception<br />when no_data_found then --如果出现no_data_found异常就执行下一句<br />dbms_output.put_line('输入有误！');<br />end;<br />------------<br />过程：<br />案例4：<br />创建带输入参数的过程；<br />create procedure sp_pro3(spNma varchar2,newSal number) is<br />begin<br />&nbsp;update emp set sal=newSal where ename=spName;<br />end;<br />------------<br />函数：<br />函数用于返回特定的数据，当建立函数时，在函数头部要求有return语句；<br />案例5：<br />--输入雇员姓名，返回该雇员的年薪<br />--返回一个number类型；返回值名字是yearSal，类型是number(7,2);<br />create function sp_fun1(spName varchar2) return number is yearSal number(7,2);<br />begin<br />--执行部分<br />select sal*12+nvl(comm,0)*12 into yearSal from emp where enamee=spName;<br />return yearSal;<br />end;<br />调用函数中<br />--随便定义一个值<br />var abc number;<br />--掉用函数把结果赋值给 abc<br />call sp_fun1()'SCOTT' into:abc;<br />-------------<br />包<br />创建包：<br />--创建了一个包 sp_package<br />--声明该包里有一个过程update_sal<br />--生命该包里有一个函数annual_income<br />create package sp_package is<br />&nbsp;procedure update_sal(name,varchar2,newsal number);<br />&nbsp;function annual_income(name varchar2, return number;<br />end;<br />给包sp_package 实现包体--把定义包中的 过程和函数实现；<br />create package body sp_package is<br />procedure update_sal(name,varchar2,newsal number) is<br />begin<br />&nbsp;update emp set sal=newsal where ename=name;<br />end;<br />function annual_income(name varchar2)<br />return number isannual_salary number;<br />begin<br />select sal*12+nvl(comm,0) into annual_salary from emp where ename=name;<br />return annual_salary;<br />end;<br />end;<br />--------------<br />调用包中的过程或函数<br />exec sp_package.update_sal('SCOTT','120');<br />---------------------<br />触发器<br />触发器是指隐含的执行的存储过程。当定义触发器时，必须要指定触发的时间和触发的操作，常用触发包括insert，pudate，delete语句，而触发操作实际就是一个pl/sql块。可以使用create trigger来建立触发器。<br />触发器是非常有用的，可维护数据库的安全和一致性。<br />---------<br />定义并使用变量<br />包括：<br />1.标量类型（scalar）<br />2.符合类型（）</p>
<p>---------<br />标量（scalar）-常用类型<br />语法：<br />identifier [constant] datatype [not null] [:=| default expr]<br />identifier:名称<br />constant：指定常量。需要指定它的初始值，且其值是不能改变的<br />datatype：数据类型<br />not null： 指定变量值不能为null<br />：= 给变量或是常量指定初始值<br />default 用于指定初始值<br />expr：指定初始值的pl/sql表达式，文本值、其他变量、函数等<br />------------<br />标量定义的案例<br />1.定义一个变长字符串<br />v_ename varchar2(10)<br />2.定义一个小数 范围 -9999.99~9999.99<br />v_sal number(6,2)<br />3.定义一个小数并给一个初始值为5.4 :=pl/sql的赋值号<br />v_sal2 number(6,2):=5.4<br />4.定义一个日期类型的数据<br />v_hiredate date;<br />5.定义一个布尔变量，不能为空，初始值为false<br />v_valid boolean not null default false;<br />---------------<br />如何使用标量<br />&nbsp;&nbsp; 定义好变量后，就可以使用这些变量。这里需要说明的是pl/sql块为变量赋值不同于其他的编程语言，需要在等号前面加冒号(:=)</p>
<p>下面以输入员工号，显示雇员名称、工资、个人所得税(税率为0.03为例)。说明变量的使用，看看如何编写：</p>
<p>declare<br />c_tax_rate number(3.2):=0.03; --定义赋值<br />--用户名<br />v_ename varchar2(5);<br />v_sal number(7,2);<br />v_tax_sal number()7,2;<br />begin<br />--执行<br />select ename,sal into v_ename,v_sal from emp where empno=$no;<br />--计算所得税<br />v_tax_sal:=v_sal*c_tax_rate;<br />--输出<br />dbms_output.put_line('姓名是:'||v_ename||'工资：'||v_sal||'所得税：'||v_tax_sal);<br />end;<br />-----<br />标量（scalar）--使用%type类型<br />&nbsp;对于上面的pl/sql块有一个问题：<br />&nbsp;就是如果员工的姓名超过了5字符的话，就会有错误，为了降低pl/sql程序的维护工作量，可以使用%type属性定义变量，这样他会按照数据库列来确定你定义的变量的类型和长度。<br />看看怎么使用。<br />语法： 标识符名 表名.列名%type;</p>
<p>&nbsp;declare<br />&nbsp; v_ename emp.ename%type; --定义变量v_ename 和emp表中列名ename大小类型保持一致；<br />---<br />复合变量（composite）<br />用于存放多个值的变量。<br />包括：<br />1.pl/sql记录<br />2.pl/sql表<br />---------------<br />复合类型-pl/sql记录<br />&nbsp; 类似与高级语言的结构体，需要注意的是，当引用pl/sql记录成员时，必须要加记录变量作为前缀（记录变量.记录成员）<br />如下：<br />declare<br />--定义一个pl/sql记录类型是：emp_record_type，类型包括三个数据name，salary，title；该类型中可以存放三个类型的数据；<br />type emp_record_type is record(name emp.ename%type,salary emp.sal%type,title&nbsp; emp.job%type);</p>
<p>--定义了一个sp_record变量，类型是emp_record_type<br />sp_record emp_record_type;</p>
<p>begin<br />select ename,sal,job into sp_record from emp where empno=7788;<br />dbms_output.put_line('员工名：'||sp_record.name); --显示定义emp_record_type类型中 name的值；<br />end;<br />end;<br />----------------<br />复合类型--pl/sql表<br />&nbsp;相当于高级语言中的数组。但是需要注意的是在高级语言中数组的下标不能为负数，而pl/sql是可以为负数的，并且表元素的下标没有限制。实例如下：<br />declare<br />--定义了一个pl/sql表类型sp_table_type，该类型是用于存放emp.ename%type类型的数组<br />--index by binary_integer标识下标是整数<br />type sp_table_type is table of emp.ename%type index by binary_integer;<br />--定义了一个sp_table变量，变量类型是sp_table_type<br />sp_table sp_table_type;<br />begin<br />--把查询出来的ename放到 table（0）下标为0的数据<br />select ename into sp_table(0) from emp where empno=7788;<br />dbms_output.put_lin('员工名：'||sp_table(0)); --要和存放下标一样<br />end;<br />说明：<br />sp_table_type&nbsp; 是pl/sql表类型<br />emp.ename%type 指定了表的元素的类型和长度<br />sp_table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为pl/sql表变量<br />sp_table(0)&nbsp;&nbsp;&nbsp; 表示下标为0的<br />---------------<br />参照变量<br />参照变量是指用于存放数值指针的变量。通过使用参照变量，可以使用得应用程序共享相同对象，从而降低占用的空间。在编写pl/sql程序时，可以使用游标变量和对象类型变量两种参照变量类型<br />游标变量用的最多<br />-----------<br />参照变量---游标变量<br />使用游标时，当定义游标时不需要指定相应的select语句，但是当使用游标时需要指定select语句，这样一个游标就与一个select语句结合了。<br />如下<br />1.请使用pl/sql编写一个块，可以输入部门号，并显示该部门所有员工姓名和他的工资。<br />declare<br />&nbsp;--定义游标类型<br />&nbsp;type sp_emp_cursor is ref cursor；<br />&nbsp;--定义一个游标变量<br />&nbsp;test_cursor sp_emp_cursor；<br />&nbsp;--定义变量<br />&nbsp;v_ename emp。ename%type；<br />&nbsp;v_sal emp。sal%type；<br />begin<br />--执行<br />--打开一个游标test_cursor和一个select结合<br />open test_cursor for select ename,sal from emp where deptno=&amp;no;<br />--循环取出<br />loop<br />&nbsp;--fetch就是取出。取出test_cursor中的数据放到 v_ename,v_sal里面去；<br />&nbsp;fetch test_cursor into v_ename,v_sal；<br />&nbsp;--判断是否test_cursor为空<br />&nbsp;exit when test_cursor%notfound；<br />&nbsp;dbms_output.put_line('名字：'||v_ename||'工资：'||v_sal);<br />end loop；<br />end；</p>
<p><br />2.在1。基础上，如果某个员工的工资低于200元，就增加100元。<br />declare<br />&nbsp;--定义游标类型<br />&nbsp;type sp_emp_cursor is ref cursor；<br />&nbsp;--定义一个游标变量<br />&nbsp;test_cursor sp_emp_cursor；<br />&nbsp;--定义变量<br />&nbsp;v_ename emp。ename%type；<br />&nbsp;v_sal emp。sal%type；<br />begin<br />--执行<br />--打开一个游标test_cursor和一个select结合<br />open test_cursor for select ename,sal from emp where deptno=&amp;no;</p>
<p>--循环取出<br />loop<br />&nbsp;--fetch就是取出。取出test_cursor中的数据放到 v_ename,v_sal里面去；<br />&nbsp;fetch test_cursor into v_ename,v_sal；<br />&nbsp;if v_sal&lt;200 then <br />&nbsp;update emp set sal=sal+100 where ename=v_ename;<br />&nbsp;end if;<br />&nbsp;--判断是否test_cursor为空<br />&nbsp;exit when test_cursor%notfound；<br />&nbsp;dbms_output.put_line('名字：'||v_ename||'工资：'||v_sal);<br />end loop；<br />end；</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>----------<br />条件分支语句<br />if--then，<br />if--then--else，<br />if--then--elsif--else</p>
<p>----<br />循环语句<br />loop --end loop；至少会执行一次。<br />create or replace procedure sp_pro6() is<br />--定义赋值<br />v_num number:=1;<br />begin<br />loop<br />&nbsp;insert into users1 values(v_num,spName);<br />&nbsp;--判断是否要退出循环<br />&nbsp;exit when v_num=10;<br />&nbsp;--自增<br />&nbsp;v_num:=v_num+1;<br />end loop;<br />end;</p>
<p><br />-------------<br />循环语句-while先判断后执行<br />create or replace procedure sp_pro6() is<br />--定义赋值<br />v_num number:=11;<br />begin<br />while v_num&lt;=20 loop<br />&nbsp;insert into users1 values(v_num,spName);<br />&nbsp;v_num:=v_num+1;<br />end loop;<br />end;<br />------------------<br />循环语句--for循环（不建议）<br />begin<br />&nbsp;for i in reverse 1。。10 loop<br />&nbsp;insert into users1 values（i，'aaa'）；<br />&nbsp;end loop;<br />end；<br />-------<br />循环语句--goto,null循环（不建议）<br />declare <br />&nbsp;i int:=1;<br />begin<br />&nbsp;loop<br />&nbsp;dbms_output.put_line('输出i='||i);<br />&nbsp;if i=10 then<br />&nbsp;goto end_loop;<br />&nbsp;end if;<br />&nbsp;i:=i+1;<br />&nbsp;end loop;<br />&nbsp;&lt;&lt;end_loop&gt;&gt;&nbsp; --到i到10后直接跳到该标记<br />dbms_output.put_line('循环结束');<br />end;<br />---------------------------<br />无返回值的存储过程（有输入参数）<br />&nbsp;<br />create table book(<br />&nbsp;bookId number;<br />&nbsp;bookName varchar2(100);<br />&nbsp;publishHouse varchar2(50);<br />);<br />--编写过程<br />--in表示这是一个输入参数，不写默认是in<br />--out 表示一个输出参数<br />create or replace procedure sp_pro7(spBookId in number，spbookName in varchar2,sppublishHouse in varchar2) is<br />begin<br />&nbsp;insert into book values(spBookId,spbookName,sppublishHouse);<br />end;</p>
<p>---------------<br />有返回值的存储过程（有输入和输出参数）</p>
<p>create or replace procedure sp_pro8(ename in number，spName out varchar2) is<br />begin<br />&nbsp;--spName自动返回 因为他是out<br />&nbsp;select ename into spName from emp where empno=spno;<br />end;<br />----------------<br />有返回值是集合数组的存储过程（有输入和输出参数）<br />1.建立一个包<br />--创建包 里面定义一个游标类型；<br />create or replace package testpackage as<br />type test_cursor is ref cursor;<br />end testpackage；<br />2.建立存储过程。<br />create or replace procedure sp_pro8(spNo in number，p_cursor out testpackage.test_cursor) is<br />begin<br />&nbsp;--spName自动返回 因为他是out<br />&nbsp;open p_cursor for select * from emp where deptno=spNo;<br />end;</p>
<p>－－－－－－－－－－－－<br />oracle的分页&nbsp; rn是别名<br />select t1.*，rownum rn from(select * from emp) t1;//多加一个列记录个数<br />select t1.*，rownum rn from(select * from emp) t1 where rownum&lt;10; <br />select * from (select t1.*，rownum rn from(select * from emp) t1 where rownum&lt;10) where rn&gt;=6;</p>
<p>编写oracle的分页 <br />--建立一个包<br />create or replace package testpackage as<br />type test_cursor is ref cursor;<br />end testpackage；<br />--建立存储过程<br />create or replace procedure fenye<br />(tableName in varchar2,<br />pageSize in number, --一页显示几条记录<br />pageNow in number,&nbsp; --显示哪一页<br />myrows out number, --总记录数<br />myPageCount out number,--总页数<br />p_cursor out testpackage.test_cursor --返回的记录集<br />) is<br />--定义部分<br />--定义sql语句 字符串<br />v_sql varchar2(1000);<br />--定义两个整数<br />v_begin number:=(pageNow-1)*pageSize+1;<br />v_end number:=pageNow*pageSize;<br />begin<br />--执行部分<br />v_sql:='select * from (select t1.*，rownum rn from(select * from '||tableName||') t1 where rownum&lt;10'||?||') where rn&gt;='||?||';';<br />--把游标和sql语句关联起来<br />open p_cursor for v_sql;</p>
<p>--计算myrows<br />v_sql:='select count(*) from '||tableName||'';<br />--执行sql，并把返回值，赋值给myrows;<br />execute immediate v_sql int myrows;<br />--计算myPagecount<br />if mod(myrows,pageSize)=0 then --mod()取余数<br />myPageCount:=myrows/pageSize;<br />else<br />myPageCount:=myrows/pagesize+1;<br />end if;</p>
<p>--关闭游标<br />--close p_cursor;<br />end;</p>
<p><br />------------------------<br />例外的分类<br />1.预定义例外用于处理常见的oracle错误<br />2.非预定义例外用于处理预定义例外不能处理的例外&nbsp; 6.53<br />3.自定义例外用于处理与oracle错误无关的其他情况</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />------------------------------------------------<br />-----------------------------------------------<br />-------ＪＡＶＡ中-调用无返回值的存储过程-----------------<br />try{<br />&nbsp;Class.forName();<br />&nbsp;Connection ct=DriverManager.getConnerction();<br />&nbsp;//调用无返回值存储过程<br />&nbsp;CallableStatement cs=ct.prepareCall("{call 存储过程名称(?,?,?)}") // ?代表存储过程参数<br />&nbsp;cs.setIn(1,10);<br />&nbsp;cs.setString(2,'java调用存储过程');<br />&nbsp;cs.setString(3,'人民出版社');<br />&nbsp;//执行<br />&nbsp;cs.execute();<br />&nbsp;<br />}catch(Exception e)<br />{<br />&nbsp;e.printStackTrace();<br />}finally{<br />&nbsp;cs.close();<br />&nbsp;ct.close();<br />}</p>
<p>------------------------------------------------<br />-----------------------------------------------<br />------ＪＡＶＡ中--调用有回值的存储过程-----------------<br />try{<br />&nbsp;Class.forName();<br />&nbsp;Connection ct=DriverManager.getConnerction();<br />&nbsp;//调用有返回值存储过程<br />&nbsp;CallableStatement cs=ct.prepareCall("{call 存储过程名称(?,?)}") // ?代表存储过程参数 第一是输入，第二是输出<br />&nbsp;//第一个?输入参数<br />&nbsp;cs.setIn(1,10);<br />&nbsp;//给第二个？输出值赋值<br />&nbsp;cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR); //<br />&nbsp;//执行<br />&nbsp;cs.execute();<br />&nbsp;//取出返回值,<br />&nbsp;String name=cs。getString(2);<br />&nbsp;System.out。println("名称是："+name);<br />}catch(Exception e)<br />{<br />&nbsp;e.printStackTrace();<br />}finally{<br />&nbsp;cs.close();<br />&nbsp;ct.close();<br />}</p>
<p>------------------------------------------------<br />-----------------------------------------------<br />-------ＪＡＶＡ中-调用有回值是多个 数组2011-12-5的存储过程-----------------<br />try{<br />&nbsp;Class.forName();<br />&nbsp;Connection ct=DriverManager.getConnerction();<br />&nbsp;//调用有返回值存储过程<br />&nbsp;CallableStatement cs=ct.prepareCall("{call 存储过程名称(?,?)}") // ?代表存储过程参数 第一是输入，第二是输出<br />&nbsp;//第一个?输入参数<br />&nbsp;cs.setIn(1,10);<br />&nbsp;//给第二个？输出值赋值<br />&nbsp;cs.registerOutParameter(2,oracle.jdbc.OracleTypes.cursor); //类型是cursor游标<br />&nbsp;//执行<br />&nbsp;cs.execute();<br />&nbsp;//取出返回值（结果集）<br />&nbsp;ReaultSet rs=(ResultSet)cs.getObject(2); //2是第二？<br />&nbsp;while(rs.next())<br />&nbsp;{<br />&nbsp; int =rs。getInt(1); <br />&nbsp; String name=rs。getString(2);<br />&nbsp; System.out。println("名称是："+name);<br />&nbsp;<br />&nbsp;}</p>
<p>}catch(Exception e)<br />{<br />&nbsp;e.printStackTrace();<br />}finally{<br />&nbsp;cs.close();<br />&nbsp;ct.close();<br />}<br />------------------------------------------------<br />-----------------------------------------------<br />------ＪＡＶＡ中--调用有回值的存储过程-----------------<br />try{<br />&nbsp;Class.forName();<br />&nbsp;Connection ct=DriverManager.getConnerction();<br />&nbsp;//调用有返回值存储过程<br />&nbsp;CallableStatement cs=ct.prepareCall("{call 存储过程名称(?,?)}") // ?代表存储过程参数 第一是输入，第二是输出<br />&nbsp;//第一个?输入参数<br />&nbsp;cs.setIn(1,10);<br />&nbsp;//给第二个？输出值赋值<br />&nbsp;cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR); //<br />&nbsp;//执行<br />&nbsp;cs.execute();<br />&nbsp;//取出返回值,<br />&nbsp;String name=cs。getString(2);<br />&nbsp;System.out。println("名称是："+name);<br />}catch(Exception e)<br />{<br />&nbsp;e.printStackTrace();<br />}finally{<br />&nbsp;cs.close();<br />&nbsp;ct.close();<br />}</p>
<p>------------------------------------------------<br />-----------------------------------------------<br />-------ＪＡＶＡ中-测试分页调用存储过程-----------------<br />try{<br />&nbsp;Class.forName();<br />&nbsp;Connection ct=DriverManager.getConnerction();<br />&nbsp;//调用有返回值存储过程<br />&nbsp;CallableStatement cs=ct.prepareCall("{call 分页存储过程名称(?,?,?,?,?,?)}") // ?代表存储过程参数 第一是输入，第二是输出<br />&nbsp;//?输入参数<br />&nbsp;cs.setString(1,'表名'); //表名<br />&nbsp;cs.setInt(2,5); //一页显示几条记录<br />&nbsp;cs.setInt(3,1); //显示第几页<br />&nbsp;//?输出参数<br />&nbsp;//注册总记录数<br />&nbsp;cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);<br />&nbsp;//注册总页数<br />&nbsp;cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);<br />&nbsp;//注册返回的结果集<br />&nbsp;cs.registerOutParameter(4,oracle.jdbc.OracleTypes.CURSOR); //类型是cursor游标</p>
<p>&nbsp;<br />&nbsp;//执行<br />&nbsp;cs.execute();<br />&nbsp;//取出总记录数<br />&nbsp;int rowNum=cs.getInt(4);//4表示参数中第四个？<br />&nbsp;//总页数<br />&nbsp;int pageCount=cs.getInt(5);<br />&nbsp;//返回的记录结果<br />&nbsp;ReaultSet rs=(ResultSet)cs.getObject(6);<br />&nbsp;while(rs.next())<br />&nbsp;{<br />&nbsp; int =rs。getInt(1); <br />&nbsp; String name=rs。getString(2);<br />&nbsp; System.out。println("名称是："+name);<br />&nbsp;<br />&nbsp;}</p>
<p>}catch(Exception e)<br />{<br />&nbsp;e.printStackTrace();<br />}finally{<br />&nbsp;cs.close();<br />&nbsp;ct.close();<br />}</p>
<p>A . 嵌套表 </p>
<p>1. 声明数组类型 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create or replace type tab_array is table of varchar2(38);暂时不要在包中声明该类型 </p>
<p>2. 创建存储过程 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- 该例子存储过程是在包中创建的,包名 arraydemo <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procedure testArray(resNumber in tab_array,procResult out tab_array) is <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procResult := new tab_array(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for i in 1..resNumber.Count loop <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procResult.EXTEND; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procResult(i) := resNumber(i) || 'lucifer' || i; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end loop; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; </p>
<p>3. Java调用代码 <br />&nbsp;&nbsp;&nbsp; //必须使用Oracle的连接和Statement,使用了连接池的必须通过一些方法获取原始的连接 <br />&nbsp;&nbsp;&nbsp; OracleConnection conn = null; <br />&nbsp;&nbsp;&nbsp; OracleCallableStatement stmt = null; <br />&nbsp;&nbsp;&nbsp; String[] param = { "1001", "1002", "1006" }; <br />&nbsp;&nbsp;&nbsp; stmt =(转换类型) conn.prepareCall("{call arraydemo.testArray(?,?)}"); <br />&nbsp;&nbsp;&nbsp; // 类型名必须大写 <br />&nbsp;&nbsp;&nbsp; ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("TAB_ARRAY", conn); <br />&nbsp;&nbsp;&nbsp; stmt.setARRAY(1, new ARRAY(descriptor,conn,param)); <br />&nbsp;&nbsp;&nbsp; stmt.registerOutParameter(2, OracleTypes.ARRAY, "TAB_ARRAY"); <br />&nbsp;&nbsp;&nbsp; stmt.execute(); <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; ARRAY array = stmt.getARRAY(2); <br />&nbsp;&nbsp;&nbsp; Datum[] data = array.getOracleArray(); <br />&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; data.length; i++) { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(i + " : " + new String(data.shareBytes())); <br />&nbsp;&nbsp;&nbsp; } <br />4 . 注意的问题及尚未解决的问题 <br />&nbsp;&nbsp;&nbsp; 抛出:Non supported character set: oracle-character-set-852 异常---解决:添加 nls_charset12.jar 到classpath,该包在oracle/ora92/jdbc/lib目录下 <br />&nbsp;&nbsp;&nbsp; 待解决问题: <br />&nbsp;&nbsp;&nbsp; a) 如何调用在包声明的自定义类型 <br />&nbsp;&nbsp;&nbsp; b) 比较不同声明类型的优缺点,及使用场合 <br />&nbsp;&nbsp;&nbsp; 嵌套表其它应用:http://zhouwf0726.itpub.net/post/9689/212253 </p>
<p>B . 索引表 <br />C . 内置数组 <br />D . 游标方式</p><img src ="http://www.blogjava.net/youngturk/aggbug/391366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2012-11-15 11:28 <a href="http://www.blogjava.net/youngturk/archive/2012/11/15/391366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>框架搭建好后,没有详细的错误信息,主页无法访问.用tomcat去调试,没有详细log..</title><link>http://www.blogjava.net/youngturk/archive/2012/11/08/391032.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Thu, 08 Nov 2012 08:19:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2012/11/08/391032.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/391032.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2012/11/08/391032.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/391032.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/391032.html</trackback:ping><description><![CDATA[<p align="left">这两天在搭建s<a href="http://www.linuxso.com/command/tr.html" target="_blank"><u>tr</u></a>uts2+spring+hibernate框架的过程中遇到如题的错误，在百度和谷歌上查了两天，以致快到了崩溃的边缘。最后还是解决了。这个问题的出现，原因有很多，在这总结如下，以供分享：<br /><br /><br /><br />框架搭建好后，启动服务器出现如下的信息：<br /><br />log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester).<br /><br />log4j:WARN Please initialize the log4j system properly.<br /><br />2009-11-6 21:39:17 org.apache.<a href="http://www.linuxso.com/command/cat.html" target="_blank"><u>cat</u></a>alina.core.StandardCont<a href="http://www.linuxso.com/command/ex.html" target="_blank"><u>ex</u></a>t start<br /><br />严重: Error listenerStart<br /><br />2009-11-6 21:39:17 org.apache.catalina.core.StandardContext start<br /><br />严重: Context startup failed <a href="http://www.linuxso.com/command/du.html" target="_blank"><u>du</u></a>e to previous errors<br /><br />2009-11-6 21:39:17 org.apache.catalina.core.StandardHostDeployer install<br /><br />信息: Installing web application at context path /to<a href="http://www.linuxso.com/command/mc.html" target="_blank"><u>mc</u></a>at-docs from URL <a href="http://www.linuxso.com/command/file.html" target="_blank"><u>file</u></a>:D:/server/Tomcat 5.0/webapps/tomcat-docs<br /><br />2009-11-6 21:39:17 org.apache.catalina.core.StandardHostDeployer install<br /><br />信息: Installing web application at context path /webdav from URL file:D:/server/Tomcat 5.0/webapps/webdav<br /><br />。。。。<br /><br /><br /><br />可能出错的地方：<br /><br />1.web.xml文件 web应用部署描述符，里面的部署的xml文件或者类，如果这些找不到就会发生startup failed due to previous errors错误。<br /><br />2.如果在应用spring的话，在配置文件applicationContext.xml中定义的类、xml文件找不到也会报这个错误。<br /><br />3.在web.xml，struts.xml，applicationContext.xml文件中自身有任何一点错误都可能引起上面的这个问题，而不仅仅是附带的文件错误导致。<br /><br />4.如果使用ibatis的话，在SqlMapConfig.xml中定义的xml文件找不到也会报这个错误。（hibernate的配置在整合spring的时候使用spring的配置文件）<br /><br />5.JDK的版本问题，最好使用JDK5.0 或者更高的版本。<br /><br />6.Eclipse和tomcat的版本兼容问题<br /><br />7.框架整合的过程中在导入到lib下的jar包冲突也可能产生该错误。<br /><br />8.jar包的缺少以及jar包的版本也可产生该错误。<br /><br />9.其他的原因<br /><br /><br /><br />解决该问题的途径：<br /><br />由于上面问题可能已经是web服务器内部产生了错误，而且IDE中的Log信息较少，问题的解决很难入手。<br /><br />而该问题的产生经常会导致页面跳转寻找不到文件的 Http 404 错误。。。。。<br /><br />可以通过在tomcat中添加log文件来让log信息提示的更精确一些，即设置log输出的等级。<br /><br />1.tomcat的安装路径下tomcat home下的common文件夹下的classes文件夹中创建log4j.properties文件，即<br /><br />。。。Apache Software Foundation/Tomcat 5.5/common/classes<br /><br />log4j.properties配置如下（配置是转载）：<br /><br />log4j.rootLogger=info,Console,R <br /><br />log4j.appender.Console=org.apache.log4j.ConsoleAppender<br /><br />log4j.appender.Console.layout=org.apache.log4j.PatternLayout<br /><br />#log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c - %m%n<br /><br />log4j.appender.Console.layout.ConversionPattern=%d{yy-MM-<a href="http://www.linuxso.com/command/dd.html" target="_blank"><u>dd</u></a> HH:mm:ss} %5p %c{1}:%L - %m%n<br /><br /><br /><br />log4j.appender.R=org.apache.log4j.DailyRollingFileAppender<br /><br />log4j.appender.R.File=${catalina.home}/logs/tomcat.log <br /><br />log4j.appender.R.layout=org.apache.log4j.PatternLayout<br /><br />log4j.appender.R.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss} %5p %c{1}(%L):? %m%n <br /><br /><br /><br />log4j.logger.org.apache=info,R<br /><br />log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG, R <br /><br />log4j.logger.org.apache.catalina.core=info,R<br /><br />log4j.logger.org.apache.catalina.session=info,R<br /><br /><br /><br />2.将log4j-1.2.15.jar和commons-logging.jar包拷贝到。。。Apache Software Foundation/Tomcat 5.5/common/lib下即可。<br /><br /><br /><br />做好上面两步，启动服务器的时候，会在tomcat的安装路径下的。。Apache Software Foundation/Tomcat 5.5/logs下自动的<br /><br />生成tomcat.log文件以记录日志信息。<br /><br />注：tomcat.log文件中的日志信息会记载很多，如果过大就可能产生磁盘空间不足的问题，建议定时的清除日志信息。<br /><br /><br />通过上面的日志文件信息可以定位到比较具体的问题根源，在仔细的查看问题一一攻破即可解决。<br /><br /><br />我在搭建框架之后，在web.xml文件中配置的欢迎页面显示的时候报404的错误，通过上面的途径找到了两个错误，虽然花了两天的时间，最终还是解决了。<br /></p><img src ="http://www.blogjava.net/youngturk/aggbug/391032.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2012-11-08 16:19 <a href="http://www.blogjava.net/youngturk/archive/2012/11/08/391032.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat5.0连接池配置（oracle / mysql / sqlserver2000）</title><link>http://www.blogjava.net/youngturk/archive/2012/11/07/390915.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Wed, 07 Nov 2012 01:37:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2012/11/07/390915.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/390915.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2012/11/07/390915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/390915.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/390915.html</trackback:ping><description><![CDATA[<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">配置一：XML方法</p>
<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1、下载proxool 地址：http://proxool.sourceforge.net<br />&nbsp;&nbsp;&nbsp; 2、解压缩proxool-0.9.0RC2.zip，拷贝lib/proxool-0.9.0RC2.jar到web-info/lib<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 拷贝jdbc驱动到web-info/lib<br />&nbsp;&nbsp;&nbsp; 3、在web-info下建立文件：proxool.xml<br />&nbsp;&nbsp;&nbsp;&nbsp; 文件内容如下：<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;something-else-entirely&gt;<br />&nbsp; &lt;proxool&gt;<br />&nbsp;&nbsp;&nbsp; &lt;alias&gt;<span style="color: rgb(255,0,0)">Develop</span>&lt;/alias&gt;<br />&nbsp;&nbsp;&nbsp; &lt;driver-url&gt;jdbc:oracle:thin:@192.168.100.18:1521:RNMS&lt;/driver-url&gt;<br />&nbsp;&nbsp;&nbsp; &lt;driver-class&gt;oracle.jdbc.driver.OracleDriver&lt;/driver-class&gt;<br />&nbsp;&nbsp;&nbsp; &lt;driver-properties&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="user" value="scmlp"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="password" &nbsp;value="scmlpscmlp"/&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/driver-properties&gt;<br />&nbsp;&nbsp;&nbsp; &lt;maximum-connection-count&gt;500&lt;/maximum-connection-count&gt;<br />&nbsp;&nbsp;&nbsp; &lt;house-keeping-test-sql&gt;select CURRENT_DATE&lt;/house-keeping-test-sql&gt;<br />&nbsp; &lt;/proxool&gt;<br />&lt;/something-else-entirely&gt;<br /><br />&nbsp;&nbsp;&nbsp; 4、在web.xml文件内加入以下内容：<br /><br />&lt;servlet&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;proxoolServletConfigurator&lt;/servlet-name&gt;<br />&nbsp;&lt;servlet-class&gt;org.logicalcobwebs.proxool.configuration.ServletConfigurator&lt;/servlet-class&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;xmlFile&lt;/param-name&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;WEB-INF/proxool.xml&lt;/param-value&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />&nbsp;&nbsp; &lt;/servlet&gt;<br />&lt;!-- proxool提供的管理监控工具，可查看当前数据库连接情况。如果运行不成功，请删除本行 --&gt;<br />&nbsp;&nbsp; &lt;servlet&gt;<br />&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;Admin&lt;/servlet-name&gt;<br />&nbsp; &nbsp; &nbsp; &lt;servlet-class&gt;org.logicalcobwebs.proxool.admin.servlet.AdminServlet&lt;/servlet-class&gt;<br />&nbsp;&nbsp; &lt;/servlet&gt;<br />&nbsp;&nbsp; &lt;servlet-mapping&gt;<br />&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;Admin&lt;/servlet-name&gt;<br />&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/admin&lt;/url-pattern&gt;<br />&nbsp;&nbsp; &lt;/servlet-mapping&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp; 5、在调用数据库连接代码：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Connection conn = DriverManager.getConnection("proxool.<span style="color: rgb(255,0,0)">Develop</span>");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp; 6、利用proxool监控工具查看数据库运行状态。地址：./admin</p>
<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">配置二：properties方法</p>
<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1，下载proxool-0.8.3.jar并放到相应的目录，这个应该比较简单了 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; 2，写一个配置文件放到web-inf目录下，配置文件内容如下： &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; jdbc-0.proxool.alias=bidding &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; jdbc-0.proxool.driver-url=jjdbc:oracle:thin:@127.0.0.1:1521:dbname &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; jdbc-0.proxool.driver-class=oracle.jdbc.driver.oracledriver &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; jdbc-0.user=name &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; jdbc-0.password=pass &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; jdbc-0.proxool.maximum-connection-count=200 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; jdbc-0.proxool.house-keeping-test-sql=select &nbsp; * &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; 3，在web-inf/web.xml中添加如下代码： &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &lt;servlet&gt; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;servlet-name&gt;servletconfigurator&lt;/servlet-name&gt; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;servlet-lass&gt;org.logicalcobwebs.proxool.configuration.servletconfigurator&lt;/servlet-class&gt; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;init-param&gt; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;param-name&gt;propertyfile&lt;/param-name&gt; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;param-value&gt;web-inf/proxool.properties&lt;/param-value&gt; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/init-param&gt; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/servlet&gt; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; 4，配置就这么简单，下面给你一段怎么得到一个连接代码，其他的应该就比较简单了 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public &nbsp; connection &nbsp; getconnection() &nbsp; { &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try &nbsp; { &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; conn &nbsp; = &nbsp; drivermanager.getconnection("proxool.bidding"); &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }catch(sqlexception &nbsp; ex){ &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ex.printstacktrace(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; finally &nbsp; { &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try &nbsp; { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if &nbsp; (conn &nbsp; != &nbsp; null) &nbsp; { &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; conn.close(); &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; catch &nbsp; (sqlexception &nbsp; e) &nbsp; { &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.printstacktrace(); &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log("problem &nbsp; closing &nbsp; connection"); &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &nbsp; conn; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></p><img src ="http://www.blogjava.net/youngturk/aggbug/390915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2012-11-07 09:37 <a href="http://www.blogjava.net/youngturk/archive/2012/11/07/390915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>httprequestreq 是单例模式 req乱码</title><link>http://www.blogjava.net/youngturk/archive/2012/10/11/389414.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Thu, 11 Oct 2012 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2012/10/11/389414.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/389414.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2012/10/11/389414.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/389414.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/389414.html</trackback:ping><description><![CDATA[在对httprequest req<br />req重新设置时候每次都会循环原来的req值所以进行乱码处理的时候不能用<br />SUserInfo account = (SUserInfo)session.getAttribute("suserInfo");<br />session中的account 进行set,然后返回account ,这样会把set值循环,如果改变了其中一个<img src ="http://www.blogjava.net/youngturk/aggbug/389414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2012-10-11 17:17 <a href="http://www.blogjava.net/youngturk/archive/2012/10/11/389414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat设置虚拟目录的方法, 不修改server.xml </title><link>http://www.blogjava.net/youngturk/archive/2012/10/10/389276.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Wed, 10 Oct 2012 01:16:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2012/10/10/389276.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/389276.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2012/10/10/389276.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/389276.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/389276.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">在tomcat文件夹的conf\catalina\localhost增加project&nbsp;.xml文件<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />文件内容:&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">Context&nbsp;path</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/project</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;reloadable</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;docBase</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">E:\javastudio\oob</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;workDir</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">E:\javastudio\oob\work</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />docBase是项目文件夹的web</span><span style="color: #000000">-</span><span style="color: #000000">inf文件夹的上一层目录<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />workDir是指Tomcat解析Jsp转换为Java文件，并编译为class存放的文件夹，设置&nbsp;在项目文件夹里面，可以避免移植到其他地方首次读取jsp文件需要重新解析&nbsp;。一般格式：项目文件夹\work<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />reloadable是指可以重新加载，一般设置为true，方便使用，不需要经常重启Tomcat。&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />以后启动Tomcat，在浏览器输入http:</span><span style="color: #008000">//</span><span style="color: #008000">localhost:8080/project就能访问该项目的welcome文件。</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">***************</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />为什么要不修改server.xml呢？在Tomcat6的doc帮助文档中，官方是不提倡修改&nbsp;server.xml来添加虚拟目录的！<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而我认为，以上使用的方法，非常方便于项目的移植，移植后，只有修改docBase和workDir的值就行了，甚至可以去掉workDir这个属性！<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">***************</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />代码&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">Context&nbsp;path</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/ucshop</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;reloadable</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;docBase</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">G:\UCshop\ucshop</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;workDir</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">G:\UCshop\ucshop\work</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">Resource&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">jdbc/ucshop</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;auth</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">Container</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javax.sql.DataSource</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;driverClassName</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.microsoft.jdbc.sqlserver.SQLServerDriver</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ucshop</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">sa</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">sa</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxIdle</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">5</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxWait</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">5000</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxActive</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">10</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">Context</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />注：如果不需要数据源，可以不写resource标签的部分。<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><img src ="http://www.blogjava.net/youngturk/aggbug/389276.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2012-10-10 09:16 <a href="http://www.blogjava.net/youngturk/archive/2012/10/10/389276.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Method 类中 invoke方法的调用</title><link>http://www.blogjava.net/youngturk/archive/2012/05/24/379057.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Thu, 24 May 2012 10:54:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2012/05/24/379057.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/379057.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2012/05/24/379057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/379057.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/379057.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; height: 551px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_94_1707_Open_Image" onclick="this.style.display='none'; Codehighlighter1_94_1707_Open_Text.style.display='none'; Codehighlighter1_94_1707_Closed_Image.style.display='inline'; Codehighlighter1_94_1707_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_94_1707_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_94_1707_Closed_Text.style.display='none'; Codehighlighter1_94_1707_Open_Image.style.display='inline'; Codehighlighter1_94_1707_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;invokeActionHandler(ModelAndView&nbsp;mv&nbsp;,&nbsp;HttpServletRequest&nbsp;request)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_94_1707_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_94_1707_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;className&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mv.getClassName();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;methodName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mv.getMethodName();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">load&nbsp;class</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;controllerClass&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cache.loadClass(className);</span><span style="color: #008000">//</span><span style="color: #008000">==&nbsp;Class.forName(className);java反射机制，jvm加载lassName类</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;parentControllerClass&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cache.loadClass(baseControllerClass);</span><span style="color: #008000">//</span><span style="color: #008000">class&nbsp;org.bluechant.mvc.controller.Controller<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">load&nbsp;method参数1类，创建一个方法为setRequest参数为HttpServletRequest.class的方法与method&nbsp;=&nbsp;clazz.getDeclaredMethod(setRequest,&nbsp;HttpServletRequest.class);与HttpServletRequest的setRequest方法一致的方法.</span><span style="color: #008000"><br /><img id="Codehighlighter1_683_710_Open_Image" onclick="this.style.display='none'; Codehighlighter1_683_710_Open_Text.style.display='none'; Codehighlighter1_683_710_Closed_Image.style.display='inline'; Codehighlighter1_683_710_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_683_710_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_683_710_Closed_Text.style.display='none'; Codehighlighter1_683_710_Open_Image.style.display='inline'; Codehighlighter1_683_710_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;setRequest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cache.loadMethod(parentControllerClass,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">setRequest</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Class[]&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_683_710_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_683_710_Open_Text"><span style="color: #000000">{&nbsp;HttpServletRequest.</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">HttpServletRequest.class，java的反射机制得到自己的类，能够拥有自己的方法值，（Method&nbsp;setRequest获取成员函数）</span><span style="color: #008000"><br /><img id="Codehighlighter1_892_913_Open_Image" onclick="this.style.display='none'; Codehighlighter1_892_913_Open_Text.style.display='none'; Codehighlighter1_892_913_Closed_Image.style.display='inline'; Codehighlighter1_892_913_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_892_913_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_892_913_Closed_Text.style.display='none'; Codehighlighter1_892_913_Open_Image.style.display='inline'; Codehighlighter1_892_913_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;setModelAndView&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cache.loadMethod(parentControllerClass,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">setModelAndView</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Class[]&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_892_913_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_892_913_Open_Text"><span style="color: #000000">{&nbsp;ModelAndView.</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">org.bluechant.mvc.controller.Controller-setModelAndView@6024418&nbsp;&nbsp;public&nbsp;void&nbsp;org.bluechant.mvc.controller.Controller.setModelAndView(org.bluechant.mvc.controller.ModelAndView)</span><span style="color: #008000"><br /><img id="Codehighlighter1_1175_1176_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1175_1176_Open_Text.style.display='none'; Codehighlighter1_1175_1176_Closed_Image.style.display='inline'; Codehighlighter1_1175_1176_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1175_1176_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1175_1176_Closed_Text.style.display='none'; Codehighlighter1_1175_1176_Open_Image.style.display='inline'; Codehighlighter1_1175_1176_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;targetMethod&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cache.loadMethod(controllerClass,&nbsp;methodName,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Class[]</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1175_1176_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1175_1176_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">buiid&nbsp;controller&nbsp;instance&nbsp;and&nbsp;invoke&nbsp;target&nbsp;method以上setRequest，setModelAndView，targetMethod都放在cache（hashMap中）</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;instance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;controllerClass.newInstance();</span><span style="color: #008000">//</span><span style="color: #008000">加载className类</span><span style="color: #008000"><br /><img id="Codehighlighter1_1402_1412_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1402_1412_Open_Text.style.display='none'; Codehighlighter1_1402_1412_Closed_Image.style.display='inline'; Codehighlighter1_1402_1412_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1402_1412_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1402_1412_Closed_Text.style.display='none'; Codehighlighter1_1402_1412_Open_Image.style.display='inline'; Codehighlighter1_1402_1412_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setRequest.invoke(instance,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1402_1412_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1402_1412_Open_Text"><span style="color: #000000">{&nbsp;request&nbsp;}</span></span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">对带有指定参数的指定对象调用由此&nbsp;Method&nbsp;对象表示的基础方法&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /><img id="Codehighlighter1_1500_1505_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1500_1505_Open_Text.style.display='none'; Codehighlighter1_1500_1505_Closed_Image.style.display='inline'; Codehighlighter1_1500_1505_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1500_1505_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1500_1505_Closed_Text.style.display='none'; Codehighlighter1_1500_1505_Open_Image.style.display='inline'; Codehighlighter1_1500_1505_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setModelAndView.invoke(instance,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1500_1505_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1500_1505_Open_Text"><span style="color: #000000">{&nbsp;mv&nbsp;}</span></span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">instance立即为原型指针</span><span style="color: #008000"><br /><img id="Codehighlighter1_1570_1571_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1570_1571_Open_Text.style.display='none'; Codehighlighter1_1570_1571_Closed_Image.style.display='inline'; Codehighlighter1_1570_1571_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1570_1571_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1570_1571_Closed_Text.style.display='none'; Codehighlighter1_1570_1571_Open_Image.style.display='inline'; Codehighlighter1_1570_1571_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetMethod.invoke(instance,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1570_1571_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1570_1571_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">调用instance类中targetMethod这个方法，Object[]{}这个作为参数..<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">invoke根据实体获得方法，添加所要造的参数，就是个找实例的方法克隆工厂，由Method获得实例模型，由方法锻造样子，传入参数得出想要结果<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br /></span><span style="color: red">方法说明实例：
<p><br />}<br />class ClassB{<br />&nbsp;public ClassB(){<br />&nbsp;&nbsp;System.out.println("this is ClassB");<br />&nbsp;}</p>
<p>&nbsp;public Object invokeMehton(Object owner,String methodName,Object[] args) throws Exception{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //根据methodName获得owner里面的方法。args是对应方案参数。<br />&nbsp;&nbsp;Class wnerClass=owner.getClass();<br />&nbsp;&nbsp;Class[] argsClass=new Class[args.length];<br />&nbsp;&nbsp;for(int i=0,j=args.length;i&lt;j;i++){<br />&nbsp;&nbsp;&nbsp; argsClass[i] = args[i].getClass();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;Method method = ownerClass.getMethod(methodName, argsClass);&nbsp;<br />&nbsp;&nbsp;return method.invoke(owner, args);<br />&nbsp;}<br />}</p>
<p>输出为<br />this is ClassB<br />300<br />outabccc</p>
<p>说明c调用Class方法成功。</p></span><span style="color: #000000"><br />import <a onclick="javascript:tagshow(event, 'java');" href="javascript:;" target="_self"><u><strong>java</strong></u></a>.lang.reflect.Method; 
<p>public class ClassA {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //ClassA里面有add、和StringAdd两个不同方法。c是ClassB的Object<br />&nbsp;ClassB c=new ClassB();<br />&nbsp;public void add(Integer param1, Integer param2) {&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; System.out.println(param1 + param2);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp; }<br />&nbsp;public void StringAdd(String abc){<br />&nbsp;&nbsp;System.out.println("out"+abc);<br />&nbsp;}<br />&nbsp;public static void main(String[] args){<br />&nbsp;&nbsp;ClassA a=new ClassA();<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;a.c.invokeMehton(a, "add",new Object[] {new Integer(100),new Integer(200)});//反射调用方法add<br />&nbsp;&nbsp;&nbsp;a.c.invokeMehton(a, "StringAdd",new Object[] {new String("abccc")});//反射调用方法StringAdd<br />&nbsp;&nbsp;} catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;}</p></span></span></div><br />&nbsp; <br /><br /><br /><br /><img src ="http://www.blogjava.net/youngturk/aggbug/379057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2012-05-24 18:54 <a href="http://www.blogjava.net/youngturk/archive/2012/05/24/379057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java连接数据库（第一步）</title><link>http://www.blogjava.net/youngturk/archive/2012/05/24/379048.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Thu, 24 May 2012 08:49:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2012/05/24/379048.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/379048.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2012/05/24/379048.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/379048.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/379048.html</trackback:ping><description><![CDATA[<div>需要联系的几个文件：DaosupportController,extents Controller,BeanFactory,CoreDispatcherController,appcontext.xml.<br />有web.xml中<br />&lt;servlet&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- servlet获得控制文件Class的名字，类名 --&gt;<br />&nbsp;&nbsp;&lt;servlet-name&gt;smvcCoreDispatcher&lt;/servlet-name&gt;<br />&nbsp;&nbsp;&lt;servlet-class&gt;org.bluechant.mvc.core.CoreDispatcherController&lt;/servlet-class&gt;<br />.....<br />&lt;/servlet&gt;<br />有CoreDispatcherController开始--&gt; 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
<p><img id="Codehighlighter1_94_2225_Open_Image" onclick="this.style.display='none'; Codehighlighter1_94_2225_Open_Text.style.display='none'; Codehighlighter1_94_2225_Closed_Image.style.display='inline'; Codehighlighter1_94_2225_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_94_2225_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_94_2225_Closed_Text.style.display='none'; Codehighlighter1_94_2225_Open_Image.style.display='inline'; Codehighlighter1_94_2225_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;invokeActionHandler(ModelAndView&nbsp;mv&nbsp;,&nbsp;HttpServletRequest&nbsp;request)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_94_2225_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_94_2225_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;className&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mv.getClassName();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;methodName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mv.getMethodName();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">load&nbsp;class</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;controllerClass&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cache.loadClass(className);</span><span style="color: #008000">//</span><span style="color: #008000">==&nbsp;Class.forName(className);java反射机制，jvm加载lassName类</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;parentControllerClass&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cache.loadClass(baseControllerClass);</span><span style="color: #008000">//</span><span style="color: #008000">class&nbsp;org.bluechant.mvc.controller.Controller<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">load&nbsp;method参数1类，创建一个方法为setRequest参数为HttpServletRequest.class的方法与method&nbsp;=&nbsp;clazz.getDeclaredMethod(setRequest,&nbsp;HttpServletRequest.class);与HttpServletRequest的setRequest方法一致的方法.</span><span style="color: #008000"><br /><img id="Codehighlighter1_683_710_Open_Image" onclick="this.style.display='none'; Codehighlighter1_683_710_Open_Text.style.display='none'; Codehighlighter1_683_710_Closed_Image.style.display='inline'; Codehighlighter1_683_710_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_683_710_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_683_710_Closed_Text.style.display='none'; Codehighlighter1_683_710_Open_Image.style.display='inline'; Codehighlighter1_683_710_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;setRequest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cache.loadMethod(parentControllerClass,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">setRequest</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Class[]&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_683_710_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_683_710_Open_Text"><span style="color: #000000">{&nbsp;HttpServletRequest.</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">HttpServletRequest.class，java的反射机制得到自己的类，能够拥有自己的方法值，（Method&nbsp;setRequest获取成员函数）</span><span style="color: #008000"><br /><img id="Codehighlighter1_892_913_Open_Image" onclick="this.style.display='none'; Codehighlighter1_892_913_Open_Text.style.display='none'; Codehighlighter1_892_913_Closed_Image.style.display='inline'; Codehighlighter1_892_913_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_892_913_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_892_913_Closed_Text.style.display='none'; Codehighlighter1_892_913_Open_Image.style.display='inline'; Codehighlighter1_892_913_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;setModelAndView&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cache.loadMethod(parentControllerClass,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">setModelAndView</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Class[]&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_892_913_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_892_913_Open_Text"><span style="color: #000000">{&nbsp;ModelAndView.</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">org.bluechant.mvc.controller.Controller-setModelAndView@6024418&nbsp;&nbsp;public&nbsp;void&nbsp;org.bluechant.mvc.controller.Controller.setModelAndView(org.bluechant.mvc.controller.ModelAndView)</span><span style="color: #008000"><br /><img id="Codehighlighter1_1175_1176_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1175_1176_Open_Text.style.display='none'; Codehighlighter1_1175_1176_Closed_Image.style.display='inline'; Codehighlighter1_1175_1176_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1175_1176_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1175_1176_Closed_Text.style.display='none'; Codehighlighter1_1175_1176_Open_Image.style.display='inline'; Codehighlighter1_1175_1176_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;targetMethod&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cache.loadMethod(controllerClass,&nbsp;methodName,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Class[]</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1175_1176_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1175_1176_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">buiid&nbsp;controller&nbsp;instance&nbsp;and&nbsp;invoke&nbsp;target&nbsp;method以上setRequest，setModelAndView，targetMethod都放在cache（hashMap中）</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;instance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;controllerClass.newInstance();</span><span style="color: #008000">//</span><span style="color: #008000">加载className类<font color="#008000"><strong><u>;//此方法引入数据库连接</u></strong>&nbsp;</font><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red">//</span><span style="color: red">以上刚进入页面的时候instance调用三个类初始化，分别是继承关系DaosupportController&nbsp;，controller，和BeanFactory</span><span style="color: #008000"><br /><img id="Codehighlighter1_1445_1804_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1445_1804_Open_Text.style.display='none'; Codehighlighter1_1445_1804_Closed_Image.style.display='inline'; Codehighlighter1_1445_1804_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1445_1804_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1445_1804_Closed_Text.style.display='none'; Codehighlighter1_1445_1804_Open_Image.style.display='inline'; Codehighlighter1_1445_1804_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; color: red; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1445_1804_Closed_Text">/**/</span><span id="Codehighlighter1_1445_1804_Open_Text"><span style="color: red">/*</span><span style="color: red">---&gt;&gt;&gt;其中DaoSupportController类中protected&nbsp;ObjectDao&nbsp;dao&nbsp;=&nbsp;(ObjectDao)BeanFactory.getBean("objectDao");<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---&gt;&gt;&gt;调用：getBean&nbsp;方法public&nbsp;class&nbsp;BeanFactory&nbsp;{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;ApplicationContext&nbsp;context&nbsp;=&nbsp;new&nbsp;ClassPathXmlApplicationContext("appcontext.xml")&nbsp;</span><span style="color: red"><strong><u>;//此方法引入数据库连接</u></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Object&nbsp;getBean(String&nbsp;beanId)&nbsp;{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;context.getBean(beanId);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: red">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_1849_1859_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1849_1859_Open_Text.style.display='none'; Codehighlighter1_1849_1859_Closed_Image.style.display='inline'; Codehighlighter1_1849_1859_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1849_1859_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1849_1859_Closed_Text.style.display='none'; Codehighlighter1_1849_1859_Open_Image.style.display='inline'; Codehighlighter1_1849_1859_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setRequest.invoke(instance,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1849_1859_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1849_1859_Open_Text"><span style="color: #000000">{&nbsp;request&nbsp;}</span></span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">对带有指定参数的指定对象调用由此&nbsp;Method&nbsp;对象表示的基础方法&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /><img id="Codehighlighter1_1947_1952_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1947_1952_Open_Text.style.display='none'; Codehighlighter1_1947_1952_Closed_Image.style.display='inline'; Codehighlighter1_1947_1952_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1947_1952_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1947_1952_Closed_Text.style.display='none'; Codehighlighter1_1947_1952_Open_Image.style.display='inline'; Codehighlighter1_1947_1952_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setModelAndView.invoke(instance,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1947_1952_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1947_1952_Open_Text"><span style="color: #000000">{&nbsp;mv&nbsp;}</span></span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">instance立即为原型指针<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: yellow; color: #008000">---&gt;&gt;&gt;执行指定的targetMethod方法实则为AccountController的login（）登陆方法此时开始调用数据库</span><span style="color: #008000"><br /><img id="Codehighlighter1_2088_2089_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2088_2089_Open_Text.style.display='none'; Codehighlighter1_2088_2089_Closed_Image.style.display='inline'; Codehighlighter1_2088_2089_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_2088_2089_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_2088_2089_Closed_Text.style.display='none'; Codehighlighter1_2088_2089_Open_Image.style.display='inline'; Codehighlighter1_2088_2089_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetMethod.invoke(instance,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_2088_2089_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2088_2089_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">调用instance类中targetMethod这个方法，Object[]{}这个作为参数..<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">invoke根据实体获得方法，添加所要造的参数，就是个找实例的方法克隆工厂，由Method获得实例模型，由方法锻造样子，传入参数得出想要结果<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />}</span></p></div><br /><br /></div><img src ="http://www.blogjava.net/youngturk/aggbug/379048.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2012-05-24 16:49 <a href="http://www.blogjava.net/youngturk/archive/2012/05/24/379048.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java下Class.forName的作用是什么，为什么要使用它</title><link>http://www.blogjava.net/youngturk/archive/2012/05/24/379024.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Thu, 24 May 2012 06:32:00 GMT</pubDate><guid>http://www.blogjava.net/youngturk/archive/2012/05/24/379024.html</guid><wfw:comment>http://www.blogjava.net/youngturk/comments/379024.html</wfw:comment><comments>http://www.blogjava.net/youngturk/archive/2012/05/24/379024.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngturk/comments/commentRss/379024.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngturk/services/trackbacks/379024.html</trackback:ping><description><![CDATA[<p>Class.forName(xxx.xx.xx)&nbsp;返回的是一个类</p>
<p>首先你要明白在java里面任何class都要装载在虚拟机上才能运行。这句话就是装载类用的(和new&nbsp;不一样，要分清楚)。&nbsp;<br /><br />至于什么时候用，你可以考虑一下这个问题，给你一个字符串变量，它代表一个类的包名和类名，你怎么实例化它？只有你提到的这个方法了，不过要再加一点。&nbsp;<br />A&nbsp;a&nbsp;=&nbsp;(A)Class.forName("pacage.A").newInstance();&nbsp;<br />这和你&nbsp;<br />A&nbsp;a&nbsp;=&nbsp;new&nbsp;A()；&nbsp;<br />是一样的效果。&nbsp;<br /><br />关于补充的问题&nbsp;<br />答案是肯定的，jvm会执行静态代码段，你要记住一个概念，静态代码是和class绑定的，class装载成功就表示执行了你的静态代码了。而且以后不会再走这段静态代码了。</p>
<p>Class.forName(xxx.xx.xx)&nbsp;返回的是一个类&nbsp;<br />Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类，也就是说JVM会执行该类的静态代码段</p>
<p>动态加载和创建Class&nbsp;对象，比如想根据用户输入的字符串来创建对象&nbsp;<br />String&nbsp;str&nbsp;=&nbsp;用户输入的字符串&nbsp;<br />Class&nbsp;t&nbsp;=&nbsp;Class.forName(str);&nbsp;<br />t.newInstance();</p>
<p>&nbsp;在初始化一个类，生成一个实例的时候，newInstance()方法和new关键字除了一个是方法，一个是关键字外，最主要有什么区别？它们的区别在于创建对象的方式不一样，前者是使用类加载机制，后者是创建一个新类。那么为什么会有两种创建对象方式？这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。&nbsp;<br /><br />Java中工厂模式经常使用newInstance()方法来创建对象，因此从为什么要使用工厂模式上可以找到具体答案。&nbsp;例如：&nbsp;<br />class&nbsp;c&nbsp;=&nbsp;Class.forName(&#8220;Example&#8221;);&nbsp;<br />factory&nbsp;=&nbsp;(ExampleInterface)c.newInstance();&nbsp;<br /><br />其中ExampleInterface是Example的接口，可以写成如下形式：&nbsp;<br />String&nbsp;className&nbsp;=&nbsp;"Example";&nbsp;<br />class&nbsp;c&nbsp;=&nbsp;Class.forName(className);&nbsp;<br />factory&nbsp;=&nbsp;(ExampleInterface)c.newInstance();&nbsp;<br /><br />进一步可以写成如下形式：&nbsp;<br />String&nbsp;className&nbsp;=&nbsp;readfromXMlConfig;//从xml&nbsp;配置文件中获得字符串&nbsp;<br />class&nbsp;c&nbsp;=&nbsp;Class.forName(className);&nbsp;<br />factory&nbsp;=&nbsp;(ExampleInterface)c.newInstance();&nbsp;<br /><br />上面代码已经不存在Example的类名称，它的优点是，无论Example类怎么变化，上述代码不变，甚至可以更换Example的兄弟类Example2&nbsp;,&nbsp;Example3&nbsp;,&nbsp;Example4&#8230;&#8230;，只要他们继承ExampleInterface就可以。&nbsp;<br /><br />从JVM的角度看，我们使用关键字new创建一个类的时候，这个类可以没有被加载。但是使用newInstance()方法的时候，就必须保证：1、这个类已经加载；2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的，这个静态方法调用了启动类加载器，即加载 java&nbsp;API的那个加载器。&nbsp;<br /><br />现在可以看出，newInstance()实际上是把new这个方式分解为两步，即首先调用Class加载方法加载某个类，然后实例化。&nbsp;这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性，提供给了一种降耦的手段。&nbsp;<br /><br />最后用最简单的描述来区分new关键字和newInstance()方法的区别：&nbsp;<br />newInstance:&nbsp;弱类型。低效率。只能调用无参构造。&nbsp;<br />new:&nbsp;强类型。相对高效。能调用任何public构造。</p><img src ="http://www.blogjava.net/youngturk/aggbug/379024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngturk/" target="_blank">youngturk</a> 2012-05-24 14:32 <a href="http://www.blogjava.net/youngturk/archive/2012/05/24/379024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>