Java/Struts/JSP | Python/Django | |
开发步?/td> | 1.在web.xml里配|struts的servlet 2.在struts-config.xml里配|URL和action的映?br>3.写action 4.写JSP |
1.在urls.py里配|URL到方法的映射 2.写相应的Ҏ 3.写HTML模板 |
调用q程 | 1.Ҏweb.xml的映调用struts的servlet controller 2.servlet controllerҎstruts-config.xml的映调用相应的action 3.action处理h 4.JSP渲染昄 |
1.Ҏurls.py的映调用相应的Ҏ 2.Ҏ处理h 3.HTML渲染昄 |
DOM只是一个定义,q不是具体的实现Q它的目的就是ؓ了让大家在各个^C都能用相同的方式来处理XMLQ这样一来,我只要了解DOMQ基本上在各个^C都可以方便的处理XMLQ而不用重新学习了。比如说QJava, JavaScript, Python都有DOM的实玎ͼ用它们来处理XMLQ方式基本上都是一LQ当然也有非DOM的XML解析方式Q。在Java下,实现DOM的类库就有很多,比如JDom,XercesQ?用GOOGLE一搜就一大把。现在Java 5.0内置的就是Xerces。而JavaScript本n内|了DOM的实现。Python也默认安装了DOM的库?/p>
正因为DOM致力于实现各个^C对XML一致的处理方式Q它定义了一堆自q接口。因此在用DOM的时候,会有很多非NATIVE的东东。比如说Q返回节点的子节点的ҎQchildNodesQ返回的cd是NodeList。我W一ơ在Java上用Q就以ؓ是返回一个ListQ然后用get(n)Ҏ来取得某元素。而实际上NodeList是用item(n)的方法来取得某元素的。这p我觉得很怪。而DOM正是用这U方式来获得“语a无关”的能力的?/p>
DOM是用IDL(Interface Definition Language)来定义的。完整的定义可以在这里找?http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html。IDL也很Ҏ看懂。定义的1.1节列Z所有的接口?/p>
q些接口里,最重要而且常用的是Node,NodeList,Document,Element,Text,Attrq几个。DOM把XML文档看作一|Q树上的每个元素都是Node。每个Node都属于某个类型,比如Element,attribute,text{。这些类型就表明q个节点在XML文档里的cd了?/p>
比如Node里有个属性:
Ҏq个定义Q对于取得的节点Q我们就可以通过dnodeTypeq个属性来判断q个节点的类型。在Java里,所有的属性都是用getter来取得的Q因此对某节点nQ就可以用n.getNodeType()取得它的cd。Node接口里也定义了类型常量:
用这些常量和和n.getNodeType()的结果比较,可以知道它是不是某U类型?/p>
Node接口中也定义了一些方法,比如Q?/p>
表明appendChildҎ需要一个Nodecd的参敎ͼq回一个Node?具体的说明可以点文档上的链接q去Q也很容易看懂?/p>
Node接口里定义了操纵节点的方法,比如增加子节点,q回父节点,插入新节点,q回节点cdQ等{。Document,Element{接口都l承Node接口Q因此在它们上面都可以用操U节点的Ҏ?/p>
Document:代表整个XML文档。所有DOM元素都不能用cMJava里new的方式来生成Q而是要通过调用Document里的相应Ҏ来生成。因此它提供了生成诸如Element, Attr, Text的方法。比如createElement, createTextNode, createComment{。它也提供了名ؓgetElementsByTagName的方法,用来通过标签名称来取得其对象。比如getElementByTagName("ul")可以获得所有ul标签。它也提供一些文档的属性,比如xmlEncoding,inputEncoding{。它的一个属?documentElement代表文档的根节点。所有对XML元素的操作,基本上都是从Document开始的?/p>
Element:代表一个XML标签。它可以有属性,子标{,{。比?lt;ul id="booklist"><li>hello</li></ul>。标{ul是一个Element,它有一个属性叫idQ属性的值是booklist。它有一个子l点li。li也是一个标{,它也有个子节点helloQ是一个Textcd的节炏V这个接口提供操U其标签属性的ҎQ比如getAttribute,setAttribute,removeAttribute{。它也提供了和Document中一LgetElementsByTagName的方法,用来获得在这个节点下的元素?/p>
Attr:代表标签中的属性。比如上面的id。它也是一个Node。它有名字,|也可以获得它的所属标{?/p>
Text:代表一D|字,比如上面的helloQ它也一个NodeQ但比较ҎQ它不是直接l承NodeQ而是l承CharacterData接口Q后者承了Node。但是它不能有子节点?/p>
用JavaScriptl一个例子。假设有一个HTML文档Q?/p>
下面是增加一个li的JavaScriptҎQ?/p>
用Java来写Q是q样Q?/p>
可以看到处理方式和数据类型都是一L。如果要了解更多Q可以看看DOM的定义,都是IDL?/p>
ȝ来说Q问题的原因在于,struts是在W一ơ收到对action的请求(注意Q不包括jsp的请求)Ӟ提取q个h的url的\径信息,把相应模块的mapping信息讄到请求中?/STRONG>。如果在q入一个模块时Q第一ơ访问的是一个jsp面Q而在q个jsp面中提交到该模块的一个actionQ就会出现找不到action mapping的情c这是因ؓQ在q到q个模块Ӟ讉K的是jspQ这个模块的M一个action都没有被讉K刎ͼ所以struts的ActionServletq没有来得及把这个模块的mapping讄到请求中Q自然找不到该模块的action?/P>
因此Q这引Z个约定,是pȝ中尽量避免对Jsp的直接访问,如果要访问也要通过action来forward。虽然看hȝ一点,但是安全性、健壮性都会有所提高?/P>
关于以上提到的模块mapping的设|原理,具体的文章在q里Q不长)Q值得收藏Q?/P>
原文链接Q?A >http://202.100.72.44/news/itschool/pro/pro44134.htm
]]>