﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-魏杰的技术专栏</title><link>http://www.cnitblog.com/jackmisweijie/</link><description>共同交流学习</description><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 08:42:07 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 08:42:07 GMT</pubDate><ttl>60</ttl><item><title>全景图制作过程简介 </title><link>http://www.cnitblog.com/jackmisweijie/archive/2008/08/27/48422.html</link><dc:creator>魏杰</dc:creator><author>魏杰</author><pubDate>Wed, 27 Aug 2008 02:27:00 GMT</pubDate><guid>http://www.cnitblog.com/jackmisweijie/archive/2008/08/27/48422.html</guid><wfw:comment>http://www.cnitblog.com/jackmisweijie/comments/48422.html</wfw:comment><comments>http://www.cnitblog.com/jackmisweijie/archive/2008/08/27/48422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackmisweijie/comments/commentRss/48422.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackmisweijie/services/trackbacks/48422.html</trackback:ping><description><![CDATA[<font size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 全景图技术的应用越来越广，现在已应用到很多领域，它是通过数张不同角度拍摄的图片（必须得有重叠）来经过提取控制点、拼合、优化处理、缝合等复杂的算法，结合用户鼠标、键盘等交互来达到模拟3D场景的效果。对比普通的平面照片，可以达到更好的演示效果。全景图虚拟现实是一门比较新潮的应用。</font>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在有很多制作全景图的软件。这只是软件的实现，如果我们想通过程序来实现，应该怎样实现呢？大家可以跟踪软件制作全景图的步骤，会发现大概就三个步骤：</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第一步：我们首先提取出有重叠图片的控制点，也就是控制点，这个控制点的提取是根据一定的算法的。以下是我提取过的部分控制点的截图.</font><font size=4>&nbsp;</font></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200808/200808261219724256137.jpg" border=0></div>
<div><font size=4></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size=4>&nbsp; 第二步：拼合和优化这些控制点，优化结果如下。</font></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200808/200808261219724590293.jpg" border=0></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size=4>第三步：就是缝合这些图片并消除拼接处的花边，生成一张全景图图片。</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp;以下是我测试的效果：</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp; 以下是不同角度拍摄的18张照片：</font></div>
<div><font size=4>&nbsp;&nbsp; <img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200808/200808261219724869746.jpg" border=0></font></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size=4> 经过上面的三个步骤会制作成一张全景图效果如下：</font></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200808/200808261219725075074.jpg" border=0></div>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp; 制作全景图的思路就是这些了，至于具体的实现就是上面说的那几个步骤。要用到很多的知识和工具，有兴趣的可以和我交流。</font></div>
<img src ="http://www.cnitblog.com/jackmisweijie/aggbug/48422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackmisweijie/" target="_blank">魏杰</a> 2008-08-27 10:27 <a href="http://www.cnitblog.com/jackmisweijie/archive/2008/08/27/48422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts框架详解</title><link>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47758.html</link><dc:creator>魏杰</dc:creator><author>魏杰</author><pubDate>Thu, 07 Aug 2008 12:45:00 GMT</pubDate><guid>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47758.html</guid><wfw:comment>http://www.cnitblog.com/jackmisweijie/comments/47758.html</wfw:comment><comments>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47758.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackmisweijie/comments/commentRss/47758.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackmisweijie/services/trackbacks/47758.html</trackback:ping><description><![CDATA[<div><strong><span>1</span></strong><strong><span>、<span>Struts</span>应用框架介绍</span></strong></div>
<div><strong><span><font size=3>（<span>1</span>）框架</font></span></strong></div>
<div><span><font size=3>框架最简单的形式是指已开发过并已测试过的软件的程序块，这些程序块可以在多个软件开发工程中重用。框架提供了一个概括的体系结构模版，可以用这个模板来构建特定领域中的应用程序。</font></span></div>
<div><font size=3><span>Framework</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>概念并不是很新了，伴随着软件开发的发展，在多层的软件开发项目中，可重用、易扩展的，而且是经过良好测试的软件组件，越来越为人们所青睐。这意味着人们可以将充裕的时间用来分析、构建业务逻辑的应用上，而非繁杂的代码工程。</span></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>于是人们将相同类型问题的解决途径进行抽象，抽取成一个应用框架。这也就是我们所说的</span><span>Framework</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>。</span><span>Framework</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的体系提供了一套明确机制，从而让开发人员很容易的扩展和控制整个</span><span>framework</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>开发上的结构。</span></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>（</span><span>2</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>）</span></strong><strong><span>为什么会出现应用框架</span></strong></font></div>
<div><span Times Roman?; mso-hansi-font-family: ?Times New Roman??><font size=3>您只要细心地研究真实的应用程序，就会发现程序大致上由两类性质不同的组件组成，一类与程序要处理的具体事务密切相关，我们不妨把它们叫做业务组件；另一类是应用服务。</font></span></div>
<div><span Times Roman?; mso-hansi-font-family: ?Times New Roman??><font size=3>比如说：一个税务征管系统和一个图书管理系统会在处理它们的业务方面存在很大的差异，这些直接处理业务的组件由于业务性质的不同不大可能在不同的系统中重用，而另一些组件如决定程序流向的控制、输入的校验、错误处理及标签库等这些只与程序相关的组件在不同的系统中可以很好地得到重用。</font></span></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>人们自然会想要是把这些在不同应用程序中有共性的一些东西抽取出来，做成一个半成品程序，这样的半成品就是所谓的程序框架，再做一个新的东西时就不必白手起家，而是可以在这个基础上开始搭建。实际上，有些大型软件企业选择自己搭建这样的框架。</span><strong></strong></font></div>
<div><strong><span><font size=3>（<span>3</span>）为什么要用框架？</font></span></strong></div>
<div><span><font size=3>因为软件系统发展到今天已经很复杂了，特别是服务器端软件，设计到的知识，内容，问题太多。在某些方面使用别人成熟的框架，就相当于让别人帮你完成一些基础工作，你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟，稳健的，他可以处理系统很多细节问题，比如，事物处理，安全性，数据流控制等问题。还有框架一般都经过很多人使用，所以结构很好，所以扩展性也很好，而且它是不断升级的，你可以直接享受别人升级代码带来的好处。</font></span></div>
<div><span><font size=3>框架一般处在低层应用平台（如<span>J2EE</span>）和高层业务逻辑之间的中间层。<strong></strong></font></span></div>
<div><strong><span><font size=3>（<span>3</span>）</font></span></strong><span><strong><span>Struts </span></strong></span><font size=3><strong><span>Web</span></strong><strong><span>应用框架</span></strong></font></div>
<div><span><span>Struts </span></span><span><span>是<span> Apache </span>软件基金会（<span>Apache Software Foundation</span>）资助的一个</span></span><span><font size=3>为开发基于<span>MVC</span>模式应用架构的开源框架，是利用<span>Java Servlet</span>和<span>JSP</span>、<span>XML</span>等方面的技术来实现构建<span>Web</span>应用的一项非常有用的技术，它也是基于<span>MVC</span>模式的<span>Web</span>应用最经典框架。<span> </span></font></span></div>
<div><font size=3><span>Struts</span><span>框架的主要架构设计和开发者是<span>Craig R.McClanahan</span>。<span>Struts </span>是目前<span>Java Web MVC</span>框架中不争的王者。经过长达五年的发展，<span>Struts</span>已经逐渐成长为一个稳定、成熟的框架，并且占有了<span>MVC</span>框架中最大的市场份额。</span></font></div>
<div><font size=3><span>Struts</span><span>把<span>Servlet</span>、<span>JSP</span>、自定义标签和信息资源<span>(message resources)</span>整合到一个统一的框架中，主要</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>由一系列的框架类、辅助类和定制的</span><span>JSP</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>标记库构成。</span><span>开发人员利用其进行开发时不用再自己编码实现全套<span>MVC</span>模式，极大的节省了时间。</span></font></div>
<div><span><span><font size=3>&nbsp;</font></span><a name=OLE_LINK1><font size=3> </font></a><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200807/200807101215677739921.gif" border=0></span></div>
<div><span><font size=3>&nbsp;</font></span></div>
<div><strong><span>2</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、框架的组成</span></strong><strong></strong></div>
<div><span Times Roman?; mso-hansi-font-family: ?Times New Roman??><font size=3>一个设计良好的框架一般分为三层：</font></span></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>（</span><span>1</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>）接口层</span></strong></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>这一层要尽量使用</span><span>interface</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>，在这一层中你要考虑到你现在的、将来的可能支持的功能，但不需要去实现它，只定义到接口层次就可以了。如</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>中的插件接口</span><span>PlugIn</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>。</span></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>（</span><span>2</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>）抽象层</span></strong></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>这一层要针对你当前的需求做定制，对你的需求中的通用逻辑做实现。这一层应该出现大量的抽象类。如</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>中的</span><span>ActionServlet</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、</span><span>Action</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>和</span><span>ActionForm</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>等类。</span></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>（</span><span>3</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>）实现层</span></strong></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>不用说了，把前面两层没有做掉的事情在这一层都做了吧。如</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>中后台实现的各种功能</span><strong></strong></font></div>
<div><strong><span>3</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、为什么要提出</span></strong><strong><span>Struts</span></strong></div>
<div><strong><span><font size=3>（<span>1</span>）背景</font></span></strong></div>
<div><span><strong><span>由于我们开发<span>Web</span>应用的复杂度随着系统的复杂度的要求越来越来复杂。特别是在代码重用，代码移植、代马可插扒等问题上出现了许多重复开发、维护困难等</span></strong></span><span><span>。从而提出了</span></span><span><font size=3>Struts</font></span><span><span>开发框架。</span></span><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>它的设计目的是从整体上减轻构造企业</span><span>Web</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>应用的负担，并提供国际化和数据库连接池支持。</span><span></span></font></div>
<div><font size=3><span>Struts </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>是一组相互协作的类、</span><span>servlet </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>和</span><span> JSP </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>标记，它们组成一个可重用的</span><span> MVC 2 </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>设计。这个定义表示</span><span> Struts </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>是一个框架，而不是一个库，但</span><span> Struts </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>也包含了丰富的标记库和独立于该框架工作的实用程序类。</span></font></div>
<div><span><font size=3>&nbsp;</font></span></div>
<div><strong><span><font size=3>（<span>2</span>）采用<span>Struts</span>的优点</font></span></strong></div>
<div><font size=3><span>在实际开发中，<span>MVC</span>框架开发相当费时，<span>Struts </span>实现了<span>MVC</span>这种框架，但又扩充了该<span>MVC</span>框架。这样使得系统的开发就像&#8220;填空&#8221;一样进行，相当快速。</span><strong></strong></font></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><span><font size=3>采用<span>Strust</span>可以加快开发速度、增强系统的灵活性、降低系统的藕合性（</font></span><span>&nbsp;</span></span><span><font size=3>分工明确：业务层与表示层分开，使得管理人员可以在小组内分配责任。网页设计人员与<span>JAVA</span>程序员各司其职。</font></span></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><span><font size=3>简化页面：使用标记，把逻辑处理的代码分离开来。</font></span></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>通过将问题划分为更小的组件，当技术空间或问题空间中出现变化时，您就有更多的机会重用代码。</span></font></div>
<div><strong><span><font size=3>（<span>3</span>）<span>Struts</span>的缺点</font></span></strong></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><span><font size=3>有限的适用范围：<span>Struts </span>是一种基于<span> Web </span>的<span> MVC </span>解决方案，所以必须用<span> HTML</span>、<span>JSP </span>文件和<span> Servlet </span>来实现它。</font></span></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><font size=3><span>J2EE </span><span>应用程序支持</span></font></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><span><font size=3>复杂性：在将问题分为几个部分的同时也引入了复杂性（在强健性增强的同时，也意味着复杂性的增加）。<strong><span> </span></strong></font></span></div>
<div><font size=3><strong><span>4</span></strong><strong><span>、</span></strong><strong><span>Struts</span></strong><strong><span>压缩包内容</span></strong></font></div>
<div><span><font size=3>下载后的<span>*.zip</span>包文件包含两个目录，<span>lib</span>和<span>webapps</span>。在<span>lib</span>目录中有使用<span>struts</span>创建应用程序是所需的文件：</font></span></div>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=157>
            <div align=left><strong><span>文件</span></strong></div>
            </td>
            <td vAlign=top width=487>
            <div align=left><strong><span>描述</span></strong></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=157>
            <div align=left><span>jdbc2_0-stdext.jar</span></div>
            </td>
            <td vAlign=top width=487>
            <div align=left><span>包含<span>JDBC2.0 Optional Package API</span>类。如果我们要使用<span>struts</span>提供的数据资源，就需要将这个文件拷贝到<span>WEB-INF\lib</span>下</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=157>
            <div align=left><span>Struts.jar</span></div>
            </td>
            <td vAlign=top width=487>
            <div align=left><span>包含<span>struts</span>中所有的<span>java</span>类。同样也需要拷贝到<span>WEB-INF\lib</span>下</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=157>
            <div align=left><span>*.tld</span></div>
            </td>
            <td vAlign=top width=487>
            <div align=left><span>标记库描述器文件，描述了多个<span>struts</span>标记库中的自定义标记。同样要拷贝到<span>WEB-INF\lib</span>下</span></div>
            </td>
        </tr>
    </tbody>
