<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8333902247329681149</id><updated>2012-02-16T01:44:10.225-08:00</updated><category term='linux'/><category term='javascript'/><category term='java'/><category term='ajax'/><category term='spring'/><category term='Mysql'/><title type='text'>Alex In Summer</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-4002899812066691969</id><published>2008-11-29T02:15:00.000-08:00</published><updated>2008-11-29T02:16:36.269-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>进程管理</title><content type='html'>fg、bg、jobs、&amp;、ctrl + z都是跟系统任务有关的，虽然现在基本上不怎么需要用到这些命令，但学会了也是很实用的&lt;br /&gt;一。&amp; 最经常被用到&lt;br /&gt;   这个用在一个命令的最后，可以把这个命令放到后台执行&lt;br /&gt;二。ctrl + z&lt;br /&gt;     可以将一个正在前台执行的命令放到后台，并且暂停&lt;br /&gt;三。jobs&lt;br /&gt;     查看当前有多少在后台运行的命令&lt;br /&gt;四。fg&lt;br /&gt;     将后台中的命令调至前台继续运行&lt;br /&gt;   如果后台中有多个命令，可以用 fg %jobnumber将选中的命令调出，%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)&lt;br /&gt;五。bg&lt;br /&gt;     将一个在后台暂停的命令，变成继续执行&lt;br /&gt;   如果后台中有多个命令，可以用bg %jobnumber将选中的命令调出，%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Linux下使用Shell命令控制任务Jobs执行&lt;br /&gt;下列命令可以用来操纵进程任务：&lt;br /&gt;　　ps 列出系统中正在运行的进程；&lt;br /&gt;　　kill 发送信号给一个或多个进程（经常用来杀死一个进程）；&lt;br /&gt;　　jobs 列出当前shell环境中已启动的任务状态，若未指定jobsid，则显示所有活动的任务状态信息；如果报告了一个任务的终止(即任务的状态被标记为Terminated)，shell 从当前的shell环境已知的列表中删除任务的进程标识；&lt;br /&gt;　　bg 将进程搬到后台运行（Background）；&lt;br /&gt;　　fg 将进程搬到前台运行（Foreground）；&lt;br /&gt;&lt;br /&gt;　　将job转移到后台运行&lt;br /&gt;　　如果你经常在X图形下工作，你可能有这样的经历：通过终端命令运行一个GUI程序，GUI界面出来了，但是你的终端还停留在原地，你不能在shell中继续执行其他命令了，除非将GUI程序关掉。&lt;br /&gt;&lt;br /&gt;　　为了使程序执行后终端还能继续接受命令，你可以将进程移到后台运行，使用如下命令运行程序： #假设要运行xmms&lt;br /&gt;&lt;br /&gt;　　$xmms &amp;&lt;br /&gt;&lt;br /&gt;　　这样打开xmms后，终端的提示又回来了。现在xmms在后台运行着呢；但万一你运行程序时忘记使用“&amp;”了，又不想重新执行；你可以先使用ctrl+z挂起程序，然后敲入bg命令，这样程序就在后台继续运行了。&lt;br /&gt;&lt;br /&gt;　　概念：当前任务&lt;br /&gt;&lt;br /&gt;　　如果后台的任务号有2个，[1],[2]；如果当第一个后台任务顺利执行完毕，第二个后台任务还在执行中时，当前任务便会自动变成后台任务号码“[2]”的后台任务。所以可以得出一点，即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时，如果不加任何引号，则所变动的均是当前任务。&lt;br /&gt;&lt;br /&gt;　　察看jobs&lt;br /&gt;　　使用jobs或ps命令可以察看正在执行的jobs。&lt;br /&gt;&lt;br /&gt;　　jobs命令执行的结果，＋表示是一个当前的作业，减号表是是一个当前作业之后的一个作业，jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了（kill），shell 从当前的shell环境已知的列表中删除任务的进程标识；也就是说，jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息；&lt;br /&gt;&lt;br /&gt;　　进程的挂起&lt;br /&gt;&lt;br /&gt;　　后台进程的挂起：&lt;br /&gt;&lt;br /&gt;　　在solaris中通过stop命令执行，通过jobs命令查看job号(假设为num)，然后执行stop %num；&lt;br /&gt;&lt;br /&gt;　　在redhat中，不存在stop命令，可通过执行命令kill -stop PID，将进程挂起；&lt;br /&gt;&lt;br /&gt;　　当要重新执行当前被挂起的任务时，通过bg %num 即可将挂起的job的状态由stopped改为running，仍在后台执行；当需要改为在前台执行时，执行命令fg %num即可；&lt;br /&gt;&lt;br /&gt;　　前台进程的挂起：&lt;br /&gt;&lt;br /&gt;　　ctrl+Z;&lt;br /&gt;&lt;br /&gt;　　进程的终止&lt;br /&gt;&lt;br /&gt;　　后台进程的终止：&lt;br /&gt;　　方法一：&lt;br /&gt;　　通过jobs命令查看job号（假设为num），然后执行kill %num&lt;br /&gt;&lt;br /&gt;　　方法二：&lt;br /&gt;　　通过ps命令查看job的进程号（PID，假设为pid），然后执行kill pid&lt;br /&gt;&lt;br /&gt;　　前台进程的终止：&lt;br /&gt;&lt;br /&gt;　　ctrl+c&lt;br /&gt;&lt;br /&gt;　　kill的其他作用&lt;br /&gt;　　kill除了可以终止进程，还能给进程发送其它信号，使用kill -l 可以察看kill支持的信号。&lt;br /&gt;&lt;br /&gt;　　SIGTERM是不带参数时kill发送的信号，意思是要进程终止运行，但执行与否还得看进程是否支持。如果进程还没有终止，可以使用kill -SIGKILL pid，这是由内核来终止进程，进程不能监听这个信号。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-4002899812066691969?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/4002899812066691969/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=4002899812066691969' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/4002899812066691969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/4002899812066691969'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/11/blog-post.html' title='进程管理'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-5881211110176747936</id><published>2008-09-27T18:20:00.000-07:00</published><updated>2008-09-27T18:21:16.021-07:00</updated><title type='text'>ubuntu 乱码</title><content type='html'>最近Ubuntu 8.04修改了系统字体配置文件的构成，将原来的/etc/fonts/language-selector.conf分解成了四个文件，分别对应到 /etc/fonts/conf.d/下的29-language-selector-zh.conf、69-language-selector- zh-cn.conf、99-language-selector-zh.conf和CJK_aliases，而我们经常修改的sans字体渲染顺序在 69-language-selector-zh-cn.conf文件中，所以如果您发现系统字体显示不对，可以直接调整69-language- selector-zh-cn.conf，按照您喜欢的字体顺序调整好后，重启X后，系统的字体应该就恢复了。&lt;br /&gt;&lt;br /&gt;但是这时候可能您的Flash里面的中文还是乱码或者和系统的字体不一致，这个的解决方法很简单，将/etc /fonts/conf.d/49-sansserif.conf删除即可，这个文件为在所有非sans-serif、serif字体中附加sans- serif，删除它后就Flash里面的字体配置就和外部系统的字体一致了。另外如果这样修改后还有乱码的话，试试调整下69-language- selector-zh-cn.conf里面的中文字体顺序。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-5881211110176747936?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/5881211110176747936/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=5881211110176747936' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/5881211110176747936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/5881211110176747936'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/09/ubuntu.html' title='ubuntu 乱码'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-6170826279865444677</id><published>2008-09-19T02:57:00.000-07:00</published><updated>2008-09-19T02:58:25.761-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>java IO 操作</title><content type='html'>package home.action;&lt;br /&gt;&lt;br /&gt;import java.io.*;&lt;br /&gt;&lt;br /&gt;public class Test {&lt;br /&gt; public static void main(String[] args) throws IOException {&lt;br /&gt;  // 1.以行为单位从一个文件读取数据&lt;br /&gt;  BufferedReader in = new BufferedReader(new FileReader(&lt;br /&gt;    "/home/tiger/Desktop/Suse"));&lt;br /&gt;  String s, s2 = new String();&lt;br /&gt;  while ((s = in.readLine()) != null) {&lt;br /&gt;   s2 += s + "\n";&lt;br /&gt;  }&lt;br /&gt;  System.out.println(s2);&lt;br /&gt;  in.close();&lt;br /&gt;&lt;br /&gt;  // 1b. 接收键盘的输入&lt;br /&gt;  BufferedReader stdin = new BufferedReader(new InputStreamReader(&lt;br /&gt;    System.in));&lt;br /&gt;  System.out.println("Enter a line:");&lt;br /&gt;  System.out.println(stdin.readLine());&lt;br /&gt;&lt;br /&gt;  // 2. 从一个String对象中读取数据&lt;br /&gt;  StringReader in2 = new StringReader(s2);&lt;br /&gt;  int c;&lt;br /&gt;  while ((c = in2.read()) != -1) {&lt;br /&gt;   System.out.println((char) c);&lt;br /&gt;  }&lt;br /&gt;  in2.close();&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  // 3. 从内存取出格式化输入&lt;br /&gt;  try {&lt;br /&gt;   DataInputStream in3 = new DataInputStream(new ByteArrayInputStream(&lt;br /&gt;     s2.getBytes()));&lt;br /&gt;   while (true)&lt;br /&gt;    System.out.println((char) in3.readByte());&lt;br /&gt;  } catch (EOFException e) {&lt;br /&gt;   System.out.println("End of stream");&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  // 4. 输出到文件&lt;br /&gt;  try {&lt;br /&gt;   BufferedReader in4 = new BufferedReader(new StringReader(s2));&lt;br /&gt;   PrintWriter out1 = new PrintWriter(new BufferedWriter(&lt;br /&gt;     new FileWriter("F:\\nepalon\\ TestIO.out")));&lt;br /&gt;   int lineCount = 1;&lt;br /&gt;   while ((s = in4.readLine()) != null)&lt;br /&gt;    out1.println(lineCount++ + "：" + s);&lt;br /&gt;   out1.close();&lt;br /&gt;   in4.close();&lt;br /&gt;  } catch (EOFException ex) {&lt;br /&gt;   System.out.println("End of stream");&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  // 5. 数据的存储和恢复&lt;br /&gt;  try {&lt;br /&gt;   DataOutputStream out2 = new DataOutputStream(&lt;br /&gt;     new BufferedOutputStream(new FileOutputStream(&lt;br /&gt;       "F:\\nepalon\\ Data.txt")));&lt;br /&gt;   out2.writeDouble(3.1415926);&lt;br /&gt;   out2.writeChars("\nThas was pi:writeChars\n");&lt;br /&gt;   out2.writeBytes("Thas was pi:writeByte\n");&lt;br /&gt;   out2.close();&lt;br /&gt;   DataInputStream in5 = new DataInputStream(new BufferedInputStream(&lt;br /&gt;     new FileInputStream("F:\\nepalon\\ Data.txt")));&lt;br /&gt;   BufferedReader in5br = new BufferedReader(&lt;br /&gt;     new InputStreamReader(in5));&lt;br /&gt;   System.out.println(in5.readDouble());&lt;br /&gt;   System.out.println(in5br.readLine());&lt;br /&gt;   System.out.println(in5br.readLine());&lt;br /&gt;  } catch (EOFException e) {&lt;br /&gt;   System.out.println("End of stream");&lt;br /&gt;  }&lt;br /&gt;  // 6. 通过RandomAccessFile操作文件&lt;br /&gt;  RandomAccessFile rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat",&lt;br /&gt;    "rw");&lt;br /&gt;  for (int i = 0; i &lt; 10; i++)&lt;br /&gt;   rf.writeDouble(i * 1.414);&lt;br /&gt;  rf.close();&lt;br /&gt;  rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");&lt;br /&gt;  for (int i = 0; i &lt; 10; i++)&lt;br /&gt;   System.out.println("Value " + i + "：" + rf.readDouble());&lt;br /&gt;  rf.close();&lt;br /&gt;  rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");&lt;br /&gt;  rf.seek(5 * 8);&lt;br /&gt;  rf.writeDouble(47.0001);&lt;br /&gt;  rf.close();&lt;br /&gt;  rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");&lt;br /&gt;  for (int i = 0; i &lt; 10; i++)&lt;br /&gt;   System.out.println("Value " + i + "：" + rf.readDouble());&lt;br /&gt;  rf.close();&lt;br /&gt; }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-6170826279865444677?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/6170826279865444677/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=6170826279865444677' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/6170826279865444677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/6170826279865444677'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/09/java-io.html' title='java IO 操作'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-5122991051013290647</id><published>2008-09-16T23:19:00.000-07:00</published><updated>2008-09-17T00:33:36.587-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring代理</title><content type='html'>自己写的一个spring代理的实例程序,应该还挺全面!&lt;br /&gt;&lt;a href="http://www.mediafire.com/?b1dw2nazwyi"&gt;http://www.mediafire.com/?b1dw2nazwyi&lt;br /&gt;&lt;/a&gt;点击下载,里面的注释写的很清楚&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-5122991051013290647?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/5122991051013290647/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=5122991051013290647' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/5122991051013290647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/5122991051013290647'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/09/spring.html' title='Spring代理'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-2646134433694436465</id><published>2008-09-16T23:12:00.000-07:00</published><updated>2008-09-17T00:33:25.670-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring代理 之 ProxyFactoryBean</title><content type='html'>&lt;div class="highlighter"&gt;&lt;ol class="highlighter-j" start="1"&gt;&lt;li&gt;&lt;span class="keyword"&gt;package&lt;/span&gt;&lt;span&gt;&amp;nbsp;home.dong.aop;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;org.springframework.aop.framework.ProxyFactoryBean;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;org.springframework.beans.factory.BeanFactory;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;org.springframework.beans.factory.xml.XmlBeanFactory;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;org.springframework.context.ApplicationContext;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;org.springframework.context.support.ClassPathXmlApplicationContext;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;org.springframework.core.io.ClassPathResource;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;home.dong.advice.MyMethodBeforeAdvice;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;home.dong.impl.Lion;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;home.dong.impl.Tiger;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;home.dong.inter.Animal;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;Spring_AOP&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;proxy_A_Animal()&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;throws&lt;/span&gt;&lt;span&gt;&amp;nbsp;ClassNotFoundException&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Lion&amp;nbsp;lion&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Lion();&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ProxyFactoryBean&amp;nbsp;pfb&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;ProxyFactoryBean();&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pfb.setProxyTargetClass(&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;为true时&amp;nbsp;指定代理的是&amp;nbsp;类&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;而不是借口,此时使用的是CGLIB来实现代理,可以看到被代理的实体类的构造方法被调用*两次*&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;默认值为false&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;pfb.setProxyInterfaces(new&amp;nbsp;Class[]{Animal.class});&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;指定代理的是借口而非类,此时使用的是java来实现代理(java&amp;nbsp;代理必须指定借口)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;/**&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;以上两个方法&amp;nbsp;setProxyTargetClass()&amp;nbsp;setProxyInterfaces()&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果同时指定(既-----指定直接代理类,而又指定了代理的借口),则spring会优先选择java代理方式&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果同时未指定,则spring会根据被代理类是否实现了某个借口而自动选择使用java代理还是CBLIB代理.&amp;nbsp;注意:&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果被代理对象实现了借口&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;既spring选择java代理,则在通过代理工厂得到对象实例时必须将得到的对象转换成被代理对象的借口类型,否则会转型错误抛出&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;ClassCastException异常.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果被代理对象没有实现任何借口,既spring选择CGLIB代理,则在通过代理工厂得到对象实例时必须将得到的对象直接转换成被代理对象的类型&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pfb.setTarget(lion);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pfb.addAdvice(&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyMethodBeforeAdvice());&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;使用java代理必须使用其借口来得到对象,否则会转型出错&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;Animal&amp;nbsp;obj&amp;nbsp;=&amp;nbsp;(Animal)&amp;nbsp;pfb.getObject();&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Lion&amp;nbsp;ln&amp;nbsp;=&amp;nbsp;(Lion)&amp;nbsp;pfb.getObject();&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;str&amp;nbsp;=&amp;nbsp;ln._Fight(&lt;/span&gt;&lt;span class="string"&gt;"Tiger"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(str);&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;static&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;throws&lt;/span&gt;&lt;span&gt;&amp;nbsp;ClassNotFoundException&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Spring_AOP&amp;nbsp;aop&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Spring_AOP();&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aop.proxy_A_Animal();&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-2646134433694436465?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/2646134433694436465/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=2646134433694436465' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/2646134433694436465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/2646134433694436465'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/09/spring-proxyfactorybean.html' title='Spring代理 之 ProxyFactoryBean'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-8145796112622145696</id><published>2008-09-16T23:01:00.000-07:00</published><updated>2008-09-16T23:05:01.341-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring代理 之 ProxyFactory</title><content type='html'>&lt;div class="highlighter"&gt;&lt;ol class="highlighter-j" start="1"&gt;&lt;li&gt;&lt;span class="keyword"&gt;package&lt;/span&gt;&lt;span&gt;&amp;nbsp;home.dong.aop;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;java.lang.reflect.Method;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;home.dong.advice.MyMethodBeforeAdvice;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;home.dong.impl.Tiger;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;home.dong.inter.Animal;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;org.aopalliance.aop.Advice;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;org.springframework.aop.MethodBeforeAdvice;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;org.springframework.aop.framework.ProxyFactory;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;org.springframework.context.ApplicationContext;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;org.springframework.context.support.ClassPathXmlApplicationContext;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;org.springframework.aop.support.DefaultPointcutAdvisor;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;Spring_Base_AOP&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;proxy_A_Animal_1()&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tiger&amp;nbsp;animal_Tiger&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Tiger();&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ProxyFactory&amp;nbsp;factory&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;ProxyFactory();&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;factory.addAdvice(&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyMethodBeforeAdvice());&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;如果设置了接口&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;factory.setInterfaces(new&amp;nbsp;Class[]{Animal.class});&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;或&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;factory.addInterface(Animal.class);&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;那么&amp;nbsp;ProxyFactory会&amp;nbsp;使用java&amp;nbsp;代理来实现&amp;nbsp;(使用java&amp;nbsp;代理必须设置接口---既代理目标对象所实现的接口&amp;nbsp;)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;如果没有设置或添加接口&amp;nbsp;ProxyFactory&amp;nbsp;则会使用&amp;nbsp;CGLIB来实现代理&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;factory.setTarget(animal_Tiger);&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Animal&amp;nbsp;tiger&amp;nbsp;=&amp;nbsp;(Animal)&amp;nbsp;factory.getProxy();&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(tiger._Fight(&lt;/span&gt;&lt;span class="string"&gt;"Lion"&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;static&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Spring_Base_AOP&amp;nbsp;aop&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Spring_Base_AOP();&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aop.proxy_A_Animal_1();&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-8145796112622145696?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/8145796112622145696/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=8145796112622145696' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/8145796112622145696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/8145796112622145696'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/09/spring-proxyfactory.html' title='Spring代理 之 ProxyFactory'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-3641396737150185356</id><published>2008-09-16T22:49:00.000-07:00</published><updated>2008-09-16T23:00:25.308-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring代理 之 java代理</title><content type='html'>&lt;div class="highlighter"&gt;&lt;ol class="highlighter-j" start="1"&gt;&lt;li&gt;&lt;span class="keyword"&gt;package&lt;/span&gt;&lt;span&gt;&amp;nbsp;home.dong.aop;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;home.dong.impl.Lion;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;home.dong.impl.Tiger;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;home.dong.inter.Animal;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;java.lang.reflect.InvocationHandler;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;java.lang.reflect.Method;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;java.lang.reflect.Proxy;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;import&lt;/span&gt;&lt;span&gt;&amp;nbsp;org.springframework.aop.framework.ProxyFactory;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;J2EE_Base_AOP&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;/**&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;java代理,要求代理目标必须时间某个接口,则在通过代理得到对象实例时必须将得到的对象转换成被代理对象的借口类型,否则会转型错误抛出&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;java代理&amp;nbsp;I&amp;nbsp;匿名内部类实现,&amp;nbsp;直接实现InvocationHandler接口&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;tiger&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;proxy_A_Animal_1(&lt;/span&gt;&lt;span class="keyword"&gt;final&lt;/span&gt;&lt;span&gt;&amp;nbsp;Tiger&amp;nbsp;tiger)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Animal&amp;nbsp;animal&amp;nbsp;=&amp;nbsp;(Animal)&amp;nbsp;Proxy.newProxyInstance(tiger.getClass()&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.getClassLoader(),&amp;nbsp;tiger.getClass().getInterfaces(),&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;InvocationHandler()&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;Object&amp;nbsp;invoke(Object&amp;nbsp;proxy,&amp;nbsp;Method&amp;nbsp;method,&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Object[]&amp;nbsp;args)&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;throws&lt;/span&gt;&lt;span&gt;&amp;nbsp;Throwable&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&lt;/span&gt;&lt;span class="string"&gt;"我在这里代理了.......&amp;nbsp;下面要执行的方法是:&amp;nbsp;&amp;nbsp;"&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;method.getName());&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(method.getName().equals(&lt;/span&gt;&lt;span class="string"&gt;"_Fight"&lt;/span&gt;&lt;span&gt;))&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&lt;/span&gt;&lt;span class="string"&gt;"fighting!!!!!!!!!!!!!!!!"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&lt;/span&gt;&lt;span class="string"&gt;"对手是===="&lt;/span&gt;&lt;span&gt;&amp;nbsp;+&amp;nbsp;args[&lt;/span&gt;&lt;span class="number"&gt;0&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;method.invoke(tiger,&amp;nbsp;args);&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(animal._Drink(&lt;/span&gt;&lt;span class="string"&gt;"water"&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(animal._Eat(&lt;/span&gt;&lt;span class="string"&gt;"meat"&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(animal._Fight(&lt;/span&gt;&lt;span class="string"&gt;"Lion"&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;/**&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;java代理&amp;nbsp;II&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;proxy_A_Animal_2()&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;实例化要被代理的类&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Lion&amp;nbsp;lion&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Lion();&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Animal&amp;nbsp;animal&amp;nbsp;=&amp;nbsp;(Animal)&amp;nbsp;Proxy.newProxyInstance(Thread.currentThread()&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.getContextClassLoader(),&amp;nbsp;lion.getClass().getInterfaces(),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyInvocationHandler&amp;lt;Lion&amp;gt;(lion));&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;animal._Drink(&lt;/span&gt;&lt;span class="string"&gt;"Milk"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;animal._Eat(&lt;/span&gt;&lt;span class="string"&gt;"Meat"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;animal._Fight(&lt;/span&gt;&lt;span class="string"&gt;"Tiger"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//&amp;nbsp;内部类&amp;nbsp;实现InvocationHandler接口&amp;nbsp;对方法进行拦截&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;MyInvocationHandler&amp;lt;T&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;implements&lt;/span&gt;&lt;span&gt;&amp;nbsp;InvocationHandler&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;private&lt;/span&gt;&lt;span&gt;&amp;nbsp;T&amp;nbsp;targetClass;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyInvocationHandler(T&amp;nbsp;target)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;&lt;span&gt;.targetClass&amp;nbsp;=&amp;nbsp;target;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;br&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;/**&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;调用代理目标的方法&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;proxy&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;代理实例&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;mthod&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;代理目标的方法&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;args&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;代理目标的方法参数&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;Object&amp;nbsp;invoke(Object&amp;nbsp;proxy,&amp;nbsp;Method&amp;nbsp;method,&amp;nbsp;Object[]&amp;nbsp;args)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;throws&lt;/span&gt;&lt;span&gt;&amp;nbsp;Throwable&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&lt;/span&gt;&lt;span class="string"&gt;"这里进行真正的方法拦截--------拦截将要执行的方法"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&lt;/span&gt;&lt;span class="string"&gt;"====================================="&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&lt;/span&gt;&lt;span class="string"&gt;"要执行的方法是:&amp;nbsp;"&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;method.getDeclaringClass().getName()&amp;nbsp;+&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"&amp;nbsp;的&amp;nbsp;"&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;method.getName());&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;/*&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;注意:method.invoke(Object&amp;nbsp;obj,Object...&amp;nbsp;args)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;方法中第一个参数不能传递proxy,否则会出现无限递归调用,应该传递实际的代理目标的实例&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Object&amp;nbsp;obj&amp;nbsp;=&amp;nbsp;method.invoke(targetClass,&amp;nbsp;args);&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(obj.toString());&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;obj;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&lt;/span&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;static&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;J2EE_Base_AOP&amp;nbsp;aop&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;J2EE_Base_AOP();&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aop.proxy_A_Animal_1(&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Tiger());&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&lt;/span&gt;&lt;span class="string"&gt;"\n\n\n"&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aop.proxy_A_Animal_2();&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;br&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-3641396737150185356?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/3641396737150185356/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=3641396737150185356' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/3641396737150185356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/3641396737150185356'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/09/spring-java.html' title='Spring代理 之 java代理'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-8720955784917108825</id><published>2008-09-05T23:11:00.000-07:00</published><updated>2008-09-05T23:18:01.780-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Sping-Struts2集成</title><content type='html'>Struts2和Spring的集成要用到Spring插件包，这个包是同 Struts2一起发布的。Spring插件是通过覆盖(override)Struts2的ObjectFactory来增强核心框架对象的创建。当创建一个对象的时候，他会用Struts2配置文档中的class属性去和Spring配置文档中的id属性进行关联，假如能找到则由Spring创建，否则由Struts2框架自身创建，然后由Spring来装配。Spring插件具体有如下几个作用：&lt;br /&gt;1． 允许spring来创建Action、Interceptror和Result&lt;br /&gt;2． 由Struts创建的对象能够被Spring装配&lt;br /&gt;3． 提供了2个拦截器来自动装配action，假如没有使用Spring ObjectFactory的话&lt;br /&gt;这里要注意的是，我们不必在Spring中去注册action，尽管我们能够这么去做，通常Struts框架会自动的从action mapping中创建action对象。&lt;br /&gt;要实现和Struts和Spring的集成有如下几步：&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;一&amp;gt;.&lt;br /&gt;将struts2-spring-plugin-2.0.8.jar文档包含到我们的应用中，放到WEB-INF/lib目录下面即可。在这个插件包中有个struts-plugin.xml文档，他的内容如下：&lt;/span&gt;&lt;br /&gt;&amp;lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"&amp;gt;&lt;br /&gt;&amp;lt;struts&amp;gt;&lt;br /&gt;    &amp;lt;bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" /&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!--  Make the Spring object factory the automatic default --&amp;gt;&lt;br /&gt;    &amp;lt;constant name="struts.objectFactory" value="spring" /&amp;gt;&lt;br /&gt;    &amp;lt;package name="spring-default"&amp;gt;&lt;br /&gt;        &amp;lt;interceptors&amp;gt;&lt;br /&gt;            &amp;lt;interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/&amp;gt;&lt;br /&gt;            &amp;lt;interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/&amp;gt;&lt;br /&gt;        &amp;lt;/interceptors&amp;gt;&lt;br /&gt;    &amp;lt;/package&amp;gt;    &lt;br /&gt;&amp;lt;/struts&amp;gt;&lt;br /&gt;这里他将框架常量struts.objectFactory覆盖了，配置为”spring”，其实这里是使用了缩写，我们能够写全称： org.apache.struts2.spring.StrutsSpringObjectFactory。这个缩写的”spring”是和bean配置中的name属性相对应的。默认情况下任何由框架创建的对象都是由ObjectFactory实例化的，ObjectFactory提供了和其他IoC 容器如Spring、Pico等集成的方法。覆盖这个ObjectFactory的类必须继承ObjectFactory类或他的任何子类，并且要带有一个不带参数的构造方法。在这里我们用org.apache.struts2.spring.StrutsSpringObjectFactory代替了默认的ObjectFactory。&lt;br /&gt;&lt;br /&gt;此外，上面我们说了，假如action不是使用Spring ObjectFactory创建的话，插件提供了两个拦截器来自动装配action，默认情况下框架使用的自动装配策略是name，也就是说框架会去 Spring中寻找和action属性名字相同的bean，可选的装配策略更有：type、auto、constructor，我们能够通过常量 struts.objectFactory.spring.autoWire来进行配置。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;二&amp;gt;.配置Spring监听器，将Spring.jar包包含到应用中&lt;br /&gt;将下面一段话插入到web.xml文档中，同时将spring.jar文档放到WEB-INF/lib目录下面。&lt;/span&gt;&lt;br /&gt;&amp;lt;listener&amp;gt;&lt;br /&gt;    &amp;lt;listener-class&amp;gt;&lt;br /&gt;        org.springframework.web.context.ContextLoaderListener&lt;br /&gt;    &amp;lt;/listener-class&amp;gt;&lt;br /&gt;&amp;lt;/listener&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;三&amp;gt;.利用Spring配置文档来注册对象&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;这之后的步骤就和我们使用单独使用Spring相同了，现在我们就已完成了Struts和Spring的整合了。这里有一点要注意的是，我们还要指定Spring配置文档的地点，默认情况下，容器会到WEB-INF目录下面去寻找applicationContext.xml文档。假如我们想指定别的地方的配置文档或指定多个配置文档，能够通过在web.xml文档中定义context-param元素来指定，如下所示：&lt;br /&gt;&lt;br /&gt;&amp;lt;context-param&amp;gt;&lt;br /&gt;    &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;    &amp;lt;param-value&amp;gt;&lt;br /&gt;        /WEB-INF/applicationContext.xml,classpath:applicationContext-*.xml&lt;br /&gt;    &amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/context-param&amp;gt;&lt;br /&gt;上面一段话表示WEB-INF下面的applicationContext.xml文档连同classpath下面的任何匹配applicationContext-*.xml模式的文档都会作为Spring配置文档被装载。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-8720955784917108825?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/8720955784917108825/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=8720955784917108825' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/8720955784917108825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/8720955784917108825'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/09/sping-struts2.html' title='Sping-Struts2集成'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-3418352657007380919</id><published>2008-09-01T20:25:00.000-07:00</published><updated>2008-09-01T20:27:15.242-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mysql'/><title type='text'>Mysql 基础问题</title><content type='html'>本资料内容来自与MYSQL.CN论坛，谢谢那些默默做出贡献的朋友！&lt;br /&gt;&lt;br /&gt;一、        关于MySQL5&lt;br /&gt;MySQL5系列数据库是MySQL的最新版本的数据库，比较流行的发行版是mysql-5.0.18。MySQL        英文官方网站是http://www.mysql.com&lt;br /&gt;&lt;br /&gt;二、        获得MySQL5&lt;br /&gt;所有的关于MySQL数据库的程序，都可以在它的英文官方网站下载到，但是，鉴于不不是所有人的英文都很好，所以建议大家尽量区MySQL的中文官方网站下载自己所需的程序，如果找不到，再去找英文的网站。&lt;br /&gt;MySQL5有安装版和免安装版之分，顾名思义，安装版就是需要安装以后才可以使用；免安装版的MySQL下载下来之后就可以使用，或者进行简单的设置就可以使用。&lt;br /&gt;MySQL5安装版下载地址：&lt;br /&gt;Windows版本：http://download.mysql.cn/src/2006/0218/199.html&lt;br /&gt;Linux版本（源码包）：http://download.mysql.cn/src/2006/0208/62.html&lt;br /&gt;MySQL5免安装版下载地址：&lt;br /&gt;Windows版本：http://download.mysql.cn/src/2006/0302/205.html&lt;br /&gt;&lt;br /&gt;三、        MySQL5安装&lt;br /&gt;Windows版安装手册：http://bbs.mysql.cn/thread-261-1-1.html&lt;br /&gt;Linux版本（源码包）安装手册：http://bbs.mysql.cn/thread-493-1-2.html&lt;br /&gt;&lt;br /&gt;MySQL有安装版本和免安装版本，免安装版本解压后的文件夹内没有安装程序，可以直接使用。&lt;br /&gt;Windows免安装版本使用手册：http://bbs.mysql.cn/thread-552-1-1.html&lt;br /&gt;&lt;br /&gt;四、        备份与恢复&lt;br /&gt;常规备份命令是mysqldump,这里以tm数据库为例，做简单介绍，详细资料参考&lt;br /&gt;http://info.mysql.cn/install/2006/0410/5521.html&lt;br /&gt;备份：&lt;br /&gt;#mysqldump -u root -p tm &gt; tm_20060101.sql  &lt;br /&gt;按提示输入密码，这就把tm数据库所有的表结构和数据备份到tm_20060101.sql了，因为要总进行备份工作，如果数据量大会占用很大空间，&lt;br /&gt;这是可以利用gzip压缩数据，命令如下：&lt;br /&gt;#mysqldump -u root -p tm | gzip &gt; tm_20060101.sql.gz&lt;br /&gt;还可以备份到远程机器，用-h制定，如&lt;br /&gt;#mysqldump -u root -p tm &gt; tm_20060101.sql -h xxx.xxx.xxx.xxx&lt;br /&gt;可以直接备份到IP地址为xxx.xxx.xxx.xxx的远程计算机。&lt;br /&gt;系统崩溃，重建系统，或恢复数据库时，可以这样恢复数据：&lt;br /&gt;#mysql -u root -p tm &lt; tm_20060101.sql&lt;br /&gt;从压缩文件直接恢复：&lt;br /&gt;#gunzip &lt; tm_20060101.sql.gz | mysql -u root -p tm&lt;br /&gt;&lt;br /&gt;五、        FAQ&lt;br /&gt;&lt;br /&gt;Q：为什么我下在的“安装程序”里面没有安装文件?&lt;br /&gt;A：你下载的可能是免安装版本。请给出详细的版本信息。&lt;br /&gt;&lt;br /&gt;Q：如何启动和关闭mysql?&lt;br /&gt;A：linux下：比如我的mysql是用源码方式安装在/usr/local/mysql&lt;br /&gt;自动：将/usr/local/mysql/share/mysql/mysql.server拷贝到/etc/rc.d/init.d/下，然后&lt;br /&gt;chkconfig --add mysql.server就可以开机就启动mysql服务了。&lt;br /&gt;手动：以root身份执行/usr/local/mysql/bin/mysqld_safe --user=mysql&lt;br /&gt;windows下：&lt;br /&gt;自动：&lt;br /&gt;用cmd方式，到mysql安装路径的bin文件夹下，执行：mysqld-nt --install&lt;br /&gt;手动：直接到到mysql安装路径的bin文件夹下执行net start mysql即可。&lt;br /&gt;如果不想让mysql在计算机启动时候就启动服务，执行：mysqld-nt --remove&lt;br /&gt;也可以在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services中删除对应服务并重启计算机。&lt;br /&gt;关闭mysql：mysqladmin -uroot -p shutdown&lt;br /&gt;启动mysql：&lt;br /&gt;mysqld-nt --install&lt;br /&gt;net start mysql&lt;br /&gt;&lt;br /&gt;Q：如何修改mysql的用户密码?&lt;br /&gt;A ：在这里请区分连接mysql数据库的用户密码和系统的用户密码！！&lt;br /&gt;&lt;br /&gt;mysql -uroot -p&lt;br /&gt;输入密码&lt;br /&gt;#登录mysql&lt;br /&gt;&gt;use mysql&lt;br /&gt;&gt;update user set password=password("new_pass") where user="userName";  #userName换成你要修改的用户名的密码，比如root&lt;br /&gt;&gt;flush privileges;&lt;br /&gt;&gt;exit;&lt;br /&gt;&lt;br /&gt;Q：如何登录mysql?&lt;br /&gt;A：mysql -uroot -p回车后，输入密码，再回车即可。如果自己没有修改的话，默认密码为空。&lt;br /&gt;&lt;br /&gt;Q：mysql如何很好的变成图形化数据库呢?自身有自带的图形化工具没有?&lt;br /&gt;A：mysql自带一个字符的客户端，但是还有好多的像mysql_center、SQLyog、phpMyAdmin、Mysql Query Browser，Mysql Administrator、mysqlcc这样好的图形管理工具。&lt;br /&gt;mysql_centerd在本站的下载地址：http://bbs.mysql.cn/thread-517-1-1.html&lt;br /&gt;SQLyog去网上搜索，很多的，SQLyog407版本不错。&lt;br /&gt;phpMyAdmin下载地址：http://download.mysql.cn/opencode/2006/0207/55.html&lt;br /&gt;mysql.com提供的管理软件下载地址：http://dev.mysql.com/downloads/gui-tools/5.0.html&lt;br /&gt;其它的我就不一一提供下载地址，自己到网上搜索下载。&lt;br /&gt;&lt;br /&gt;Q:为什么用mysql  -uusername -p登录mysql服务器时出现如下提示：&lt;br /&gt;     Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server!("xxx.xxx.xxx.xxx"代表要登录的服务器)&lt;br /&gt;A：这是因为你要登录的mysql服务器不允许用户username从xxx.xxx.xxx.xxx这个ip地址登录。&lt;br /&gt;解决办法是在服务器登录mysql，操作步骤为：&lt;br /&gt;mysql -uroot -p&lt;br /&gt;(输入密码)&lt;br /&gt;use mysql&lt;br /&gt;update user set Host="%" where User="username";&lt;br /&gt;flush privileges;&lt;br /&gt;&lt;br /&gt;Q：什么是phpMyAdmin？&lt;br /&gt;A：phpMyAdmin 是一个用PHP编写的，可以通过互联网控制和操作MySQL。通过phpMyAdmin可以完全对数据库进行操作，例如建立、复制/删除数据等等。&lt;br /&gt;有了phpMyAdmin 就可以完全不使用mysql命令,直接使用phpMyAdmin就能管理mysql的所有数据和数据库&lt;br /&gt;&lt;br /&gt;Q：如何使用phpMyAdmin？&lt;br /&gt;A：要使用phpMyAdmin，下载后，把它释放到web服务器的根目录下，取个名字，比如就叫phpMyAdmin，然后在浏览器的地址栏输入:&lt;br /&gt;http://X.X.X.X/phpMyAdmin/index.php&lt;br /&gt;就可以了。&lt;br /&gt;如果是phpMyAdmin 2.8.0.2以上版本的，这样使用会报错，因为默认没有这个软件需要的配置文件config.default.php,在2.6.X版本下都有这个文件，只是口令不对。对于2.6.X版本的，可以直接用文本编辑器打开这个文件，把其中第一个$cfg中内容修改成自己的用户名及密码就可以了：&lt;br /&gt;$cfg['Servers'][$i]['auth_type']     = 'config';    // Authentication method (config, http or cookie based)?&lt;br /&gt;$cfg['Servers'][$i]['user']          = 'root';      // MySQL user&lt;br /&gt;$cfg['Servers'][$i]['password']      = '自己的密码';&lt;br /&gt;不设置密码的话，系统会提示：&lt;br /&gt;Access denied for user 'root'@'localhost' (using password: NO)&lt;br /&gt;&lt;br /&gt;如果是2.8.0.2版本的，程序会提示请运行scripts/setup.php或者index.php这样的文件进行配置以生成config.inc.php文件。&lt;br /&gt;&lt;br /&gt;Q：为什么我使用mysql出现乱码？&lt;br /&gt;A：安装mysql5时默认的字符集是瑞典编码latin1，不支持中文。并且出现乱码的原因很多，建议到bbs.mysql.cn论坛寻找答案。发贴的话请详细说明自己的环境、安装过程及使用的信息，以便大家能快速分析你的问题。&lt;br /&gt;&lt;br /&gt;Q：如何修改字符集？&lt;br /&gt;A：&lt;br /&gt;mysql -uroot -p&lt;br /&gt;输入密码&lt;br /&gt;选择你的目标数据库&lt;br /&gt;mysql&gt; use dbname&lt;br /&gt;显示当前字符集&lt;br /&gt;mysql&gt; show variables like '%char%';&lt;br /&gt;+--------------------------+----------------------------------------+&lt;br /&gt;| Variable_name            | Value                                  |&lt;br /&gt;+--------------------------+----------------------------------------+&lt;br /&gt;| character_set_client     | gb2312                                 |&lt;br /&gt;| character_set_connection | gb2312                                 |&lt;br /&gt;| character_set_database   | gb2312                                 |&lt;br /&gt;| character_set_results    | gb2312                                 |&lt;br /&gt;| character_set_server     | gb2312                                 |&lt;br /&gt;| character_set_system     | utf8                                   |&lt;br /&gt;| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ |&lt;br /&gt;+--------------------------+----------------------------------------+&lt;br /&gt;7 rows in set (0.00 sec)&lt;br /&gt;最好是保持字符集统一。如果你要修改哪个字符集，用set命令，如：&lt;br /&gt;mysql&gt; set character_set_client gbk;&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; show variables like '%char%';&lt;br /&gt;+--------------------------+----------------------------------------+&lt;br /&gt;| Variable_name            | Value                                  |&lt;br /&gt;+--------------------------+----------------------------------------+&lt;br /&gt;| character_set_client     | gbk                                    |&lt;br /&gt;| character_set_connection | gb2312                                 |&lt;br /&gt;| character_set_database   | gb2312                                 |&lt;br /&gt;| character_set_results    | gb2312                                 |&lt;br /&gt;| character_set_server     | gb2312                                 |&lt;br /&gt;| character_set_system     | utf8                                   |&lt;br /&gt;| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ |&lt;br /&gt;+--------------------------+----------------------------------------+&lt;br /&gt;再改回来：&lt;br /&gt;mysql&gt; set character_set_client=gb2312;&lt;br /&gt;Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; show variables like '%char%';&lt;br /&gt;+--------------------------+----------------------------------------+&lt;br /&gt;| Variable_name            | Value                                  |&lt;br /&gt;+--------------------------+----------------------------------------+&lt;br /&gt;| character_set_client     | gb2312                                 |&lt;br /&gt;| character_set_connection | gb2312                                 |&lt;br /&gt;| character_set_database   | gb2312                                 |&lt;br /&gt;| character_set_results    | gb2312                                 |&lt;br /&gt;| character_set_server     | gb2312                                 |&lt;br /&gt;| character_set_system     | utf8                                   |&lt;br /&gt;| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ |&lt;br /&gt;+--------------------------+----------------------------------------+&lt;br /&gt;7 rows in set (0.00 sec)&lt;br /&gt;自己试试就知道了。&lt;br /&gt;&lt;br /&gt;Q：为什么我的phpmyadmin提示不能载入mysql扩展？&lt;br /&gt;A： 一、看下你的PHP目录和PHP\EXT下有没有php_mysql.dll这个文件。&lt;br /&gt;      二、配制一下环境变量把php_mysql.dll所在的目录加入的PATH里。&lt;br /&gt;      三、有的php安装程序安装好以后，在安装路径下，并没有ext文件夹（不知道为什么），最好下载个配置的php，然后，将exe文件夹拷贝到安装目录下，再进行相应的配置。&lt;br /&gt;      四、看一下c:\winnt 或者是 c:\windows下的php.ini文件里的php_mysql.dll前面的；（分号）是否去掉了，如果没有去掉请去掉，然后，将mysql安装路径下bin文件夹下的libmysql.dll放在安装php的根目录一般为C：\php ，同时也在 C:\windows 下也放各一个，之后重新启动IIS或者是APACHE。有的时候总是刷新一页，即使去掉分号也还是不能载入mysql扩展，最后新打开一个窗口，再试。&lt;br /&gt;&lt;br /&gt;Q：为什么提示："没有发现 PHP 的扩展设置mbstring， 而当前系统好像在使用宽字符集。没有 mbstring 扩展的 phpMyAdmin 不能正确识别字符串，可能产生不可意料的结果."&lt;br /&gt;A：因为你没有打开mbstring在扩展，解决办法：打开php的配置文件php.ini，将&lt;br /&gt;extension=php_mbstring.dll前面的分号";"去掉，并改到正确的路径，一般为&lt;br /&gt;ext/php_mbstring.dll&lt;br /&gt;&lt;br /&gt;Q：为什么PHP连接mysql会有下面的提示？&lt;br /&gt;       Fatal error: Call to undefined function mysql_connect() ……&lt;br /&gt;A：很有可能是没有载入mysql扩展，如何解决，请参考上面的方法。&lt;br /&gt;因为如果你的系统没有载入mysql扩展的话，phpmyadmin能给出提示，而一般的程序则不能给出。&lt;br /&gt;如果phpmyadmin没有给出提示，而你恰好用的apache服务器，尝试一下方法：&lt;br /&gt;首先是去掉;extension=php_mysql.dll前面的“;”（;为注释）&lt;br /&gt;第二步是将C:\php\ext中的php_mysql.dll复制到C:\WINDOWS（C:\WINNT）中即可，&lt;br /&gt;并重起Apache。&lt;br /&gt;&lt;br /&gt;Q：为什么我不能看孵化池资料？&lt;br /&gt;A：MYSQL.CN的孵化池是专门为初学者提供学习的地方，这里我就不多介绍了，详情请访问：http://bbs.mysql.cn/thread-369-1-1.html。&lt;br /&gt;&lt;br /&gt;Q：能中文数据库名称么？&lt;br /&gt;A：可以，但是不推荐，用起来不方便。&lt;br /&gt;&lt;br /&gt;Q：如果我忘记了root密码，怎么办？&lt;br /&gt;A：&lt;br /&gt;在windows下：&lt;br /&gt;打开命令行窗口，停止mysql服务：        Net stop mysql&lt;br /&gt;启动mysql，一般到mysql的安装路径，找到 mysqld-nt.exe&lt;br /&gt;执行：mysqld-nt --skip-grant-tables&lt;br /&gt;另外打开一个命令行窗口，执行mysql&lt;br /&gt;&gt;use mysql&lt;br /&gt;&gt;update user set password=password("new_pass") where user="root";&lt;br /&gt;&gt;flush privileges;&lt;br /&gt;&gt;exit&lt;br /&gt;用Ctrl+Alt+Del，找到mysqld-nt的进程杀掉它，在重新启动mysql-nt服务，就可以用新密码登录了&lt;br /&gt;&lt;br /&gt;在linux下：&lt;br /&gt;如果 MySQL 正在运行，首先杀之： killall -TERM mysqld。&lt;br /&gt;启动 MySQL ：bin/safe_mysqld --skip-grant-tables &amp;&lt;br /&gt;就可以不需要密码就进入 MySQL 了。&lt;br /&gt;然后就是&lt;br /&gt;&gt;use mysql&lt;br /&gt;&gt;update user set password=password("new_pass") where user="root";&lt;br /&gt;&gt;flush privileges;&lt;br /&gt;重新杀 MySQL ，用正常方法启动 MySQL 。&lt;br /&gt;&lt;br /&gt;Q：为什么出现如下的提示：&lt;br /&gt;[root@0-8-2-df-fa-ee ~]# mysql&lt;br /&gt;ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)&lt;br /&gt;注：也可能是其它路径下的mysql.sock&lt;br /&gt;A：说明mysql服务没有启动，mysql.sock是mysql服务启动后启动生成的文件，&lt;br /&gt;一般先杀掉mysql服务：killall mysql&lt;br /&gt;然后，再根据自己的安装情况启动mysql即可。比如，安装的时候，用的是&lt;br /&gt;./configure --prefix=/usr/local/mysql的&lt;br /&gt;用下面的命令启动：&lt;br /&gt;/usr/local/mysql/bin/mysqld_safe --user=mysql &amp;&lt;br /&gt;之后再去执行/usr/local/mysql/bin/mysql -u root -p 登录进入mysql数据库&lt;br /&gt;还不行的话，一次执行下面的命令：&lt;br /&gt;sync&lt;br /&gt;reboot                     ；重启计算机，执行时请小心！！！&lt;br /&gt;&lt;br /&gt;Q:为什么出现下面的错误&lt;br /&gt;#1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client&lt;br /&gt;&lt;br /&gt;A：你使用的数据库是4.1以上，用命令行连接MySQL数据库后，执行下面的命令：&lt;br /&gt;UPDATE mysql.user SET password=OLD_PASSWORD("your_password") WHERE Host="your_host" AND User="your_username" ;&lt;br /&gt;即可解决。&lt;br /&gt;&lt;br /&gt;your_password：改成你连接数据库的密码，比如 123&lt;br /&gt;your_host：改成你连接数据库的主机，如果是本地的话，就是localhost&lt;br /&gt;your_username：改成你连接数据库的用户，比如 root&lt;br /&gt;&lt;br /&gt;Q：为什么mysql提示我：Data too long for column ……&lt;br /&gt;A：首先确保你的数据大小符合你的字段大小。&lt;br /&gt;再检查你的数据库编码，数据库的编码是否与操作数据库工具的编码一致！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-3418352657007380919?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/3418352657007380919/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=3418352657007380919' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/3418352657007380919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/3418352657007380919'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/09/mysql.html' title='Mysql 基础问题'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-6474526261429258065</id><published>2008-08-26T06:32:00.000-07:00</published><updated>2008-09-17T00:34:30.304-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>JQuery Grid插件Flexigrid使用</title><content type='html'>Flexigrid界面风格类似于ext,是一个比较强大的ajax数据显示grid插件，在此地址下载:http://www.webplicity.net/flexigrid/&lt;br /&gt;下载加入工程，官方的例子说的很明白了，这里就不多说了。&lt;br /&gt;需要注意的是在使用json返回时必须按照下面的格式拼装：&lt;br /&gt;    {&lt;br /&gt; "total":200, //数据总数&lt;br /&gt; "page":2, //页码(第几页)等等，相关参数可以在他的源码中找到&lt;br /&gt; "rows":[&lt;br /&gt;  {"id":"1","cell":["a","b","c","e"]},  &lt;br /&gt;  {"id":"2","cell":["a","b","c","e"]},&lt;br /&gt;  {"id":"3","cell":["a","b","c","e"]},&lt;br /&gt;  {"id":"4","cell":["a","b","c","e"]},  &lt;br /&gt;  {"id":"5","cell":["a","b","c","e"]},&lt;br /&gt;  {"id":"6","cell":["a","b","c","e"]}, &lt;br /&gt;  {"id":"7","cell":["a","b","c","e"]},  &lt;br /&gt;  {"id":"8","cell":["a","b","c","e"]},  &lt;br /&gt;    ]}&lt;br /&gt;&lt;br /&gt;返回json对象中（也就是个字符串）"row" 和其对应的数据必须按照此格式输出，要不然页面会没办法展现数据，使用下面的方法：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public void getData() {&lt;br /&gt;  int page = Integer.parseInt(request.getParameter("page"));&lt;br /&gt;  int totalUser = DBManager.getTotalUser();&lt;br /&gt;&lt;br /&gt;  List&lt;User&gt; userList = DBManager.getUsers();&lt;br /&gt;&lt;br /&gt;  Map map = new HashMap();&lt;br /&gt;  map.put("page", page);&lt;br /&gt;  map.put("total", totalUser);&lt;br /&gt;&lt;br /&gt;  List mapList = new ArrayList();&lt;br /&gt;&lt;br /&gt;  for (int i = 0; i &lt; userList.size(); i++) {&lt;br /&gt;   User u = userList.get(i);&lt;br /&gt;   Map cellMap = new HashMap();&lt;br /&gt;   cellMap.put("id", i);&lt;br /&gt;   cellMap.put("cell", new Object[] { u.getId(), u.getUserName(),u.getUserPass() });&lt;br /&gt;   mapList.add(cellMap);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  map.put("rows", mapList);&lt;br /&gt;&lt;br /&gt;  JSONObject object = new JSONObject(map);&lt;br /&gt;  System.out.println(object.toString());&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;mapList用来存放数据，但是里面的每条数据都是一个map，map必须有一个键为“id”和对应的值，和键为“cell”和对应的值，而cell对应就是真正的数据了，这里是user,而且cell的值队必须是object[]数组，可以把user的各个属性值放进去，但是这样&lt;br /&gt;cellMap.put("cell",u)是不行的，不能直接对应user。而页面取值其实是根据这个object数组的索引来取的，这要注意。其他很简单了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-6474526261429258065?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/6474526261429258065/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=6474526261429258065' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/6474526261429258065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/6474526261429258065'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/08/jquery-gridflexigrid.html' title='JQuery Grid插件Flexigrid使用'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-6285337605473906205</id><published>2008-08-24T18:24:00.000-07:00</published><updated>2008-09-01T20:27:49.494-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring配置文件--Typical</title><content type='html'>&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;&lt;br /&gt;  - Application context definition for PetClinic on Hibernate.&lt;br /&gt;&lt;br /&gt;  --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;beans&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- ========================= RESOURCE DEFINITIONS ========================= --&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;!-- Configurer that replaces ${...} placeholders with values from a properties file --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- (in this case, JDBC-related settings for the dataSource definition below) --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="location" value="/WEB-INF/jdbc.properties"/&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- Local DataSource that works in any environment --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- Note that DriverManagerDataSource does not pool; it is not intended for production --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- See JPetStore for an example of using Commons DBCP BasicDataSource as alternative --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- See Image Database for an example of using C3P0 ComboPooledDataSource as alternative --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="driverClassName" value="${jdbc.driverClassName}"/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="url" value="${jdbc.url}"/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="username" value="${jdbc.username}"/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="password" value="${jdbc.password}"/&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- JNDI DataSource for J2EE environments --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!--&lt;br /&gt;&lt;br /&gt; &amp;lt;bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="jndiName" value="java:comp/env/jdbc/petclinic"/&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt; --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- Hibernate SessionFactory --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="dataSource" ref="dataSource"/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="mappingResources"&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;value&amp;gt;mobile.hbm.xml&amp;lt;/value&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/property&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="hibernateProperties"&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;props&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;prop key="hibernate.dialect"&amp;gt;${hibernate.dialect}&amp;lt;/prop&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;prop key="hibernate.show_sql"&amp;gt;true&amp;lt;/prop&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;prop key="hibernate.generate_statistics"&amp;gt;true&amp;lt;/prop&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;/props&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/property&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="eventListeners"&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;map&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;entry key="merge"&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/entry&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;/map&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/property&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="sessionFactory" ref="sessionFactory"/&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- Transaction manager that delegates to JTA (for a transactional JNDI DataSource) --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!--&lt;br /&gt;&lt;br /&gt; &amp;lt;bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/&amp;gt;&lt;br /&gt;&lt;br /&gt; --&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- ========================= BUSINESS OBJECT DEFINITIONS ========================= --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!--&lt;br /&gt;&lt;br /&gt;   - PetClinic's central data access object: Hibernate implementation.&lt;br /&gt;&lt;br /&gt;    --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;bean id="mobileTarget" class="com.gomt.stbc.hibernate.HibernateMobile"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="sessionFactory" ref="sessionFactory"/&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!--&lt;br /&gt;&lt;br /&gt;  - Transactional proxy for PetClinic's central data access object.&lt;br /&gt;&lt;br /&gt;  -&lt;br /&gt;&lt;br /&gt;  - Defines specific transaction attributes with "readOnly" markers,&lt;br /&gt;&lt;br /&gt;  - which is an optimization that is particularly valuable with Hibernate&lt;br /&gt;&lt;br /&gt;  - (to suppress unnecessary flush attempts for read-only operations).&lt;br /&gt;&lt;br /&gt;  -&lt;br /&gt;&lt;br /&gt;  - Note that in a real-life app with multiple transaction proxies,&lt;br /&gt;&lt;br /&gt;  - you will probably want to use parent and child bean definitions&lt;br /&gt;&lt;br /&gt;  - as described in the manual, to reduce duplication.&lt;br /&gt;&lt;br /&gt;    --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;bean id="mobile" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="transactionManager" ref="transactionManager"/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="target" ref="mobileTarget"/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="transactionAttributes"&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;props&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;prop key="get*"&amp;gt;PROPAGATION_REQUIRED,readOnly&amp;lt;/prop&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;prop key="find*"&amp;gt;PROPAGATION_REQUIRED,readOnly&amp;lt;/prop&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;prop key="load*"&amp;gt;PROPAGATION_REQUIRED,readOnly&amp;lt;/prop&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;prop key="store*"&amp;gt;PROPAGATION_REQUIRED&amp;lt;/prop&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;/props&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/property&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &amp;lt;!-- Hibernate 3.0's JMX statistics service --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- Implements the StatisticsServiceMBean management interface --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!--  &lt;br /&gt;&lt;br /&gt; &amp;lt;bean name="petclinic:type=HibernateStatistics" class="org.hibernate.jmx.StatisticsService"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="sessionFactory" ref="sessionFactory"/&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/bean&amp;gt;--&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- ========================= JMX EXPORTER DEFINITION ========================= --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!--&lt;br /&gt;&lt;br /&gt;   - Exporter that exposes Hibernate 3.0's statistics service via JMX.&lt;br /&gt;&lt;br /&gt;  - Autodetects the statistics service, which is a standard MBean,&lt;br /&gt;&lt;br /&gt;  - using its bean name as JMX object name.&lt;br /&gt;&lt;br /&gt;  -&lt;br /&gt;&lt;br /&gt;  - By default, the standard MBeanServerFactory.findMBeanServer method will be used&lt;br /&gt;&lt;br /&gt;  - to determine the MBeanServer. Unfortunately, this does not work on WebLogic &amp;lt;= 8.1:&lt;br /&gt;&lt;br /&gt;  - you need to comment in the WebLogicMBeanServerFactoryBean definition on WebLogic,&lt;br /&gt;&lt;br /&gt;  - specifying appropriate configuration values there.&lt;br /&gt;&lt;br /&gt;    --&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!--  &lt;br /&gt;&lt;br /&gt; &amp;lt;bean id="jmxExporter" class="org.springframework.jmx.export.MBeanExporter"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="autodetect" value="true"/&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/bean&amp;gt;--&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- Comment the following in on WebLogic &amp;lt;= 8.1, which doesn't support --&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- the standard MBeanServerFactory.findMBeanServer lookup mechanism. --&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!--&lt;br /&gt;&lt;br /&gt;  &amp;lt;property name="server"&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;bean class="org.springframework.jmx.support.WebLogicJndiMBeanServerFactoryBean"/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/property&amp;gt;&lt;br /&gt;&lt;br /&gt;  --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-6285337605473906205?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/6285337605473906205/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=6285337605473906205' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/6285337605473906205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/6285337605473906205'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/08/typical-spring.html' title='Spring配置文件--Typical'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-6003938924914396366</id><published>2008-08-18T23:52:00.000-07:00</published><updated>2008-08-19T02:03:02.799-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>JQuery插件--ingrid使用</title><content type='html'>&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;span&gt;本实例使用struts2进行&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;演示&lt;/span&gt; &lt;span style="font-weight: bold; font-style: italic;"&gt;ingrid.js是一款ajax,可以用来实现页面数据展现&lt;/span&gt;&lt;br /&gt;ingrid.js 及jquery 下载:&lt;br /&gt;&lt;a href="http://download284.mediafire.com/eh2zwxytoybg/iui78qsoche/ingrid.tar.gz"&gt;http://download284.mediafire.com/eh2zwxytoybg/iui78qsoche/ingrid.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;rows.length; returns="" an="" array="" ids="" saved="" in="" getsavedrowids="" id="" _rows="" row_ids="[];" return="" set="" body="" width="" based="" header="" table="" minimize="" calls="" to="" pos="h.offset();" left="" outer_w="h.width()" scrollbarw="" top="" initstylesandwidths="" setting="" and="" widths="" colwidths="new" don="" t="" use="" makes="" column="" headers="" jitter="" make="" one="" pass="" of="" the="" initialize="" properties="" on="" rows="" columns="" var="" str_ids="jQuery.cookie(" custom="" row="" styles="" hover="" if="" length=""&gt;&lt;div&gt;&lt;pairs.length; prop="pairs[i].split('=');" page="" dir="" var="" colid="params.sort;" perhaps="" sort="hash['sort'];" param="" is="" a="" get="" the="" id="" for="" that="" key="" if="" length=""&gt;&lt;cfg.colsortparams; if="" colid="i;" set="" appropriate="" style="" on="" sorted="" perhaps="" we="" should="" bind="" an="" event="" to="" the="" column=""&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;下载后在工程WebContent下新建JS文件夹,将下载的文件解压后放进去.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;index.jsp&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;%@ page language="java" contentType="text/html; charset=UTF-8"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;    pageEncoding="UTF-8"%&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;%@taglib prefix="s" uri="/struts-tags"%&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;title&amp;gt;Insert title here&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;a href="&amp;lt;s:url action="getUserListForTable" namespace="/my"&lt;br /&gt;&amp;gt;"&amp;gt;Show Users&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;userList.jsp&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;%@ page language="java" contentType="text/html; charset=UTF-8"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   pageEncoding="UTF-8"%&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;%@ taglib prefix="s" uri="/struts-tags"%&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;title&amp;gt;Insert title here&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;link rel="stylesheet" href="&amp;lt;s:url value='/css/ingrid.css' /&amp;gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   type="text/css" media="screen" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;script type="text/javascript" src="&amp;lt;s:url value="/js/jquery.js" /&amp;gt;"&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;script type="text/javascript" src="&amp;lt;s:url value="/js/ingrid.js" /&amp;gt;"&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;document.write(&amp;lt;s:property value="totalRow"/&amp;gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;$(document).ready(&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   function() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   var mygrid1=$("#table1").ingrid({&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           url: '&amp;lt;s:url action="getPageUserList" namespace="my"/&amp;gt;',&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           initialLoad: true,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           paging: true,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           rowClasses: ['grid-row-style1','grid-row-style1','grid-row-style2','grid-row-style1','grid-row-style1','grid-row-style3'],&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           pageNumber:1,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           totalRecords:&amp;lt;s:property value="totalRow"/&amp;gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           recordsPerPage:&amp;lt;s:property value="size"/&amp;gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           height: 350&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;       });&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;       $('#getTotal').click(function(){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           // the 'g' object is ingrid - call methods like so:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           alert(mygrid1.g.p.getTotalRecords());&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;       });&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;body class="tundra"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;table id="table1"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   &amp;lt;thead&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;       &amp;lt;tr&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           &amp;lt;th&amp;gt;User ID&amp;lt;/th&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           &amp;lt;th&amp;gt;User Name&amp;lt;/th&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           &amp;lt;th&amp;gt;Password&amp;lt;/th&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           &amp;lt;th&amp;gt;Birthday&amp;lt;/th&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;       &amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   &amp;lt;/thead&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   &amp;lt;tbody&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;       &amp;lt;s:iterator value="userList" status="user"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           &amp;lt;tr&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;               &amp;lt;td&amp;gt;&amp;lt;s:property value="id" /&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;               &amp;lt;td&amp;gt;&amp;lt;s:property value="uName" /&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;               &amp;lt;td&amp;gt;&amp;lt;s:property value="uPass" /&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;               &amp;lt;td&amp;gt;&amp;lt;s:property value="birthday" /&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           &amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;       &amp;lt;/s:iterator&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   &amp;lt;/tbody&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;a href="#" id="getTotal"&amp;gt;total rows&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;table.jsp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;%@ page language="java" contentType="text/html; charset=UTF-8"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   pageEncoding="UTF-8"%&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;%@ taglib prefix="s" uri="/struts-tags"%&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;table&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;tbody&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;       &amp;lt;s:iterator value="userList" status="user"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           &amp;lt;tr&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;               &amp;lt;td&amp;gt;&amp;lt;s:property value="id" /&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;               &amp;lt;td&amp;gt;&amp;lt;s:property value="uName" /&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;               &amp;lt;td&amp;gt;&amp;lt;s:property value="uPass" /&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;               &amp;lt;td&amp;gt;&amp;lt;s:property value="birthday" /&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           &amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;       &amp;lt;/s:iterator&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   &amp;lt;/tbody&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;下面看看 action&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;public class TableAction extends ActionSupport implements Action {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;  private List&lt;/span&gt;&lt;userinfo&gt;&lt;span style="color: rgb(204, 102, 0);"&gt; userList;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;  private int totalRow;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;  private int size = 20;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;  private int page = 1;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;  @SuppressWarnings("unchecked")&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;  public String getUserListForTable() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      DBManager mgr = new DBManager();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      int start = (page - 1) * size;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      int end = start + size;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      if (totalRow == 0) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;          try {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;              mgr.openDB();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;              totalRow = mgr.getTotalRow();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;          } catch (Exception e) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;              // TODO Auto-generated catch block&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;              e.printStackTrace();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;          }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      try {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;          mgr.openDB();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;          userList = mgr.getUserInfoList(start, end);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      } catch (Exception e) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;          // TODO Auto-generated catch block&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;          e.printStackTrace();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      return SUCCESS;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;  public String getPageUserList() {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      int start = (page - 1) * size;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      int end = start + size;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      System.out.println(totalRow);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      DBManager mgr = new DBManager();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      try {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;          mgr.openDB();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;          userList = mgr.getUserInfoList(start, end);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;          mgr.closeDB();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      } catch (Exception e) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;          // TODO Auto-generated catch block&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;          e.printStackTrace();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      return SUCCESS;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;  public List&lt;/span&gt;&lt;userinfo&gt;&lt;span style="color: rgb(204, 102, 0);"&gt; getUserList() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;      return userList;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt; Get/Set .........&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/userinfo&gt;&lt;/userinfo&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;为了简单一点,userInfo就是普通的java类,包含几个基本数据类型,DBManager就是打开数据库取数据而已,主要方法如下:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;查询从startRow到endRow之间的数据&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/cfg.colsortparams;&gt;&lt;/pairs.length;&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;List DBManager&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;.getUserInfoList(int startRow, int endRow)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;得到总行数&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;int &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;DBManager&lt;/span&gt;&lt;/span&gt; .&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;getTotalRow()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;struts.xml 配置:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   &amp;lt;action name="getUserListForTable" class="home.dly.TableAction" method="getUserListForTable"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           &amp;lt;result name="success"&amp;gt;/userList.jsp&amp;lt;/result&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;       &amp;lt;/action&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;       &amp;lt;action name="getPageUserList" class="home.dly.TableAction" method="getPageUserList"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           &amp;lt;result name="success"&amp;gt;/table.jsp&amp;lt;/result&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;       &amp;lt;/action&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;在userList.jsp中的javascript&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;document.write(&amp;lt;s:property value="totalRow"/&amp;gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;$(document).ready(&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   function() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   var mygrid1=$("#table1").ingrid({&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           url: '&amp;lt;s:url action="getPageUserList" namespace="my"/&amp;gt;', //这里指定再次请求数据时的URL,也就是Action.如翻页时&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           initialLoad: true,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           paging: true, //是否分页,默认为true&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           rowClasses: ['grid-row-style1','grid-row-style1','grid-row-style2','grid-row-style1','grid-row-style1','grid-row-style3'],&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           pageNumber:1,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           totalRecords:&amp;lt;s:property value="totalRow"/&amp;gt;,    //数据的总行数.这个属性不是必须的,但是想要页面显示总页数就必须有了.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;                                                                                                       //必须有了.这里可以混合struts2的标签将anction中的数据取出.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           recordsPerPage:&amp;lt;s:property value="size"/&amp;gt;,        //每页大小,可以混合struts2的标签将anction中的数据取出,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;           height: 350&lt;/span&gt;&lt;br /&gt;   &lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;       });&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;   }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 102, 0);"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;table.jsp则是专门用来显示数据的, 以后的每次翻页请求数据都会显示在table.jsp中,因为action中配置了是转向table.jsp的,而userList.jsp每次请求数据后会将table.jsp中的内容在取过来显示出来,好比 include一样.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;最后注意一个小问题:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;数据显示的页面userList.jsp的table需要&amp;lt;thead&amp;gt;部分,table.jsp不用,只要body就OK了!!!&lt;/span&gt;&lt;br /&gt;&lt;pairs.length; prop="pairs[i].split('=');" page="" dir="" var="" colid="params.sort;" perhaps="" sort="hash['sort'];" param="" is="" a="" get="" the="" id="" for="" that="" key="" if="" length=""&gt;&lt;cfg.colsortparams; if="" colid="i;" set="" appropriate="" style="" on="" sorted="" perhaps="" we="" should="" bind="" an="" event="" to="" the="" column=""&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/cfg.colsortparams;&gt;&lt;/pairs.length;&gt;&lt;/div&gt;&lt;/rows.length;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-6003938924914396366?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/6003938924914396366/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=6003938924914396366' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/6003938924914396366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/6003938924914396366'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/08/jquery-ingrid.html' title='JQuery插件--ingrid使用'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-7608064177538176242</id><published>2008-08-18T22:30:00.000-07:00</published><updated>2008-08-19T00:35:51.300-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Linux 常用的基本命令</title><content type='html'>uname　 -a　　　　 查看内核版本　　　　　　　 &lt;br /&gt;ls　 -al　　　　 显示所有文件的属性 &lt;br /&gt;pwd　　　　　　　　　 显示当前路径　　　　　　　　 &lt;br /&gt;cd　 -　　　　 返回上一次目录　　　　　 cd　 ~　　　　 返回主目录 &lt;br /&gt;date　 s　　　　　　 设置时间、日期　　　　　　　　　　 &lt;br /&gt;cal　　　　　　 显示日历　　　　　 cal　 2006 &lt;br /&gt;bc　　　　　　　　　　 计算器具　　　　　　　　　　　　　　　 &lt;br /&gt;man　　 &amp;　 info　　　　　 帮助手册 &lt;br /&gt;locale　　　　　 显示当前字体　　　　　 locale　 -a　　　　 所有可用字体　　　　　 /etc/sysconfig/i18n设置文件 &lt;br /&gt;LANG=en　　　　 使用英文字体　　　　　　　　　　　　 &lt;br /&gt;sync　　　　　　　 将数据同步写入硬盘　　　　　　　　 &lt;br /&gt;shutdonw　 -h　 now　 &amp;　 half　 &amp;　 poweroff　　 关机 &lt;br /&gt;reboot　　　　　 重启　　　　　　　　　　　　　　　　　　　 &lt;br /&gt;startx　　 &amp;　　 init　 5　　　 进入图形介面 &lt;br /&gt;/work　　 &amp;　 ?work　　　　 向上、下查找文档内容 &lt;br /&gt;chgrp　　　　　　 改变档案群组　　 chgrp　 testing　 install.log　　　　 &lt;br /&gt;chown　　　　　 改变所属人　　　 chown　 root:root　 install.log &lt;br /&gt;chmod　　　　　　 改变属性　　　　　 chmod　 777　 install.log　　　　　 read=4　　 write=2　　 execute=1 &lt;br /&gt;cp　　　 复制　　　 cp　 filename &lt;br /&gt;rm　　　 删除文件　　 rm　 -rf　 filename　　　 强制删除文件 &lt;br /&gt;rmdir　　　 删除文件夹 &lt;br /&gt;mv　　 移动　　　　 mv　 123.txt　 222.txt　　 重命名 &lt;br /&gt;mkdir　　　　　 创建文件夹 &lt;br /&gt;touch　　　　　 创建文件　　 更新当前时间 &lt;br /&gt;cat　　　　　　　 由第一行开始显示　　　　　 cat　 &amp;brvbar;more　　 分页 &lt;br /&gt;nl　　　　　　　　 在内容前加行号 &lt;br /&gt;more　　 &amp;　　 less　　　 一面一面翻动 &lt;br /&gt;head　 -n　 filename　　　 显示第N行内容 &lt;br /&gt;tail　 -n　 filename　　 显示后N行内容 &lt;br /&gt;od　　　　　　　　 显示非纯文档 &lt;br /&gt;df　 -h　 显示分区空间 &lt;br /&gt;du　　 显示目录或文件的大小 &lt;br /&gt;fdisk　　　 分区设置　　　　 fdisk　 -l　 /dev/hda　　 显示硬盘分区状态 &lt;br /&gt;mkfs　　　　 建立各种文件系统　　 mkfs　 -t　 ext3　　 /dev/ram15　　　 &lt;br /&gt;fsck　　　　 检查和修复LINUX档案 &lt;br /&gt;ln　　　　　　 硬链接　　　 ln　 -s　　 软件链接 &lt;br /&gt;whereis　　　 查找命令 &lt;br /&gt;locate　　　　 查找 &lt;br /&gt;find　　　　　　 查找　　　 find　 /　 -name　 "***.***" &lt;br /&gt;which　　　　　 查看工具 &lt;br /&gt;whoami　　　　 显示当前用户 &lt;br /&gt;gcc　 -v　　　　 查看GCC版本 &lt;br /&gt;chattr　 +i　 filename　　 禁止删除　　　 chattr　 -i　 filename　　 取消禁止 &lt;br /&gt;lsattr　　　　 显示隐藏档属性 &lt;br /&gt;updatedb　　 更新资料库 &lt;br /&gt;mke2fs　　　　 格式化　　　 mkfs　 -t　 ext3　 &lt;br /&gt;dd　 if=/etc/passwd　 of=/tmp/passwd.bak　　　　 备份 &lt;br /&gt;mount　　　　　 列出系统所有的分区 &lt;br /&gt;mount　 -t　 iso9660　 /dev/cdrom　 /mnt/cdrom　　　 挂载光盘 &lt;br /&gt;mount　 -t　 vfat　 /dev/fd0　 /mnt/floppy　　　　　　　 挂载软盘 &lt;br /&gt;mount　 -t　 vfat　 -o　 iocharset=utf8,umask=000　 /dev/hda2　 /mnt/hda2　　　 挂载fat32分区 &lt;br /&gt;mount　 -t　 ntfs　 -o　 nls=utf8,umask=000　 /dev/hda3　 /mnt/hda3　　　　　　　　　 挂载ntfs分区 &lt;br /&gt;Linux-NTFS　 Project:　 http://linux-ntfs.sourceforge.net/ &lt;br /&gt;umount　 /mnt/hda3　　 缷载 &lt;br /&gt;ifconfig　　　 显示或设置网络设备 &lt;br /&gt;service　 network　 restart　　　 重启网卡　　 &lt;br /&gt;ifdown　 eth0　　 关闭网卡 &lt;br /&gt;ifup　 eth0　　　　 开启网卡 &lt;br /&gt;clear　　　　 清屏 &lt;br /&gt;history　　　　 历史记录　　　　　　　 !55　　 执行第55个指令 &lt;br /&gt;stty　　　 设置终端　　　　 stty　 -a &lt;br /&gt;fdisk　 /mbr　　　 删除GRUB &lt;br /&gt;at　　　　　 僅進行一次的工作排程 &lt;br /&gt;crontab　　　 循環執行的例行性命令　　　　 [e]编辑,[l]显示,[r]删除任务 &lt;br /&gt;&amp;　　　　　　　 后台运行程序　　　　 tar　 -zxvf　 123.tar.gz　 &amp;　 --------- &gt;后台运行 &lt;br /&gt;jobs　　　　 观看后台暂停的程序　　　 jobs　 -l &lt;br /&gt;fg　　　　　　 将后台程序调到前台　　　 fg　 n　 ------ &gt;n是数字,可以指定进行那个程序 &lt;br /&gt;bg　　　　　　 让工作在后台运行 &lt;br /&gt;kill　　　　 结束进程　　　　 kill　 -9　 PID　　　　　 [9]强制结束,[15]正常结束,[l]列出可用的kill信号 &lt;br /&gt;ps　 aux　　 查看后台程序　　　 &lt;br /&gt;top　　　　　 查看后台程序　　　 top　 -d　 2　　　　 每两秒更新一次　　　　　　　　 top　 -d　 2　 -p10604　　　 观看某个PID &lt;br /&gt;　　　　　　　　top　 -b　 -n　 2　 &gt;　 /tmp/top.txt　 ----- &gt;將　 top　 的資訊進行　 2　 次，然後將結果輸出到　 /tmp/top.txt　　　　 &lt;br /&gt;pstree　　　 以树状图显示程序　　　　 [A]以　 ASCII　 來連接,　 列出PID,　 [p]列出帐号 &lt;br /&gt;killall　　　 要刪除某個服務　　　　 killall　 -9　 httpd &lt;br /&gt;free　　　　　　 显示内存状态　　　　　 free　 -m　　 -------- &gt;以M为单位显示 &lt;br /&gt;uptime　　　　 显示目前系统开机时间 &lt;br /&gt;netstat　　　 显示网络状态　　　　 netstat　 -tulnp------ &gt;找出目前系統上已在監聽的網路連線及其　 PID &lt;br /&gt;dmesg　　　　　 显示开机信息　　　　 demsg　 &amp;brvbar;　 more &lt;br /&gt;nice　　　　　　 设置优先权　　　　　　 nice　 -n　 -5　 vi　 &amp;　 ----- &gt;用　 root　 給一個　 nice　 植為　 -5　 ，用於執行　 vi　 &lt;br /&gt;renice　　　　 调整已存在优先权 &lt;br /&gt;runlevel　　 显示目前的runlevel &lt;br /&gt;depmod　　　　 分析可载入模块的相依性 &lt;br /&gt;lsmod　　　　　 显示已载入系统的模块 &lt;br /&gt;modinfo　　　 显示kernel模块的信息 &lt;br /&gt;insmod　　　　 载入模块 &lt;br /&gt;modprobe　　　 自动处理可载入模块 &lt;br /&gt;rmmod　　　　　 删除模块 &lt;br /&gt;chkconfig　　　 检查，设置系统的各种服务　　　　　 chkconfig　 --list　 ----- &gt;列出各项服务状态 &lt;br /&gt;ntsysv　　　　　 设置系统的各种服务 &lt;br /&gt;cpio　　　　　　 备份文件&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-7608064177538176242?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/7608064177538176242/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=7608064177538176242' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/7608064177538176242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/7608064177538176242'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/08/linux_4153.html' title='Linux 常用的基本命令'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-4668007370389815954</id><published>2008-08-18T22:29:00.000-07:00</published><updated>2008-08-19T00:35:59.104-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Linux 压缩-解压 命令集</title><content type='html'>.tar&lt;br /&gt;解包： tar xvf FileName.tar&lt;br /&gt;打包：tar cvf FileName.tar DirName&lt;br /&gt;（注：tar是打包，不是压缩！）&lt;br /&gt;---------------------------------------------&lt;br /&gt;.gz&lt;br /&gt;解压1：gunzip FileName.gz&lt;br /&gt;解压2：gzip -d FileName.gz&lt;br /&gt;压缩：gzip FileName&lt;br /&gt;.tar.gz&lt;br /&gt;解压：tar zxvf FileName.tar.gz&lt;br /&gt;压缩：tar zcvf FileName.tar.gz DirName&lt;br /&gt;---------------------------------------------&lt;br /&gt;.bz2&lt;br /&gt;解压1：bzip2 -d FileName.bz2&lt;br /&gt;解压2：bunzip2 FileName.bz2&lt;br /&gt;压缩： bzip2 -z FileName&lt;br /&gt;.tar.bz2&lt;br /&gt;解压：tar jxvf FileName.tar.bz2&lt;br /&gt;压缩：tar jcvf FileName.tar.bz2 DirName&lt;br /&gt;---------------------------------------------&lt;br /&gt;.bz&lt;br /&gt;解压1：bzip2 -d FileName.bz&lt;br /&gt;解压2：bunzip2 FileName.bz&lt;br /&gt;压缩：未知&lt;br /&gt;.tar.bz&lt;br /&gt;解压：tar jxvf FileName.tar.bz&lt;br /&gt;压缩：未知&lt;br /&gt;---------------------------------------------&lt;br /&gt;.Z&lt;br /&gt;解压：uncompress FileName.Z&lt;br /&gt;压缩：compress FileName&lt;br /&gt;.tar.Z&lt;br /&gt;解压：tar Zxvf FileName.tar.Z&lt;br /&gt;压缩：tar Zcvf FileName.tar.Z DirName&lt;br /&gt;---------------------------------------------&lt;br /&gt;.tgz&lt;br /&gt;解压：tar zxvf FileName.tgz&lt;br /&gt;压缩：未知&lt;br /&gt;.tar.tgz&lt;br /&gt;解压：tar zxvf FileName.tar.tgz&lt;br /&gt;压缩：tar zcvf FileName.tar.tgz FileName&lt;br /&gt;---------------------------------------------&lt;br /&gt;.zip&lt;br /&gt;解压：unzip FileName.zip&lt;br /&gt;压缩：zip FileName.zip DirName&lt;br /&gt;---------------------------------------------&lt;br /&gt;.rar&lt;br /&gt;解压：rar a FileName.rar&lt;br /&gt;压缩：r ar e FileName.rar&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;rar请到：http://www.rarsoft.com/download.htm 下载！&lt;br /&gt;解压后请将rar_static拷贝到/usr/bin目录（其他由$PATH环境变量指定的目录也可以）：&lt;br /&gt;[root@www2 tmp]# cp rar_static /usr/bin/rar&lt;br /&gt;---------------------------------------------&lt;br /&gt;.lha&lt;br /&gt;解压：lha -e FileName.lha&lt;br /&gt;压缩：lha -a FileName.lha FileName&lt;br /&gt;&lt;br /&gt;lha请到：http://www.infor.kanazawa-it.ac.jp/.../lhaunix/下载！&lt;br /&gt;&gt;解压后请将lha拷贝到/usr/bin目录（其他由$PATH环境变量指定的目录也可以）：&lt;br /&gt;[root@www2 tmp]# cp lha /usr/bin/&lt;br /&gt;---------------------------------------------&lt;br /&gt;.rpm&lt;br /&gt;解包：rpm2cpio FileName.rpm | cpio -div&lt;br /&gt;---------------------------------------------&lt;br /&gt;.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh &lt;br /&gt;.lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea&lt;br /&gt;解压：sEx x FileName.*&lt;br /&gt;压缩：sEx a FileName.* FileName&lt;br /&gt;&lt;br /&gt;sEx只是调用相关程序，本身并无压缩、解压功能，请注意！&lt;br /&gt;sEx请到： http://sourceforge.net/projects/sex下载！&lt;br /&gt;解压后请将sEx拷贝到/usr/bin目录（其他由$PATH环境变量指定的目录也可以）：&lt;br /&gt;[root@www2 tmp]# cp sEx /usr/bin/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-4668007370389815954?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/4668007370389815954/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=4668007370389815954' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/4668007370389815954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/4668007370389815954'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/08/linux_18.html' title='Linux 压缩-解压 命令集'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-8248136717158479725</id><published>2008-08-18T22:26:00.000-07:00</published><updated>2008-08-19T00:36:14.520-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Linux文件系统结构</title><content type='html'>linux目录架构 &lt;br /&gt;/　　　 根目录&lt;br /&gt;/bin　　　　 常用的命令　 binary　 file　 的目錄 &lt;br /&gt;/boot　　　 存放系统启动时必须读取的档案，包括核心　 (kernel)　 在内 &lt;br /&gt;　　　　　/boot/grub/menu.lst　　　 GRUB设置 &lt;br /&gt;　　　　　/boot/vmlinuz　　　 内核 &lt;br /&gt;　　　　　/boot/initrd　　　　　 核心解壓縮所需　 RAM　 Disk &lt;br /&gt;/dev　　　　 系统周边设备　　　　　 &lt;br /&gt;/etc　　　　 系统相关设定文件 &lt;br /&gt;　　　　　/etc/DIR_COLORS　　　 设定颜色 &lt;br /&gt;　　　　　/etc/HOSTNAME　　　 设定用户的节点名 &lt;br /&gt;　　　　　/etc/NETWORKING　　　 只有YES标明网络存在 &lt;br /&gt;　　　　　/etc/host.conf　 文件说明用户的系统如何查询节点名 &lt;br /&gt;　　　　　/etc/hosts　 设定用户自已的IP与名字的对应表 &lt;br /&gt;　　　　　/etc/hosts.allow　 设置允许使用inetd的机器使用　 &lt;br /&gt;　　　　　/etc/hosts.deny　 设置不允许使用inetd的机器使用 &lt;br /&gt;　　　　　/etc/hosts.equiv　 设置远端机不用密码 &lt;br /&gt;　　　　　/etc/inetd.conf　 设定系统网络守护进程inetd的配置 &lt;br /&gt;　　　　　/etc/gateways　 设定路由器 &lt;br /&gt;　　　　　/etc/protocols　 设定系统支持的协议 &lt;br /&gt;　　　　　/etc/named.boot　 设定本机为名字服务器的配置文件 &lt;br /&gt;　　　　　/etc/sysconfig/network-scripts/ifcfg-eth0　　　 设置IP &lt;br /&gt;　　　　　/etc/resolv.conf　　　　 设置DNS　　 &lt;br /&gt;　　　　　/etc/X11　　 X　 Window的配置文件,xorg.conf　 或　 XF86Config　 這兩個　 X　 Server　 的設定檔 &lt;br /&gt;　　　　　/etc/fstab　　　　 记录开机要mount的文件系统 &lt;br /&gt;　　　　　/etc/inittab　 设定系统启动时init进程将把系统设置成什么样的runlevel &lt;br /&gt;　　　　　/etc/issue　 记录用户登录前显示的信息 &lt;br /&gt;　　　　　/etc/group　 设定用户的组名与相关信息 &lt;br /&gt;　　　　　/etc/passwd　 帐号信息 &lt;br /&gt;　　　　　/etc/shadow　 密码信息 &lt;br /&gt;　　　　　/etc/sudoers　 可以sudo命令的配置文件 &lt;br /&gt;　　　　　/etc/securetty　 设定哪些终端可以让root登录 &lt;br /&gt;　　　　　/etc/login.defs　 所有用户登录时的缺省配置 &lt;br /&gt;　　　　　/etc/exports　 设定NFS系统用的 &lt;br /&gt;　　　　　/etc/init.d/　　　 所有服務的預設啟動　 script　 都是放在這裡的，例如要啟動或者關閉 &lt;br /&gt;　　　　　/etc/xinetd.d/　　 這就是所謂的　 super　 daemon　 管理的各項服務的設定檔目錄 &lt;br /&gt;　　　　　/etc/modprobe.conf　　　 内核模块额外参数设定 &lt;br /&gt;　　　　　/etc/syslog.conf　　　 日志设置文件 &lt;br /&gt;/home　　　 使用者家目录 &lt;br /&gt;/lib　　　　 系统会使用到的函数库 &lt;br /&gt;　　　　　/lib/modules　　　 kernel　 的相关模块 &lt;br /&gt;　　　　　/var/lib/rpm　　　 rpm套件安装处　 &lt;br /&gt;/lost+found　　　　 系統不正常產生錯誤時，會將一些遺失的片段放置於此目錄下 &lt;br /&gt;/mnt　　　　　 外设的挂载点 &lt;br /&gt;/media　　　 与/mnt类似 &lt;br /&gt;/opt　　　　　 主机额外安装的软件 &lt;br /&gt;/proc　　　　 虚拟目录，是内存的映射 &lt;br /&gt;　　　　　　/proc/version　　　 内核版本 &lt;br /&gt;　　　　　　　/proc/sys/kernel　　　 系统内核功能 &lt;br /&gt;/root　　　　 系统管理员的家目录 &lt;br /&gt;/sbin　　　　 系统管理员才能执行的指令 &lt;br /&gt;/srv　　　　　 一些服務啟動之後，這些服務所需要取用的資料目錄 &lt;br /&gt;/tmp　　　　　 一般使用者或者是正在執行的程序暫時放置檔案的地方 &lt;br /&gt;/usr　　　　　 最大的目录，存许应用程序和文件 &lt;br /&gt;　　　　/usr/X11R6：　　　 X-Window目录　 &lt;br /&gt;　　　　/usr/src：　　　　 Linux源代码 &lt;br /&gt;　　　　/usr/include：系统头文件 &lt;br /&gt;　　　　/usr/openwin　 存放SUN的OpenWin　 &lt;br /&gt;　　　　/usr/man　 在线使用手册 &lt;br /&gt;　　　　/usr/bin　　　　　　　　　　　 使用者可執行的　 binary　 file　 的目錄 &lt;br /&gt;　　　　/usr/local/bin　　　　　 使用者可執行的　 binary　 file　 的目錄 &lt;br /&gt;　　　　/usr/lib　　　　　　　　　　　 系统会使用到的函数库 &lt;br /&gt;　　　　/usr/local/lib　　　　　 系统会使用到的函数库 &lt;br /&gt;　　　　/usr/sbin　　　　　　　　　　 系统管理员才能执行的指令 &lt;br /&gt;　　　　/usr/local/sbin　　　　 系统管理员才能执行的指令 &lt;br /&gt;/var　　　 日志文件 &lt;br /&gt;　　　　/var/log/secure　　　　 記錄登入系統存取資料的檔案，例如　 pop3,　 ssh,　 telnet,　 ftp　 等都會記錄在此檔案中 &lt;br /&gt;　　　　/var/log/wtmp　　　　　　 記錄登入者的訊息資料,　 last &lt;br /&gt;　　　　/var/log/messages　　 幾乎系統發生的錯誤訊息 &lt;br /&gt;　　　　/var/log/boot.log　　 記錄開機或者是一些服務啟動的時候，所顯示的啟動或關閉訊息 &lt;br /&gt;　　　　/var/log/maillog　　　 紀錄郵件存取或往來(　 sendmail　 與　 pop3　 )的使用者記錄 &lt;br /&gt;　　　　/var/log/cron　　　　　　 記錄　 crontab　 這個例行性服務的內容 &lt;br /&gt;　　　　/var/log/httpd,　 /var/log/news,　 /var/log/mysqld.log,　 /var/log/samba,　 /var/log/procmail.log： &lt;br /&gt;　　　　分別是幾個不同的網路服務的記錄檔&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-8248136717158479725?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/8248136717158479725/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=8248136717158479725' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/8248136717158479725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/8248136717158479725'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/08/linux.html' title='Linux文件系统结构'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-4491914485137742706</id><published>2008-08-18T09:08:00.000-07:00</published><updated>2008-08-18T09:10:43.161-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>java--继承,多态,重载和重写</title><content type='html'>什么是多态？它的实现机制是什么呢？重载和重写的区别在那里？这就是这一次我们要回顾的四个十分重要的概念：继承、多态、重载和重写。&lt;br /&gt;&lt;br /&gt;继承&lt;br /&gt;&lt;br /&gt;简单的说，继承就是在一个现有类型的基础上，通过增加新的方法或者重定义已有方法（下面会讲到，这种方式叫重写）的方式，产生一个新的类型。继承是面向对象的三个基本特征--封装、继承、多态的其中之一，我们在使用JAVA时编写的每一个类都是在继承，因为在JAVA语言中，java.lang.Object类是所有类最根本的基类（或者叫父类、超类），如果我们新定义的一个类没有明确地指定继承自哪个基类，那么JAVA就会默认为它是继承自Object类的。&lt;br /&gt;&lt;br /&gt;我们可以把JAVA中的类分为以下三种：&lt;br /&gt;&lt;br /&gt;   1. 普通类：使用class定义且不含有抽象方法的类。&lt;br /&gt;   2. 抽象类：使用abstract class定义的类，它可以含有，也可以不含有抽象方法。&lt;br /&gt;   3. 接口类：使用interface定义的类。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;在这三种类型之间存在下面的继承规律：&lt;br /&gt;&lt;br /&gt;    * 普通类可以继承（extends）普通类，可以继承（extends）抽象类，可以继承（implements）接口。&lt;br /&gt;    * 抽象类可以继承（extends）普通类，可以继承（extends）抽象类，可以继承（implements）接口。&lt;br /&gt;    * 接口只能继承（extends）接口。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;请注意上面三条规律中每种继承情况下使用的不同的关键字extends和implements，它们是不可以随意替换的。大家知道，一个普通类继承一个接口后，必须实现这个接口中定义的所有方法，否则就只能被定义为抽象类。我在这里之所以没有对implements关键字使用“实现”这种说法是因为从概念上来说它也是表示一种继承关系，而且对于抽象类implements接口的情况下，它并不是一定要实现这个接口定义的任何方法，因此使用继承的说法更为合理一些。&lt;br /&gt;&lt;br /&gt;以上三条规律同时遵守下面这些约束：&lt;br /&gt;&lt;br /&gt;   1. 普通类和抽象类都只能最多继承一个普通类，或者最多继承一个抽象类，并且这两种情况是互斥的，也就是说它们要么继承一个普通类，要么继承一个抽象类。&lt;br /&gt;   2. 普通类、抽象类和接口在继承接口时，不受数量的约束，理论上可以继承无限多个接口。当然，对于普通类来说，它必须实现它所继承的所有接口中定义的全部方法。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;继承给我们的编程带来的好处就是对原有类的复用（重用）。就像模块的复用一样，类的复用可以提高我们的开发效率，实际上，模块的复用是大量类的复用叠加后的效果。除了继承之外，我们还可以使用组合的方式来复用类。所谓组合就是把原有类定义为新类的一个属性，通过在新类中调用原有类的方法来实现复用。如果新定义的类型与原有类型之间不存在被包含的关系，也就是说，从抽象概念上来讲，新定义类型所代表的事物并不是原有类型所代表事物的一种，比如黄种人是人类的一种，它们之间存在包含与被包含的关系，那么这时组合就是实现复用更好的选择。下面这个例子就是组合方式的一个简单示例：&lt;br /&gt;Java代码 复制代码&lt;br /&gt;&lt;br /&gt;   1. public class Sub {  &lt;br /&gt;   2.     private Parent p = new Parent();  &lt;br /&gt;   3.   &lt;br /&gt;   4.     public void doSomething() {  &lt;br /&gt;   5.         // 复用Parent类的方法  &lt;br /&gt;   6.         p.method();  &lt;br /&gt;   7.         // other code  &lt;br /&gt;   8.     }  &lt;br /&gt;   9. }  &lt;br /&gt;  10.   &lt;br /&gt;  11. class Parent {  &lt;br /&gt;  12.     public void method() {  &lt;br /&gt;  13.         // do something here  &lt;br /&gt;  14.     }  &lt;br /&gt;  15. }  &lt;br /&gt;&lt;br /&gt;public class Sub {&lt;br /&gt; private Parent p = new Parent();&lt;br /&gt;&lt;br /&gt; public void doSomething() {&lt;br /&gt;  // 复用Parent类的方法&lt;br /&gt;  p.method();&lt;br /&gt;  // other code&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Parent {&lt;br /&gt; public void method() {&lt;br /&gt;  // do something here&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;当然，为了使代码更加有效，我们也可以在需要使用到原有类型（比如Parent p）时，才对它进行初始化。&lt;br /&gt;&lt;br /&gt;使用继承和组合复用原有的类，都是一种增量式的开发模式，这种方式带来的好处是不需要修改原有的代码，因此不会给原有代码带来新的BUG，也不用因为对原有代码的修改而重新进行测试，这对我们的开发显然是有益的。因此，如果我们是在维护或者改造一个原有的系统或模块，尤其是对它们的了解不是很透彻的时候，就可以选择增量开发的模式，这不仅可以大大提高我们的开发效率，也可以规避由于对原有代码的修改而带来的风险。&lt;br /&gt;&lt;br /&gt;多态&lt;br /&gt;&lt;br /&gt;多态是又一个重要的基本概念，上面说到了，它是面向对象的三个基本特征之一。究竟什么是多态呢？我们先看看下面的例子，来帮助理解：&lt;br /&gt;Java代码 复制代码&lt;br /&gt;&lt;br /&gt;   1. //汽车接口  &lt;br /&gt;   2. interface Car {  &lt;br /&gt;   3.     // 汽车名称  &lt;br /&gt;   4.     String getName();  &lt;br /&gt;   5.   &lt;br /&gt;   6.     // 获得汽车售价  &lt;br /&gt;   7.     int getPrice();  &lt;br /&gt;   8. }  &lt;br /&gt;   9.   &lt;br /&gt;  10. // 宝马  &lt;br /&gt;  11. class BMW implements Car {  &lt;br /&gt;  12.     public String getName() {  &lt;br /&gt;  13.         return "BMW";  &lt;br /&gt;  14.     }  &lt;br /&gt;  15.   &lt;br /&gt;  16.     public int getPrice() {  &lt;br /&gt;  17.         return 300000;  &lt;br /&gt;  18.     }  &lt;br /&gt;  19. }  &lt;br /&gt;  20.   &lt;br /&gt;  21. // 奇瑞QQ  &lt;br /&gt;  22. class CheryQQ implements Car {  &lt;br /&gt;  23.     public String getName() {  &lt;br /&gt;  24.         return "CheryQQ";  &lt;br /&gt;  25.     }  &lt;br /&gt;  26.   &lt;br /&gt;  27.     public int getPrice() {  &lt;br /&gt;  28.         return 20000;  &lt;br /&gt;  29.     }  &lt;br /&gt;  30. }  &lt;br /&gt;  31.   &lt;br /&gt;  32. // 汽车出售店  &lt;br /&gt;  33. public class CarShop {  &lt;br /&gt;  34.     // 售车收入  &lt;br /&gt;  35.     private int money = 0;  &lt;br /&gt;  36.   &lt;br /&gt;  37.     // 卖出一部车  &lt;br /&gt;  38.     public void sellCar(Car car) {  &lt;br /&gt;  39.         System.out.println("车型：" + car.getName() + "  单价：" + car.getPrice());  &lt;br /&gt;  40.         // 增加卖出车售价的收入  &lt;br /&gt;  41.         money += car.getPrice();  &lt;br /&gt;  42.     }  &lt;br /&gt;  43.   &lt;br /&gt;  44.     // 售车总收入  &lt;br /&gt;  45.     public int getMoney() {  &lt;br /&gt;  46.         return money;  &lt;br /&gt;  47.     }  &lt;br /&gt;  48.   &lt;br /&gt;  49.     public static void main(String[] args) {  &lt;br /&gt;  50.         CarShop aShop = new CarShop();  &lt;br /&gt;  51.         // 卖出一辆宝马  &lt;br /&gt;  52.         aShop.sellCar(new BMW());  &lt;br /&gt;  53.         // 卖出一辆奇瑞QQ  &lt;br /&gt;  54.         aShop.sellCar(new CheryQQ());  &lt;br /&gt;  55.         System.out.println("总收入：" + aShop.getMoney());  &lt;br /&gt;  56.     }  &lt;br /&gt;  57. }  &lt;br /&gt;&lt;br /&gt;//汽车接口&lt;br /&gt;interface Car {&lt;br /&gt; // 汽车名称&lt;br /&gt; String getName();&lt;br /&gt;&lt;br /&gt; // 获得汽车售价&lt;br /&gt; int getPrice();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// 宝马&lt;br /&gt;class BMW implements Car {&lt;br /&gt; public String getName() {&lt;br /&gt;  return "BMW";&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public int getPrice() {&lt;br /&gt;  return 300000;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// 奇瑞QQ&lt;br /&gt;class CheryQQ implements Car {&lt;br /&gt; public String getName() {&lt;br /&gt;  return "CheryQQ";&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public int getPrice() {&lt;br /&gt;  return 20000;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// 汽车出售店&lt;br /&gt;public class CarShop {&lt;br /&gt; // 售车收入&lt;br /&gt; private int money = 0;&lt;br /&gt;&lt;br /&gt; // 卖出一部车&lt;br /&gt; public void sellCar(Car car) {&lt;br /&gt;  System.out.println("车型：" + car.getName() + "  单价：" + car.getPrice());&lt;br /&gt;  // 增加卖出车售价的收入&lt;br /&gt;  money += car.getPrice();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // 售车总收入&lt;br /&gt; public int getMoney() {&lt;br /&gt;  return money;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  CarShop aShop = new CarShop();&lt;br /&gt;  // 卖出一辆宝马&lt;br /&gt;  aShop.sellCar(new BMW());&lt;br /&gt;  // 卖出一辆奇瑞QQ&lt;br /&gt;  aShop.sellCar(new CheryQQ());&lt;br /&gt;  System.out.println("总收入：" + aShop.getMoney());&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;运行结果：&lt;br /&gt;&lt;br /&gt;   1. 车型：BMW 单价：300000&lt;br /&gt;   2. 车型：CheryQQ 单价：20000&lt;br /&gt;   3. 总收入：320000 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;继承是多态得以实现的基础。从字面上理解，多态就是一种类型（都是Car类型）表现出多种状态（宝马汽车的名称是BMW，售价是300000；奇瑞汽车的名称是CheryQQ，售价是2000）。将一个方法调用同这个方法所属的主体（也就是对象或类）关联起来叫做绑定，分前期绑定和后期绑定两种。下面解释一下它们的定义：&lt;br /&gt;&lt;br /&gt;   1. 前期绑定：在程序运行之前进行绑定，由编译器和连接程序实现，又叫做静态绑定。比如static方法和final方法，注意，这里也包括private方法，因为它是隐式final的。&lt;br /&gt;   2. 后期绑定：在运行时根据对象的类型进行绑定，由方法调用机制实现，因此又叫做动态绑定，或者运行时绑定。除了前期绑定外的所有方法都属于后期绑定。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;多态就是在后期绑定这种机制上实现的。多态给我们带来的好处是消除了类之间的耦合关系，使程序更容易扩展。比如在上例中，新增加一种类型汽车的销售，只需要让新定义的类继承Car类并实现它的所有方法，而无需对原有代码做任何修改，CarShop类的sellCar(Car car)方法就可以处理新的车型了。新增代码如下：&lt;br /&gt;Java代码 复制代码&lt;br /&gt;&lt;br /&gt;   1. // 桑塔纳汽车  &lt;br /&gt;   2. class Santana implements Car {  &lt;br /&gt;   3.     public String getName() {  &lt;br /&gt;   4.         return "Santana";  &lt;br /&gt;   5.     }  &lt;br /&gt;   6.   &lt;br /&gt;   7.     public int getPrice() {  &lt;br /&gt;   8.         return 80000;  &lt;br /&gt;   9.     }  &lt;br /&gt;  10. }  &lt;br /&gt;&lt;br /&gt;// 桑塔纳汽车&lt;br /&gt;class Santana implements Car {&lt;br /&gt; public String getName() {&lt;br /&gt;  return "Santana";&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public int getPrice() {&lt;br /&gt;  return 80000;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;重载和重写&lt;br /&gt;&lt;br /&gt;重载和重写都是针对方法的概念，在弄清楚这两个概念之前，我们先来了解一下什么叫方法的型构。型构就是指方法的组成结构，具体包括方法的名称和参数，涵盖参数的数量、类型以及出现的顺序，但是不包括方法的返回值类型，访问权限修饰符，以及abstract、static、final等修饰符。比如下面两个就是具有相同型构的方法：&lt;br /&gt;Java代码 复制代码&lt;br /&gt;&lt;br /&gt;   1. public void method(int i, String s) {  &lt;br /&gt;   2.     // do something  &lt;br /&gt;   3. }  &lt;br /&gt;   4.   &lt;br /&gt;   5. public String method(int i, String s) {  &lt;br /&gt;   6.     // do something  &lt;br /&gt;   7. }  &lt;br /&gt;&lt;br /&gt;public void method(int i, String s) {&lt;br /&gt; // do something&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public String method(int i, String s) {&lt;br /&gt; // do something&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;而这两个就是具有不同型构的方法：&lt;br /&gt;Java代码 复制代码&lt;br /&gt;&lt;br /&gt;   1. public void method(int i, String s) {  &lt;br /&gt;   2.     // do something  &lt;br /&gt;   3. }  &lt;br /&gt;   4.   &lt;br /&gt;   5. public void method(String s, int i) {  &lt;br /&gt;   6.     // do something  &lt;br /&gt;   7. }  &lt;br /&gt;&lt;br /&gt;public void method(int i, String s) {&lt;br /&gt; // do something&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void method(String s, int i) {&lt;br /&gt; // do something&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;了解完型构的概念后我们再来看看重载和重写，请看它们的定义：&lt;br /&gt;&lt;br /&gt;    * 重写，英文名是override，是指在继承情况下，子类中定义了与其基类中方法具有相同型构的新方法，就叫做子类把基类的方法重载了。这是实现多态必须的步骤。&lt;br /&gt;    * 重载，英文名是overload，是指在同一个类中定义了一个以上具有相同名称，但是型构不同的方法。在同一个类中，是不允许定义多于一个的具有相同型构的方法的。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;我们来考虑一个有趣的问题：构造器可以被重载吗？答案当然是可以的，我们在实际的编程中也经常这么做。实际上构造器也是一个方法，构造器名就是方法名，构造器参数就是方法参数，而它的返回值就是新创建的类的实例。但是构造器却不可以被子类重写，因为子类无法定义与基类具有相同型构的构造器。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-4491914485137742706?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/4491914485137742706/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=4491914485137742706' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/4491914485137742706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/4491914485137742706'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/08/java.html' title='java--继承,多态,重载和重写'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-5762124790246633202</id><published>2008-08-18T06:51:00.000-07:00</published><updated>2008-08-19T00:36:06.597-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>js读取excel文件</title><content type='html'>&amp;lt;script&amp;gt;&lt;br /&gt;function readThis(){ &lt;br /&gt; var tempStr = ""; &lt;br /&gt; var filePath= document.all.upfile.value; &lt;br /&gt; var oXL = new ActiveXObject("Excel.application"); &lt;br /&gt; var oWB = oXL.Workbooks.open(filePath); &lt;br /&gt; oWB.worksheets(1).select();  &lt;br /&gt; var oSheet = oWB.ActiveSheet; &lt;br /&gt; try{  &lt;br /&gt;  for(var i=2;i&amp;lt;46;i++){&lt;br /&gt;     if(oSheet.Cells(i,2).value =="null" || oSheet.Cells(i,3).value =="null" )&lt;br /&gt;   break;&lt;br /&gt;     var a = oSheet.Cells(i,2).value.toString()=="undefined"?"":oSheet.Cells(i,2).value;&lt;br /&gt;     tempStr+=(" "+oSheet.Cells(i,2).value+"  "+oSheet.Cells(i,3).value+"  "+oSheet.Cells(i,4).value+"  "+oSheet.Cells(i,5).value+"  "+oSheet.Cells(i,6).value+"\n");  &lt;br /&gt;  } &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;catch(e){&lt;br /&gt;   //alert(e);  &lt;br /&gt; document.all.txtArea.value = tempStr; &lt;br /&gt; }  &lt;br /&gt;&lt;br /&gt; document.all.txtArea.value = tempStr; oXL.Quit(); &lt;br /&gt; CollectGarbage();&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;input type="file" id="upfile" /&amp;gt;&lt;br /&gt;&amp;lt;input type="button" onclick="readThis();" value="读取"&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;textarea id="txtArea" cols=50 rows=10&amp;gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-5762124790246633202?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/5762124790246633202/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=5762124790246633202' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/5762124790246633202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/5762124790246633202'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/08/jsexcel.html' title='js读取excel文件'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-7146008910693161998</id><published>2008-08-16T23:42:00.000-07:00</published><updated>2008-08-19T00:36:24.727-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>JQuery 选择器使用</title><content type='html'>jQuery的选择器可谓异常强大,没有什么DOM里的任何数据能逃出它的掌心,这点是我非常喜欢的,&lt;br /&gt;以前获取NODE要用getElementById,getElementsByTag,非常繁琐,用jQuery,很简单的代码就能实现&lt;br /&gt;下面是对jQuery的选择器使用的总结,不妥之处,敬请斧正.&lt;br /&gt;&lt;br /&gt;我把jQuery的选择器选择的方式分5类:&lt;br /&gt;&lt;br /&gt;1.DOM方式&lt;br /&gt;  $('#id1')&lt;br /&gt;  //返回id为id1的TAG,类型:jQuery对象,以下省略&lt;br /&gt;  &lt;br /&gt;  $('#id1 p')&lt;br /&gt;  $('#id1&gt;p')&lt;br /&gt;  //返回id为id1的TAG下所有的p&lt;br /&gt;&lt;br /&gt;  能区别 $('#id1 #id2 #id3') 和 $('#id1,#id2,#id3') 的区别吗?&lt;br /&gt;&lt;br /&gt;  $('#id1,#id2,#id3')&lt;br /&gt;  //返回id为#id1下的#id2下的#id3的TAG&lt;br /&gt;&lt;br /&gt;  $('#id1,#id2,#id3')&lt;br /&gt;  //返回id为id1,id2,id3的TAG的群组&lt;br /&gt;&lt;br /&gt;2.CSS方式&lt;br /&gt;  &lt;br /&gt;  $('.style')&lt;br /&gt;  //返回样式为style的TAG&lt;br /&gt;&lt;br /&gt;  $('div.style')&lt;br /&gt;  //返回样式为style的div&lt;br /&gt;&lt;br /&gt;  $('.style1,.style2,.style3')&lt;br /&gt;  //返回样式为style1,style2,style3的群组&lt;br /&gt;&lt;br /&gt;3.属性方式&lt;br /&gt;  &lt;br /&gt;  $('[attribute]')&lt;br /&gt;  //返回所有拥有attribute属性的所有tag&lt;br /&gt;  &lt;br /&gt;  $('[attribute=value]')//返回属性attribute值为value的所有tag&lt;br /&gt;  $('[attribute!=value]')//返回属性attribute值不为value的所有tag&lt;br /&gt;  $('[attribute^=value]')//返回属性attribute值以value开头的所有tag&lt;br /&gt;  $('[attribute$=value]')//返回属性attribute值以value结尾的所有tag&lt;br /&gt;  $('[attribute*=value]')//返回属性attribute值包含value的所有tag&lt;br /&gt;&lt;br /&gt;  还可有群组选择&lt;br /&gt;  $('[attribute1=value1],[attribute2=value2],[attribute3=value3]')&lt;br /&gt;&lt;br /&gt;4.表单'伪'类&lt;br /&gt;  &lt;br /&gt;  形似CSS里的伪类 a:hover 所以就叫表单'伪'类,一己之见&lt;br /&gt;   &lt;br /&gt;  $(':input')   //返回所有的input、textarea、select、button&lt;br /&gt;  $(':button')  //返回所有type为button的表单&lt;br /&gt;  其他类似的还有:':text',':password',':radio',':checkbox',':reset',':submit',':file'  &lt;br /&gt;&lt;br /&gt;  $(':disabled') //返回所有的禁用的表单,其实也可以通过属性方式选择&lt;br /&gt;  其他类似的还有:':enabled',':checked',':selected'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5."伪伪类"过滤&lt;br /&gt;   严格说不应分一类,因为单用这不一定选不出所需的tag(表单类除外)   &lt;br /&gt;   "伪伪类"过滤对基本方式选择起到了如虎添翼的作用&lt;br /&gt;&lt;br /&gt;   $("p:first")     //返回所选的第一个p&lt;br /&gt;   &lt;br /&gt;   $("p:first-child")//和$("p:first")不同的是,这里是同级下的第一个p&lt;br /&gt;&lt;br /&gt;   $("p:last")      //返回所选的最后一个p&lt;br /&gt;   $("p:not(.ok)")  //返回样式不是ok的所有的p ,not()中的参数支持以上四种选择方式&lt;br /&gt;   $("#id1:parent") //返回id为id1的tag的父节点&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-7146008910693161998?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/7146008910693161998/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=7146008910693161998' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/7146008910693161998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/7146008910693161998'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/08/jquery.html' title='JQuery 选择器使用'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-816615535551228814</id><published>2008-08-16T22:10:00.000-07:00</published><updated>2008-08-19T00:36:36.245-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>DWR 框架－中级dwr.xml配置</title><content type='html'>发现一个dwr教程：&lt;a href="http://wiki.javascud.org/display/dwrcn/Home"&gt;http://wiki.javascud.org/display/dwrcn/Home&lt;/a&gt;&lt;br /&gt;dwr.xml文件如下&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- START SNIPPET: dwr --&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE dwr PUBLIC &lt;br /&gt;    "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" &lt;br /&gt;    "http://www.getahead.ltd.uk/dwr/dwr10.dtd"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;dwr&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- init is only needed if you are extending DWR --&amp;gt;&lt;br /&gt;  &amp;lt;init&amp;gt;&lt;br /&gt;    &amp;lt;creator id="..." class="..."/&amp;gt;&lt;br /&gt;    &amp;lt;converter id="..." class="..."/&amp;gt;&lt;br /&gt;  &amp;lt;/init&amp;gt;&lt;br /&gt; &amp;lt;allow&amp;gt;&lt;br /&gt; &amp;lt;!&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;create javascript="listService" creator="spring"&amp;gt;&lt;br /&gt;   &amp;lt;param name="beanName" value="listService" /&amp;gt;&lt;br /&gt;   &amp;lt;include method="findSubindustryByParent" /&amp;gt;&lt;br /&gt;   &amp;lt;include method="findAllCitiesByProvince" /&amp;gt;&lt;br /&gt;   &amp;lt;include method="getIndustries" /&amp;gt;&lt;br /&gt;  &amp;lt;/create&amp;gt;&lt;br /&gt;  &lt;br /&gt;&amp;lt;!-- create标签用来配置你想要暴露给dwr在页面调用的java类，listServic即为home.dong.ListSerive.&lt;br /&gt;DWR在应用启动时将ListService转化为名为 listService.js的js文件供页面调用。&lt;br /&gt;而creator属性用来配置dwrj应该如何初始化该类的实力以转化成js文件，creator的值有new和spring两种（还有其他如none,scripted等，具体可参看官方文档，说的也很明白（本人暂且只使用了这两种方式）。&lt;br /&gt;很显然，当cteator='new'时dwr会使用java new关键字产生该类实例，然后转化成js文件。而creator＝'spring'时当然就是由sping容器IOC注入该类实例。所以有下面的&amp;lt;prama&amp;gt;参数也是用配合creator的。&lt;br /&gt;如creator='new'时，对应的&amp;lt;param name="class" value="aaa.bbb.CCC"&amp;gt;这样dwr会知道这是一个aaa.bbb.CCC的类，会使用new来创建并转化为js文件，相应的如果creator="spring" 则对应的&amp;lt;param name="beanName" value="someCCC"&amp;gt;,dwr创建js文件时就不会new了，而是有spring注入进来的。&lt;br /&gt;&amp;lt;include&amp;gt; 标签很简单，只要把该类中你想要使用的方法填写到里面就行了，这样在你浏览http://localhost:8080/yourPrj/dwr/interface/myClass.js时MyClass类中所有的方法都在可以看见，但是只有你在&amp;lt;include&amp;gt;标签中配置过的那些方法可以使用，也就是没有红色的warning的。&lt;br /&gt;   &lt;br /&gt;  &lt;br /&gt;   --&amp;gt; &lt;br /&gt;&lt;br /&gt;  &amp;lt;convert match="com.bomeiti.entity.UI.Industry"&lt;br /&gt;   converter="bean"&amp;gt;&lt;br /&gt;   &amp;lt;param name="include" value="id,description"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;  &amp;lt;/convert&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;&lt;br /&gt;&amp;lt;convert&amp;gt;标签使用来转化类的,也就是实体类了，这里需要指明该类的全名（包括包名）,&amp;lt;param&amp;gt;用来配置该类中那些属性是可见的。其他没什么难的了，&lt;br /&gt;&lt;br /&gt;--&amp;gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &amp;lt;/allow&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;signatures&amp;gt;&lt;br /&gt; &amp;lt;![CDATA[&lt;br /&gt;        import java.util.Map;&lt;br /&gt;        import org.apache.struts2.validators.DWRValidator;&lt;br /&gt;&lt;br /&gt;        DWRValidator.doPost(String, String, Map&amp;lt;String, String&amp;gt;);&lt;br /&gt;       ]]&amp;gt;&lt;br /&gt; &amp;lt;/signatures&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;&lt;br /&gt;&amp;lt;signarures&amp;gt;中用来配置莫些具有复杂参数的方法 如listService.getIndustries(Industry ind);此时页面调用时应先组装industry 数据，然后调用&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/dwr&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-816615535551228814?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/816615535551228814/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=816615535551228814' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/816615535551228814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/816615535551228814'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/08/dwr-ajaxdwrxml.html' title='DWR 框架－中级dwr.xml配置'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8333902247329681149.post-3225573321576103640</id><published>2008-08-16T21:51:00.001-07:00</published><updated>2008-08-19T00:36:47.262-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>DWR ajax开发框架－初级配置</title><content type='html'>首先到：http://directwebremoting.org/下载dwr.jar文件。把它放到你的webapp的WEB-INF/lib目录下.需要把下面的代码加到WEB-INF/web.xml文件中:&lt;br /&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;  &amp;lt;servlet-name&amp;gt;dwr-invoker&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;  &amp;lt;display-name&amp;gt;DWR Servlet&amp;lt;/display-name&amp;gt;&lt;br /&gt;  &amp;lt;servlet-class&amp;gt;uk.ltd.getahead.dwr.DWRServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;  &amp;lt;init-param&amp;gt;&lt;br /&gt;     &amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;br /&gt;     &amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;&lt;br /&gt;  &amp;lt;/init-param&amp;gt;&lt;br /&gt;&amp;lt;/servlet&amp;gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;  &amp;lt;servlet-name&amp;gt;dwr-invoker&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;  &amp;lt;url-pattern&amp;gt;/dwr/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;在WEB-INF目录下的web.xml旁边创建一个dwr.xml文件:&lt;br /&gt;&amp;lt;!DOCTYPE dwr PUBLIC&lt;br /&gt;    "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"&lt;br /&gt;    "http://www.getahead.ltd.uk/dwr/dwr10.dtd"&amp;gt;&lt;br /&gt;&amp;lt;dwr&amp;gt;&lt;br /&gt;  &amp;lt;allow&amp;gt;&lt;br /&gt;    &amp;lt;create creator="new" javascript="JDate"&amp;gt;&lt;br /&gt;      &amp;lt;param name="class" value="java.util.Date"/&amp;gt;&lt;br /&gt;    &amp;lt;/create&amp;gt;&lt;br /&gt;    &amp;lt;create creator="new" javascript="Demo"&amp;gt;&lt;br /&gt;      &amp;lt;param name="class" value="your.java.Bean"/&amp;gt;&lt;br /&gt;    &amp;lt;/create&amp;gt;&lt;br /&gt;  &amp;lt;/allow&amp;gt;&lt;br /&gt;&amp;lt;/dwr&amp;gt;&lt;br /&gt;&lt;br /&gt;假设项目名为DwrPrj,部署项目到tomcat 并启动 访问一下网址：&lt;br /&gt;http://localhost:8080/DwrPrj/dwr/&lt;br /&gt;就会看到 暴露出来可供调用的类 ，点击进入便可看到该类的各种方法。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8333902247329681149-3225573321576103640?l=alexinsummer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexinsummer.blogspot.com/feeds/3225573321576103640/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8333902247329681149&amp;postID=3225573321576103640' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/3225573321576103640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8333902247329681149/posts/default/3225573321576103640'/><link rel='alternate' type='text/html' href='http://alexinsummer.blogspot.com/2008/08/dwr-ajax_16.html' title='DWR ajax开发框架－初级配置'/><author><name>Alex</name><uri>http://www.blogger.com/profile/12909620538931373919</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_0HpSMqwCErQ/SLFd3fkpWSI/AAAAAAAAAEc/Q_h6UoC8DLM/S220/gege1.jpeg'/></author><thr:total>0</thr:total></entry></feed>