</table>
<div><span><font size=3>在<span>webapps</span>目录下有如下文件：</font></span></div>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=210>
            <div align=left><strong><span>Web</span></strong><strong><span>应用程序</span></strong></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><strong><span>描述</span></strong></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=210>
            <div align=left><span>Struts-blank.war</span></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><span>一个简单的<span>web</span>应用程序</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=210>
            <div align=left><span>Struts-documentation.war</span></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><span>包含<span>struts</span>站点上所有<span>struts</span>文档</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=210>
            <div align=left><span>Struts-example.war</span></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><span>Struts</span><span>很多特性的示范</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=210>
            <div align=left><span>Struts-exercisetaglib.war</span></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><span>主要用于对自定义标签库进行增加而使用的测试页，但也可以示范如何使用<span>struts</span>标记</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=210>
            <div align=left><span>Struts-template.war</span></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><span>包含<span>struts</span>模板标记的介绍和范例</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=210>
            <div align=left><span>Struts-upload.war</span></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><span>一个简单的例子，示范如何使用<span>struts</span>框架上传文件</span></div>
            </td>
        </tr>
    </tbody>
</table>
<div><strong><span><font size=3>&nbsp;</font></span></strong></div>
<div><strong><span>5</span></strong><strong><span>、<span>Struts</span>的整体框架</span></strong></div>
<div align=left><span><font size=3>（<span>1</span>）<span>Struts</span>框架的<span>MVC</span>组件结构图</font></span></div>
<div align=left></div>
<div align=left><span><span><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200807/200807101215678207718.jpg" border=0></span></span></div>
<div align=left><span><span>在<span>struts</span>框架中，模型分为两个部分：系统的内部状态和可以改变状态的操作（事务逻辑）。内部状态通常由一组<span>ActinForm JavaBean</span>表示。根据设计或应用程序复杂度的不同，这些<span>Bean</span>可以是自包含的并具有持续的状态，或只在需要时才获得数据（从某个数据库）。</span></span></div>
<div align=left><span><span>大型应用程序通常在方法内部封装事务逻辑（操作），这些方法可以被拥有状态信息的<span>bean</span>调用。比如购物车<span>bean</span>，它拥有用户购买商品的信息，可能还有<span>checkOut()</span>方法用来检查用户的信用卡，并向仓库发定货信息。</span></span></div>
<div align=left><span><span>小型程序中，操作可能会被内嵌在<span>Action</span>类，它是<span>struts</span>框架中控制器角色的一部分。当逻辑简单时这个方法很适合。建议用户将事务逻辑（要做什么）与<span>Action</span>类所扮演的角色（决定做什么）分开。</span></span></div>
<div align=left><span><span>Struts</span></span><span><span>为<span>Model</span>部分提供了<span>Action</span>和<span>ActionForm</span>两种<span>Bean</span>对象：所有的<span>Action</span>处理器对象都是开发者从<span>Struts</span>的<span>Action</span>类派生的子类。<span>Action</span>处理器对象封装了具体的处理逻辑，调用业务逻辑模块，并且把响应提交到合适的<span>View</span>组件以产生响应。</span></span></div>
<div align=left><span><span>Struts</span></span><span><span>提供的<span>ActionForm</span>组件对象，它可以通过定义属性描述客户端表单数据。开发者可以从它派生子类对象，利用它和<span>Struts</span>提供的自定义标记库结合可以实现对客户端的表单数据的良好封装和支持，<span>Action</span>处理器对象可以直接对它进行读写，而不再需要和<span>request</span>、<span>response</span>对象进行数据交互。</span></span></div>
<div align=left><span><font size=3>（<span>2</span>）</font></span><span><span>Struts</span></span><span><span>框架的处理流程</span></span></div>
<div align=left><span>&nbsp;<img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200807/200807111215736791156.gif" border=0></span></div>
<div align=left>&nbsp;</div>
<div align=left></div>
<div><span><span><span>l&nbsp;</span></span></span><font size=3><span>首先，控制器（<span>ActionServlet</span>）进行初始化工作，读取配置文件（<span>struts-config.xml</span>），为不同的<span>Struts</span>模块初始化相应的<span>ModuleConfig</span>对象。比如配置文件中的<span>Action</span>映射定义都保存在<span>ActionConfig</span>集合中。相应地有<span>ControlConfig</span>集合、<span>FormBeanConfig</span>集合、<span>ForwardConfig</span>集合和<span>MessageResourcesConfig</span>集合等。</span><span></span></font></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><span><span>Struts</span></span><span><span>框架的处理流程清楚的体现了<span>MVC</span>系统的特点，</span></span><span><font size=3>所有的页面请求都将发送到<span>Struts</span>的前端控制器<span>ActionServlet</span>中（因此如果要进行前置处理，可以继承<span>ActionServlet</span>并重写<span>process()</span>方法），同时<span>ActionServlet</span>也将根据<span>struts-config.xml</span>配置文件中的设置（<strong><span>&lt;action&gt;</span>标签</strong>）来决定转向到那个后端控制器<span>Action</span>类。</font></span></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><span><font size=3>当页面中的<span>Form</span>表单被提交时，<span>ActionForm</span>将自动地封装和处理该<span>Form</span>表单中的数据。同时在<span>Action</span>的子类中可以存取存储在<span>ActionForm</span>中的<span>Form</span>表单数据。</font></span></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><font size=3><span>Action</span><span>的子类将处理所获得的存储在<span>ActionForm</span>中的<span>Form</span>表单数据，</span></font><span><span>处理和响应客户请求，它还调用后台的</span></span><span><font size=3>JavaBean</font></span><span><span>组件</span></span><span><font size=3>完成具体的业务逻辑。同时也按照在<span>struts-config.xml</span>文件内的<span>forward</span>标签内容（如<span>&lt;forward name="sayHello" path="/sayHello.jsp"/&gt;</span>），将结果交由某个<span>JSP</span>页面显示。</font></span></div>
<div><font size=3><strong><span>（<span>3</span>）</span></strong><strong><span>Struts</span></strong><strong><span>体系组成</span></strong><strong></strong></font></div>
<div><font size=3><strong><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>体系可以看成两个相对独立的部分：</span></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>第一个部分是</span><span>Struts API</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>，用于编写支持</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的应用组件；</span></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>第二部分是</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的</span><span>JSP</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>标记库，由</span><span>html</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、</span><span>bean</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、</span><span>logic</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>和</span><span>template</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>四个标记组成。</span></font></div>
<div><font size=3><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的两个部分有着各自不同的用户。对于规模较小的项目，同一个用户可能同时使用这两个部分；但对于规模较大的项目，通常开发者使用</span><span>API</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>组件，而负责</span><span>HTML</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>页面布局的人使用标记库。</span><strong></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>（</span><span>4</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>）</span></strong><span>struts-config.xml</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>配置文件</span><strong></strong></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>框架中的模型</span><span>(M)</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、视图</span><span>(V)</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、控制器</span><span>(C) </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>三个部分是通过</span><span>struts-config.xml</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>配置文件将其联系在一起。一个标准的</span><span>struts-config</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>文件包含如下结构，有一点要引起大家的注意的，就是，</span><span>struts-config.xml</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>中配置的各个项目是有一定的顺序要求的，几个主要项目的顺序大致是这样的：</span> </font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>?xml version="1.0" encoding="UTF-8"?</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" </span></font></div>
<div>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <div><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>注意：</span><span>各个标签项目是有一定的顺序要求的</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>！</span></div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<font size=3><span>"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>struts-config</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>data-sources /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>定义数据源</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>form-beans /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>定义</span><span>ActionForm</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>global-exceptions /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>定义全局异常</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>global-forwards /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>定义全局转向</span><span>url</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>action-mappings /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>定义</span><span>action</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>controller /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>配置</span><span>Controller</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>message-resources /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>配置资源文件</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>plug-in /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>配置资源文件</span></strong></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>/struts-config</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span></font></div>
<div><font size=3><strong><span>（<span>5</span>）<span>Struts</span>与其它</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>框架的不同</span></strong><strong></strong></font></div>
<div><strong><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>在</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>应用中，有一个称为</span><span>ActionServlet</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的主调度程序（或称为分配器）。不过，并非所有的请求都必须通过</span><span>ActionServlet</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>（以</span><span>&#8220;*.do&#8221;</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>结尾的</span><span>URL</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>都是</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>请求）。用户的请求目标可以是非</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的页面，也可以是那些使用了</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>标记库但不使用</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>请求分配服务的页面。这正是</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>体系的优点之一：按需使用。许多编程框架要求你要么不用，要么全部使用，而且一旦你决定使用，以后要悔改从前的错误就会付出高昂的代价。</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>按需使用的优点与这类系统形成了强烈对比。</span></font></div>
<img src ="http://www.cnitblog.com/jackmisweijie/aggbug/47758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackmisweijie/" target="_blank">魏杰</a> 2008-08-07 20:45 <a href="http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在weblogic上配置数据源</title><link>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47757.html</link><dc:creator>魏杰</dc:creator><author>魏杰</author><pubDate>Thu, 07 Aug 2008 12:39:00 GMT</pubDate><guid>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47757.html</guid><wfw:comment>http://www.cnitblog.com/jackmisweijie/comments/47757.html</wfw:comment><comments>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackmisweijie/comments/commentRss/47757.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackmisweijie/services/trackbacks/47757.html</trackback:ping><description><![CDATA[<font size=4>&nbsp;&nbsp;&nbsp;&nbsp; 我是在weblogic9.0+mysql5.1的环境下配置的数据源。其实在tomcat,jboss,websphere等服务器中都提供了配置数据源的功能，大概的配置都很类似。</font>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp; 简单的讲述一下我的配置，以及应该注意的地方。</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp; 第一步：我们首先要下载一个mysql驱动，必须与你的mysql版本兼容的，我使用的是mysql-connector-java-5.0.7-bin.jar。自己可以到网上去下载与你Mysql版本兼容的驱动。这一步应该很简单的，就不多说了。</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp; 第二步：就是把我们的mysql驱动添加到你的classpath中，在weblogic中有很多配置方法：（weblogic安装在E:\bea下）</font></div>
<div><font size=4>&nbsp;&lt;1&gt;.就是把它放到你的E:\bea\weblogic90\common\lib下面，我们在打开E:\bea\weblogic90\common\bin文件下的commEnv.cmd文件。找到下面这个位置：</font></div>
<div><font style="BACKGROUND-COLOR: #ffffff" size=4>@rem set up WebLogic Server's class path<br>set WEBLOGIC_CLASSPATH=%PATCH_CLASSPATH%;%JAVA_HOME%\lib\tools.jar;%WL_HOME%\server\lib\weblogic_sp.jar;%WL_HOME%\server\lib\weblogic.jar<font color=#ff0000>;%WL_HOME%\common\lib\mysql-connector-java-5.0.7-bin.jar</font></font></div>
<div><font size=4>在最后面加上mysql-connector-java-5.0.7-bin.jar驱动的位置，其中WL_HOME=E:\bea\weblogic90，上面红色的部分就是新加上的。</font></div>
<div><font size=4>&lt;2&gt;.也可以在E:\bea\user_projects\domains\mydomain\bin下面的setDomainEnv.cmd文件中配置。在最后面的位置上找到：</font><font size=4>set CLASSPATH=%PRE_CLASSPATH%;%WEBLOGIC_CLASSPATH%;%POST_CLASSPATH%;%WLP_POST_CLASSPATH%;%WL_HOME%\integration\lib\util.jar<font style="BACKGROUND-COLOR: #ffffff" color=#ff0000>;%WL_HOME%\common\lib\mysql-connector-java-5.0.7-bin.jar</font></font></div>
<div><font size=4>在最后面加上mysql-connector-java-5.0.7-bin.jar驱动的位置，其中WL_HOME=E:\bea\weblogic90，上面红色的部分就是新加上的。</font></div>
<div><font size=4>&lt;3&gt;.我们也可以把mysql-connector-java-5.0.7-bin.jar放到E:\bea\user_projects\domains\mydomain\lib目录下，然后再E:\bea\user_projects\domains\mydomain\bin下面的setDomainEnv.cmd文件中配置。在最后面的位置上找到：<font size=4>set CLASSPATH=%PRE_CLASSPATH%;%WEBLOGIC_CLASSPATH%;%POST_CLASSPATH%;%WLP_POST_CLASSPATH%;%WL_HOME%\integration\lib\util.jar<font style="BACKGROUND-COLOR: #ffffff" color=#ff0000>;%DOMAIN_HOME%\lib\mysql-connector-java-5.0.7-bin.jar</font></font></div>
<div><font size=4>在最后面加上mysql-connector-java-5.0.7-bin.jar驱动的位置，其中DOMAIN_HOME=E:\bea\user_projects\domains\mydomain，上面红色的部分就是新加上的。</font></div>
<div>&lt;4&gt;我们也可以直接在电脑的环境变量里的classpath中加上mysql驱动的路径。不提倡这样做。</div>
<div></font><font size=4>&nbsp;&nbsp;&nbsp;&nbsp;从上面我们可以看出无论mysql-connector-java-5.0.7-bin.jar放在那都无所谓，关键的是最后要把它的路径设置在classpath中就可以了。可以在E:\bea\weblogic90\common\bin\commEnv.cmd中配置，也可以在E:\bea\user_projects\domains\mydomain\bin\setDomainEnv.cmd中配置。也可以直接在电脑的环境变量中直接设置。</font></div>
<div><font size=4>&nbsp;第三步：就是在weblogic中建数据源了。启动weblogic服务器，如果我们配置正确的话，我们可以在启动时的命令控制台上看到最后面mysql-connector-java-5.0.7-bin.jar的信息。</font></div>
<div><font size=4><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200808/200808011217583478578.jpg" border=0></font></div>
<div><font size=4></font>&nbsp;</div>
<div><font size=4>在打开<a href="http://localhost:7001/console"><a href="http://localhost:7001/console" target=_blank><u><font color=#000000>http://localhost:7001/console</font></u></a></a>进入控制台。点击Data Sources:如下图。</font></div>
<div><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200808/200808011217583735890.jpg" border=0></div>
<div><font size=4>&nbsp;然后再点击New。如下图。</font></div>
<div><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200808/200808011217583838734.jpg" border=0></div>
<div><font style="BACKGROUND-COLOR: #ffffff" size=4>然后填写如下信息：</font></div>
<div><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200808/200808011217583963328.jpg" border=0></div>
<div><font style="BACKGROUND-COLOR: #dcdcdc" size=4>&nbsp;</div>
<div>继续Next在填写如下的信息。</div>
<div><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200808/200808011217584143312.jpg" border=0></div>
<div>&nbsp;</div>
<div>继承Next,最后点击Test Configuration测试，当出现如下信息时，表明配置成功。</div>
<div><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200808/200808011217584245203.jpg" border=0></div>
<div>&nbsp;</div>
<div>&nbsp; 最后一定要对你的新建的数据源，进行激活他，点击Active Changes：</div>
<div><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200808/200808011217584408875.jpg" border=0></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp; 这一点一定要注意激活，激活成功以后，会在E:\bea\user_projects\domains\mydomain\config\jdbc下面生成一个blogDB-2272-jdbc.xml文件。该文件中主要配置了数据源：</div>
<div>&lt;?xml version='1.0' encoding='UTF-8'?&gt;<br>&lt;jdbc-data-source xmlns="<a href="http://www.bea.com/ns/weblogic/90"><a href="http://www.bea.com/ns/weblogic/90" target=_blank><u><font color=#000000 size=2>http://www.bea.com/ns/weblogic/90</font></u></a></a>" xmlns:sec="<a href="http://www.bea.com/ns/weblogic/90/security"><a href="http://www.bea.com/ns/weblogic/90/security" target=_blank><u><font color=#000000 size=2>http://www.bea.com/ns/weblogic/90/security</font></u></a></a>" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance"><a href="http://www.w3.org/2001/XMLSchema-instance" target=_blank><u><font color=#000000 size=2>http://www.w3.org/2001/XMLSchema-instance</font></u></a></a>" xmlns:wls="<a href="http://www.bea.com/ns/weblogic/90/security/wls"><a href="http://www.bea.com/ns/weblogic/90/security/wls" target=_blank><u><font color=#000000 size=2>http://www.bea.com/ns/weblogic/90/security/wls</font></u></a></a>" xsi:schemaLocation="<a href="http://www.bea.com/ns/weblogic/90/domain.xsd"><a href="http://www.bea.com/ns/weblogic/90/domain.xsd" target=_blank><u><font color=#000000 size=2>http://www.bea.com/ns/weblogic/90/domain.xsd</font></u></a></a>"&gt;<br>&nbsp; &lt;name&gt;blogDB&lt;/name&gt;<br>&nbsp; &lt;jdbc-driver-params&gt;<br>&nbsp;&nbsp;&nbsp; &lt;url&gt;jdbc:mysql://127.0.0.1:3306/blog&lt;/url&gt;<br>&nbsp;&nbsp;&nbsp; &lt;driver-name&gt;com.mysql.jdbc.Driver&lt;/driver-name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;properties&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;user&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;root&lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/properties&gt;<br>&nbsp;&nbsp;&nbsp; &lt;password-encrypted&gt;{3DES}z0eG+kCsizA=&lt;/password-encrypted&gt;<br>&nbsp; &lt;/jdbc-driver-params&gt;<br>&nbsp; &lt;jdbc-connection-pool-params&gt;<br>&nbsp;&nbsp;&nbsp; &lt;test-table-name&gt;SQL SELECT 1&lt;/test-table-name&gt;<br>&nbsp; &lt;/jdbc-connection-pool-params&gt;<br>&nbsp; &lt;jdbc-data-source-params&gt;<br>&nbsp;&nbsp;&nbsp; &lt;jndi-name&gt;blogDB&lt;/jndi-name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;global-transactions-protocol&gt;OnePhaseCommit&lt;/global-transactions-protocol&gt;<br>&nbsp; &lt;/jdbc-data-source-params&gt;<br>&lt;/jdbc-data-source&gt;</div>
<div>&nbsp;</div>
<div>同时在E:\bea\user_projects\domains\mydomain\config下面的config.xml文件中自动加上数据源的配置信息如下：</div>
<div>&nbsp;</div>
<div>&nbsp;&lt;jdbc-system-resource&gt;<br>&nbsp;&nbsp;&nbsp; &lt;name&gt;blogDB&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;target&gt;AdminServer&lt;/target&gt;<br>&nbsp;&nbsp;&nbsp; &lt;descriptor-file-name&gt;jdbc/blogDB-2272-jdbc.xml&lt;/descriptor-file-name&gt;<br>&nbsp; &lt;/jdbc-system-resource&gt;</div>
<div>&nbsp;&nbsp; 这表明配置成功了。</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp; 最后一步：我们写个简单的测试程序，测试一下(index.jsp位于工程目录下)：</div>
<div>&nbsp;</div>
<div>&lt;%@ page language="java" pageEncoding="utf-8"%&gt;<br>&lt;%@ page import="java.sql.*"%&gt;<br>&lt;%@ page import="javax.sql.*"%&gt;<br>&lt;%@ page import="javax.naming.*"%&gt;<br>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br>&lt;html&gt;<br>&nbsp;&lt;head&gt;<br>&nbsp;&nbsp;&lt;title&gt;My JSP 'index.jsp' starting page&lt;/title&gt;<br>&nbsp;&lt;/head&gt;<br>&nbsp;&lt;body&gt;<br>&nbsp;&nbsp;This is my JSP page.<br>&nbsp;&nbsp;&lt;br&gt;</div>
<div>&nbsp;&nbsp;&lt;%<br>&nbsp;&nbsp;&nbsp;InitialContext ctx = new InitialContext();<br>&nbsp;&nbsp;&nbsp;DataSource ds = (DataSource) ctx.lookup("blogDB");<br>&nbsp;&nbsp;&nbsp;Connection conn = ds.getConnection();<br>&nbsp;&nbsp;&nbsp;Statement sm = conn.createStatement();<br>&nbsp;&nbsp;&nbsp;ResultSet rs = sm.executeQuery("select * from bloginfo");<br>&nbsp;&nbsp;&nbsp;while (rs.next()) {</div>
<div>&nbsp;&nbsp;&nbsp; System.out.println("userId:"+rs.getString(1));//用户id<br>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("userName:"+rs.getString(2));//用户名<br>&nbsp;&nbsp;&nbsp;}</div>
<div>&nbsp;&nbsp;&nbsp;sm.close();<br>&nbsp;&nbsp;&nbsp;rs.close();<br>&nbsp;&nbsp;&nbsp;conn.close();<br>&nbsp;&nbsp;%&gt;<br>&nbsp;&lt;/body&gt;<br>&lt;/html&gt;</div>
<div>&nbsp;</div>
<div>&nbsp; 最后重启一下服务器：访问<a href="http://localhost:7001/WeblogicDemo/index.jsp"><a href="http://localhost:7001/WeblogicDemo/index.jsp" target=_blank><u><font color=#000000 size=2>http://localhost:7001/WeblogicDemo/index.jsp</font></u></a></a>如果看到输出信息，表明成功：</div>
<div><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200808/200808011217585073578.jpg" border=0></div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 希望对weblogic有爱好的朋友，有所帮助，不明白的地方可以直接回复。一定解答。</div>
<div></div>
</font>
<img src ="http://www.cnitblog.com/jackmisweijie/aggbug/47757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackmisweijie/" target="_blank">魏杰</a> 2008-08-07 20:39 <a href="http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速把web项目部署到weblogic上</title><link>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47756.html</link><dc:creator>魏杰</dc:creator><author>魏杰</author><pubDate>Thu, 07 Aug 2008 12:36:00 GMT</pubDate><guid>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47756.html</guid><wfw:comment>http://www.cnitblog.com/jackmisweijie/comments/47756.html</wfw:comment><comments>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47756.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackmisweijie/comments/commentRss/47756.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackmisweijie/services/trackbacks/47756.html</trackback:ping><description><![CDATA[<div><font size=4>weblogic简介</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应 用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。<br>　　BEA WebLogic Server拥有处理关键Web应用系统问题所需的性能、可扩展性和高可用性。 与BEA WebLogic Commerce ServerTM配合使用， BEA WebLogic Server可为部署适应性个性化电子商务应用系统提供完善的解决方案。<br></font></div>
<div><font size=4>配置weblogic域（版本为9.x,安装目录为E:\bea）</font></div>
<div><font size=4>①运行开始 -&gt; 程序 -&gt; BEA Products -&gt; Tools -&gt; Configuration Wizard。<br>②选择 Create a new WebLogic domain，Next。<br>③在 Select Domain Source 界面保持默认，Next。<br>④在 User name 处输入用户名，默认为weblogic，两个 password 都输入 12345678（密码要求 8 位），Next。<br>⑤ 在 Configure Server Start Mode and JDK 界面中保持默认，即 JDK 选择的是&#8220;Sun SDK 1.5.0_03 @ E:\bea\jdk150_03&#8221;，注意这里若选择&#8220;Other JDK&#8221;配置比 SDK 1.5.0_03 更高的版本，服务器启动时将会出现异常，所以最好保持默认，然后 Next。<br>⑥在 Customize Environment and Services Settings 界面中默认为 No，Next。<br>⑦在 Domain name 处输入 mydomain，点击 Create。<br>⑧完成后点击 Done 关闭 Configuration Wizard 对话框。<br>⑨ 运行开始 -&gt; 程序 -&gt; BEA Products -&gt; User Projects -&gt; mydomain -&gt; Start Admin Server for Weblogic Server Domain，检查服务器是否启动成功。<font size=2><a href="http://localhost:7001/console"><a href="http://localhost/" target=_blank><u><font color=#000000>http://localhost:</font></u></a><font color=#c60a00>7001</font>/console</a></font></font></div>
<div><font size=2></font>&nbsp;</div>
<div><font size=4>在Eclipse3.3(MyEclipse6.0.1)中配置weblogic9.x服务器。</font></div>
<div><font size=4>启 动 Eclipse，选择&#8220;Window -&gt; Preferences&#8221;菜单，打开首选项对话框。展开 MyEclipse 下的Servers 节点，再展开 WebLogic节点，点击WebLogic 9.x ，选中右边的 Enable 单选按钮，启用 WebLogic 服务器。配置如下：<br>①BEA home directory：E:\bea（WebLogic 的安装目录）<br>②WebLogic installation directory：E:\bea\weblogic90</font></div>
<div><font size=4>③Admin username：weblogic（来自 WebLogic 中的配置）<br>④Admin password：12345678（来自 WebLogic 中的配置）<br>⑤Execution domain root：E:\bea\user_projects\domains\mydomain</font></div>
<div><font size=4>⑥Execution server name：AdminServer<br>⑦Security policy file：E:\bea\weblogic90\server\lib\weblogic.policy</font></div>
<div><font size=4>⑧JAAS login configuration file：（Null）</font></div>
<div><font size=4>在配置jdk点击WebLogic 9.x 目录下的JDK，这里的JDK最好用weblogic自带的JDK，要不然可能会出现下面的异常信息：</font></div>
<div><font style="BACKGROUND-COLOR: #dcdcdc" size=4>weblogic.management.ManagementException: Parsing Failure: javax.xml.namespace.QName; local class incompatible: stream classdesc serialVersionUID = 4418622981026545151, local class serialVersionUID = -9120448754896609940<br>&nbsp;at weblogic.management.provider.internal.RuntimeAccessImpl.&lt;init&gt;(RuntimeAccessImpl.java:131)<br>&nbsp;</font></div>
<div><font style="BACKGROUND-COLOR: #fffafa"><font size=4>&nbsp;&nbsp; 这一点一定要注意。</font></font></div>
<div><font style="BACKGROUND-COLOR: #fffafa" size=4>新建一个web项目（WeblogicDemo）目录如下：</font></div>
<div><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200807/200807311217470880812.jpg" border=0></div>
<div>&nbsp; <font size=4>index.jsp文件中就是默认的一句话：This is my JSP page.</font></div>
<div><font size=4></font>&nbsp;</div>
<div><font size=4>在weblogic中部署web项目，并启动服务器，当在控制台看到如下信息时表示部署成功。</font></div>
<div><font style="BACKGROUND-COLOR: #dcdcdc" size=4>&lt;2008-7-31 上午10时24分26秒 CST&gt; &lt;Info&gt; &lt;WebLogicServer&gt; &lt;BEA-000377&gt; &lt;Starting WebLogic Server with Java HotSpot(TM) Client VM Version 1.5.0_03-b07 from Sun Microsystems Inc.&gt; <br>......</font><font size=4><br><font style="BACKGROUND-COLOR: #dcdcdc">&lt;2008-7-31 上午10时24分45秒 CST&gt; &lt;Notice&gt; &lt;WebLogicServer&gt; &lt;BEA-000360&gt; &lt;Server started in RUNNING mode&gt; </font></font></div>
<div><font style="BACKGROUND-COLOR: #ffffff" size=4></font>&nbsp;</div>
<div><font size=4>&nbsp;这时我们访问<a href="http://127.0.0.1:7001/WeblogicDemo/"><a href="http://127.0.0.1:7001/WeblogicDemo/" target=_blank><u><font color=#000000>http://127.0.0.1:7001/WeblogicDemo/</font></u></a></a>可能会出现401无法访问的错误。</font></div>
<div><font size=4></font>&nbsp;</div>
<div><font size=4>&nbsp;这时我们并没有部署完，运行开始 -&gt; 程序 -&gt; BEA Products -&gt; User Projects -&gt; mydomain -&gt; Admin Server Console,也可以直接访问<a href="http://localhost:7001/console"><a href="http://localhost:7001/console" target=_blank><u><font color=#000000>http://localhost:7001/console</font></u></a></a>。用你刚刚建立weblogic域时填写的用户名（weblogic)和密码（12345678）登录控制台。进入控制台以后在左边的导航栏有个</font><font size=4>Domain Structure（域结构），我安装的是英文版本的。在该目录下点击部署（<a class=tree_link oncontextmenu="return startDisplayPopup('AppDeploymentsControlPage', 'popup', event);" onkeypress=checkKeyStroke(event); id=linkAppDeploymentsControlPage title=Deployments, style="BACKGROUND-COLOR: #ffffff" href="http://localhost:7001/console/console.portal?_nfpb=true&amp;_pageLabel=AppDeploymentsControlPage" ?popup?); Level 1, 2 of 6, Selected><u><font color=#000000>Deployments</font></u></a>）。首先要激活&#8220;锁定并编辑&#8221;(Lock&amp;Edit).然后点击安装（Install）按钮，按照提示找到刚刚我们建立项目所在的根目录(/WelogicDemo).最后会出现如下界面。这时并没有完全安装完，这时选中WeblogicDemo前面的复选框，然后点击（启动）Star按钮。这时后面的状态为激活状态时（active），表明启动成功。</font></div>
<div><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200807/200807311217472184125.jpg" border=0></div>
<div><font size=4>&nbsp;&nbsp;&nbsp; 最后在注意一点，一定要激活我们的更改，就是原来那个锁定并编辑按钮，这是我们的配置才会生效，如果你没有激活的话可能会出现503的无权访问的错误。</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp; 这时会在E:\bea\user_projects\domains\mydomain\config下面的config.xml中生成我们刚刚部署的项目描述：</font></div>
<div><font size=4>&nbsp; &lt;app-deployment&gt;<br>&nbsp;&nbsp;&nbsp; &lt;name&gt;WeblogicDemo&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;target&gt;AdminServer&lt;/target&gt;<br>&nbsp;&nbsp;&nbsp; &lt;module-type&gt;war&lt;/module-type&gt;<br>&nbsp;&nbsp;&nbsp; &lt;source-path&gt;E:\WeblogicDemo&lt;/source-path&gt;<br>&nbsp;&nbsp;&nbsp; &lt;security-dd-model&gt;DDOnly&lt;/security-dd-model&gt;<br>&nbsp; &lt;/app-deployment&gt;</font></div>
<div><font size=4>&nbsp;表明配置成功。</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp; 重启一下服务器，再次访问可能还会有下面这样的错，</font></div>
<div><font size=4><font style="BACKGROUND-COLOR: #dcdcdc">Expected &nbsp; elements &nbsp; 'servlet-class@<a href="http://java.sun.com/xml/ns/j2ee" target=_blank><u><font color=#000000>http://java.sun.com/xml/ns/j2ee</font></u></a> &nbsp; jsp-file@<a href="http://java.sun.com/xml/ns/j2ee" target=_blank><u><font color=#000000>http://java.sun.com/xml/ns/j2ee</font></u></a> '</font> </font></div>
<div><font size=4>就是web.xml中的javaee版本原因，现在9.x的版本支持到javaee2.4的版本，最简单的解决方法就是把这些文件类型定义，命名空间，版本信息都删除，只剩下如下：</font></div>
<div><font size=4>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;web-app&gt;<br>&lt;welcome-file-list&gt;<br>&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br>&nbsp; &lt;/welcome-file-list&gt;<br>&lt;/web-app&gt;</font></div>
<div><font size=4>&nbsp;这样就不会报错了。但这不是最好的解决办法，或者用version="2.4" 的也行。这时在访问</font><a href="http://127.0.0.1:7001/WeblogicDemo/"><font size=4><a href="http://127.0.0.1:7001/WeblogicDemo/" target=_blank><u><font color=#000000>http://127.0.0.1:7001/WeblogicDemo/</font></u></a></font></a><font size=4>就会看到如下成功页面的信息了：</font><font size=4></font></div>
<div><font size=4>This is my JSP page. </font></div>
<div><font size=4><br>&nbsp;</div>
</font>
<div><font size=4>weblogic的默认端口是7001，如果想改端口的话在config.xml文件中的添加&lt;listen-port&gt;80&lt;/listen-port&gt;。位置如下：<br><font size=4>&lt;server&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;AdminServer&lt;/name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;listen-port&gt;80&lt;/listen-port&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;listen-address&gt;&lt;/listen-address&gt;<br>&nbsp;&lt;/server&gt;</font></font></div>
<div><font size=4></font>&nbsp;</div>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp; 一般在weblogic中部署web项目就这几个错误，只要大家记好了，以后应该不会出现这些问题了。</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;希望对weblogic有爱好的朋友有点帮助。</font></div>
<img src ="http://www.cnitblog.com/jackmisweijie/aggbug/47756.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackmisweijie/" target="_blank">魏杰</a> 2008-08-07 20:36 <a href="http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47756.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UrlRewriter技术简单运用</title><link>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47755.html</link><dc:creator>魏杰</dc:creator><author>魏杰</author><pubDate>Thu, 07 Aug 2008 12:34:00 GMT</pubDate><guid>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47755.html</guid><wfw:comment>http://www.cnitblog.com/jackmisweijie/comments/47755.html</wfw:comment><comments>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackmisweijie/comments/commentRss/47755.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackmisweijie/services/trackbacks/47755.html</trackback:ping><description><![CDATA[<font size=4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如何增强你网站中地址的可读性和让搜索引擎快速的收录到你的站点，这就需要你美化你的网页的地址，也就是我们常说的Url重写技术，大家熟悉的可能有很多服务器都提供Url重写的技术，以前我们用的最多的就是Apache，Jboss这样一些服务器自带的一些Url重写，但是他们的配置比较麻烦，性能又不是太好，现在我们有专一的开源框架来完成Url重写任务，今天我要介绍的就是UrlRewriter。使用起来比较简单，配置是相当的简单明了。</font>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp; 我们先简单的了解一下使用Url重写能给你网站带来哪些好处。</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp;第一：有利于搜索引擎的抓取，因为现在大部分的搜索引擎对动态页面的抓取还比较弱，它们更喜欢抓取一些静态的页面。而我们现在的页面大部分的数据都是动态的显示的。这就需要我们把动态页面变成静态的页面，有利于搜索引擎的抓取。</font></div>
<div><font size=4>&nbsp;&nbsp; 第二：让用户更容易理解，很少有用户去关心你网站的页面的地址，但对一般的大中型网站增强可读性还是必须的。这样会让你的网站更加完美。</font></div>
<div><font size=4>&nbsp; 第三：隐藏技术的实现，我们可以通过Url重写可以实现技术的隐藏。不至于暴露你所采用的技术，给一些想攻击你网站的爱好者提供方便。</font></div>
<div><font size=4>&nbsp; 第四：可以很方便的重用，提高网站的移植性。如果我们后台方法改动的话，可以保证前台的页面部分不用改。这样就提高了网站的移植性。</font></div>
<div><font size=4>&nbsp;&nbsp; 它虽然有这么多的优点，但是也有一点缺点的，因为它是通过过滤器原理来实现的，就以为着又多了一道访问，会多少影响点访问速度的，这个可以忽略不计的。</font></div>
<div><font size=4>&nbsp;&nbsp; 现在UrlRewriter技术有两个技术平台的，一个就是在Java方向的，另一个就是.NET方向的。今天我们讲的是Java方向的应用。</font></div>
<div><font size=4>&nbsp;&nbsp; 首先让我们了解它的工作原理，说白了它就是一个简单的过滤器（Filter） ，看看源码你就会很快的明白，它就是通过我们在jsp中常用的两个方法实现的forward(),sendRedirect().</font></div>
<div><font size=4>&nbsp;&nbsp; 下面我们就快速的为你的网站搭建Url重写技术。</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp; 第一步：下载urlrewrite-2.6.0.现在最新版本是3.1的。<a href="http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip"><font color=#000000><u>(</u></font><a href="http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip" target=_blank><font color=#000000><u>http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip</u></font></a></a></font></div>
<div><font size=4><a href="http://urlrewritefilter.googlecode.com/files/urlrewritefilter-3.1.0.zip"><a href="http://urlrewritefilter.googlecode.com/files/urlrewritefilter-3.1.0.zip" target=_blank><u><font color=#000000>http://urlrewritefilter.googlecode.com/files/urlrewritefilter-3.1.0.zip</font></u></a></a>把urlrewrite-2.6.0.jar拷到classpath下。</font></div>
<div><font size=4>&nbsp;&nbsp; 第二步：在WEB-INF目录下建一个urlrewrite.xml文件。</font></div>
<div><font size=4>&nbsp;&nbsp; 第三步：在web.xml中初始化。加上下面的代码：</font></div>
<div><font size=4>&nbsp;&nbsp; &lt;!-- Set URL Rewrite--&gt;<br>&nbsp;&lt;filter&gt;<br>&nbsp;&nbsp;&lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt;<br>&nbsp;&nbsp;&lt;filter-class&gt;<br>&nbsp;&nbsp;&nbsp;org.tuckey.web.filters.urlrewrite.UrlRewriteFilter<br>&nbsp;&nbsp;&lt;/filter-class&gt;<br>&nbsp;&lt;/filter&gt;<br>&nbsp;&lt;filter-mapping&gt;<br>&nbsp;&nbsp;&lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt;<br>&nbsp;&nbsp;&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br>&nbsp;&lt;/filter-mapping&gt;</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp; 最后我要简单的讲一下常用的两个配置规则.以下就是简单的urlrewrite.xml配置片段。不要习惯Java的命名法把它写成<font color=#ff0000>urlRewrite.xml，</font>这样即使你加上</font></div>
<div><font size=4>&lt;init-param&gt;<br>&nbsp;&nbsp;&nbsp;&lt;param-name&gt;confPath&lt;/param-name&gt;<br>&nbsp;&nbsp;&nbsp;&lt;param-value&gt;/WEB-INF/urlRewrite.xml&lt;/param-value&gt;<br>&nbsp;&lt;/init-param&gt;</font></div>
<div><font size=4>&nbsp; 在启动的服务器的时候还是会报错的，因为源码中必须是全小写的（urlrewrite.xml）且只能放到WEB-INF下面。</font></div>
<div><font size=4>&nbsp;&nbsp;&nbsp;&nbsp; &lt;?xml version="1.0" encoding="utf-8"?&gt;<br>&lt;!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href="http://tuckey.org/res/dtds/urlrewrite2.6.dtd"><a href="http://tuckey.org/res/dtds/urlrewrite2.6.dtd" target=_blank><u><font color=#000000>http://tuckey.org/res/dtds/urlrewrite2.6.dtd</font></u></a></a>"&gt;<br>&lt;urlrewrite&gt;<br>&nbsp;&nbsp;&lt;rule&gt;<br>&nbsp;&nbsp;&lt;from&gt;^/(\w+)/(\w+)/page_(\d+)\.html$&lt;/from&gt;<br>&nbsp;&nbsp;&lt;to type="forward"&gt;/$1.htm?category=$2&amp;amp;page=$3&lt;/to&gt;<br>&nbsp;&lt;/rule&gt;<br>&nbsp;&nbsp;&lt;rule&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;from&gt;^/rss/yahoo\.html$&lt;/from&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;to type="redirect"&gt;&nbsp;&nbsp;&nbsp; <a href="http://add.my.yahoo.com/rss?&nbsp;url=http://feed.feedsky.com/W3CSSiteFeed"><a href="http://add.my.yahoo.com/rss?&nbsp;url=http://feed.feedsky.com/W3CSSiteFeed" target=_blank><u><font color=#000000>http://add.my.yahoo.com/rss?&nbsp;url=http://feed.feedsky.com/W3CSSiteFeed</font></u></a></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/to&gt;<br>&nbsp;&lt;/rule&gt;<br>&lt;/urlrewrite&gt;</font></div>
<div><font size=4>&nbsp;&nbsp; 所有的规则配置都写在这里。第一个常用个规则就是站内的简单重写。</div>
</font>
<div><font size=4>&lt;rule&gt;<br>&nbsp;&nbsp;&lt;from&gt;&lt;/from&gt;<br>&nbsp;&nbsp;&lt;to type="forward&gt;&lt;/to&gt;<br>&lt;/rule&gt;</font></div>
<div><font size=4>&nbsp; &lt;from&gt;&lt;/from&gt;写上你自己定义的访问地址，&lt;to type="forward&gt;&lt;/to&gt;就是实际的访问地址。比如我们实际的访问地址是：<a href="http://yousite.com/entity.htm"><a href="http://yousite.com/entity.htm" target=_blank><u><font color=#000000>http://yousite.com/entity.htm</font></u></a></a> ?category=user&amp;page=2.而我们想把它重写为<a href="http://yousite.com/entity/uesr/page_2.html"><a href="http://yousite.com/entity/uesr/page_2.html" target=_blank><u><font color=#000000>http://yousite.com/entity/uesr/page_2.html</font></u></a></a>。这样看起来比我们实际的要好看的多。我们就应该这样的写：&nbsp;&nbsp;</font></div>
<div><font size=4>&lt;rule&gt;<br>&nbsp;&nbsp;&lt;from&gt;^/(\w+)/(\w+)/page_(\d+)\.html$&lt;/from&gt;<br>&nbsp;&nbsp;&lt;to type="forward"&gt;/$1.htm?category=$2&amp;amp;page=$3&lt;/to&gt;<br>&nbsp;&lt;/rule&gt;<br>&nbsp;&nbsp;&nbsp;简单的介绍一下常用的正规表示式：</font><font size=4>&nbsp;</div>
<div>
<table cellSpacing=0>
    <thead>
        <tr>
            <th scope=col><font size=4>代码</font></th>
            <th scope=col><font size=4>说明</font></th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><span class=code><font color=#0000ff size=4>.</font></span></td>
            <td><span class=desc><u><span class=desc><u><font size=4>匹配除换行符以外的任意字符</font></u></span></u></span></td>
        </tr>
        <tr>
            <td><span class=code><font color=#0000ff size=4>\w</font></span></td>
            <td><span class=desc><u><font size=4>匹配字母或数字或下划线或汉字</font></u></span></td>
        </tr>
        <tr>
            <td><span class=code><font color=#0000ff size=4>\s</font></span></td>
            <td><span class=desc><u><font size=4>匹配任意的空白符</font></u></span></td>
        </tr>
        <tr>
            <td><span class=code><font color=#0000ff size=4>\d</font></span></td>
            <td><span class=desc><u><font size=4>匹配数字</font></u></span></td>
        </tr>
        <tr>
            <td><span class=code><font color=#0000ff size=4>\b</font></span></td>
            <td><span class=desc><u><font size=4>匹配单词的开始或结束</font></u></span></td>
        </tr>
        <tr>
            <td><span class=code><font color=#0000ff size=4>^</font></span></td>
            <td><span class=desc><u><font size=4>匹配字符串的开始</font></u></span></td>
        </tr>
        <tr>
            <td><span class=code><font color=#0000ff size=4>$</font></span></td>
            <td><span class=desc><u><font size=4>匹配字符串的结束</font></u></span></td>
        </tr>
    </tbody>
</table>
</div>
<div>常用的&amp;要用&nbsp; &amp;amp;来表示。$1,$2代表与你配置正规表达式/(\w+)/(\w+)/相对应的参数。&lt;to type="forward"&gt;默认的是 type="forward".</div>
<div>&nbsp; 另一个常用的规则就是连接外部的网站。就要用到。&lt;to type="redirect"&gt;<br>&nbsp;&lt;rule&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;from&gt;^/rss/yahoo\.html$&lt;/from&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;to type="redirect"&gt;&nbsp;&nbsp;&nbsp; <a href="http://add.my.yahoo.com/rss?&nbsp;url=http://feed.feedsky.com/MySiteFeed"><a href="http://add.my.yahoo.com/rss?&nbsp;url=http://feed.feedsky.com/MySiteFeed" target=_blank><u><font color=#000000 size=2>http://add.my.yahoo.com/rss?&nbsp;url=http://feed.feedsky.com/MySiteFeed</font></u></a></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/to&gt;<br>&nbsp;&lt;/rule&gt;</div>
<div>&nbsp;&nbsp; 我们的网站用到最多的无非就这两种规则。至于正规表达式的写法很多种。希望对有感兴趣的朋友，可以试试。<br></div>
</font>
<img src ="http://www.cnitblog.com/jackmisweijie/aggbug/47755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackmisweijie/" target="_blank">魏杰</a> 2008-08-07 20:34 <a href="http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>