﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-fanzhongzhou</title><link>http://www.blogjava.net/fanzhongzhou/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 19:07:19 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 19:07:19 GMT</pubDate><ttl>60</ttl><item><title>转：Tomcat 系统架构与设计模式</title><link>http://www.blogjava.net/fanzhongzhou/archive/2012/04/13/374096.html</link><dc:creator>jberry</dc:creator><author>jberry</author><pubDate>Fri, 13 Apr 2012 09:37:00 GMT</pubDate><guid>http://www.blogjava.net/fanzhongzhou/archive/2012/04/13/374096.html</guid><wfw:comment>http://www.blogjava.net/fanzhongzhou/comments/374096.html</wfw:comment><comments>http://www.blogjava.net/fanzhongzhou/archive/2012/04/13/374096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fanzhongzhou/comments/commentRss/374096.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fanzhongzhou/services/trackbacks/374096.html</trackback:ping><description><![CDATA[<div><a href="http://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/"><br /></a><h1><a href="http://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/">Tomcat 系统架构与设计模式，第 1 部分: 工作原理<span class="Apple-style-span" style="font-size: 14px; font-weight: normal;">http://www.ibm.com/developerworks/cn/java/j-lo-tomcat1/</span></a></h1><a href="http://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/"><br /></a><h1><a href="http://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/">第 2 部分: 设计模式分析</a><a href="http://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/" style="font-size: 14px; font-weight: normal; ">http://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/</a></h1></div><img src ="http://www.blogjava.net/fanzhongzhou/aggbug/374096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fanzhongzhou/" target="_blank">jberry</a> 2012-04-13 17:37 <a href="http://www.blogjava.net/fanzhongzhou/archive/2012/04/13/374096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>actionsupport和struts表单校验</title><link>http://www.blogjava.net/fanzhongzhou/archive/2012/01/09/368155.html</link><dc:creator>jberry</dc:creator><author>jberry</author><pubDate>Mon, 09 Jan 2012 08:58:00 GMT</pubDate><guid>http://www.blogjava.net/fanzhongzhou/archive/2012/01/09/368155.html</guid><wfw:comment>http://www.blogjava.net/fanzhongzhou/comments/368155.html</wfw:comment><comments>http://www.blogjava.net/fanzhongzhou/archive/2012/01/09/368155.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fanzhongzhou/comments/commentRss/368155.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fanzhongzhou/services/trackbacks/368155.html</trackback:ping><description><![CDATA[我们自己写的action类既可以实现action接口，也可以通过继承actionsupport类。<br />不同的地方在于actionsupport类除了定义了execute方法以外，还定义了validate方法。重写validate方法，该方法在execute方法之前执行，执行结果转向input页面，所以要在struts配置文件中添加input页面指向。<br /><div><div>public String execute(){</div><div><span style="white-space:pre">		</span>if(getUsername().equals("fancc")&amp;&amp;getPassword().equals("fancc"))</div><div><span style="white-space:pre">		</span>{</div><div><span style="white-space:pre">			</span>ActionContext.getContext().getSession().put("user", username);</div><div><span style="white-space:pre">			</span>return SUCCESS;</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>else</div><div><span style="white-space:pre">		</span>{</div><div><span style="white-space:pre">			</span>return ERROR;</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public void validate()</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>if(getUsername()==null||getUsername().trim().equals(""))</div><div><span style="white-space:pre">		</span>{</div><div><span style="white-space:pre">			</span>addFieldError("username", "请输入用户名");</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>if(getPassword()==null||getPassword().trim().equals(""))</div><div><span style="white-space:pre">		</span>{</div><div><span style="white-space:pre">			</span>addFieldError("password", "请输入密码");</div><div><span style="white-space:pre">		</span>}<br /><div><div>&lt;package name="struts2" extends="struts-default"&gt;</div><div><span style="white-space:pre">		</span>&lt;action name="login" class="cn.com.tisco.struts2.LoginAction"&gt;</div><div><span style="white-space:pre">			</span>&lt;result name="input"&gt;/login.jsp&lt;/result&gt;</div><div><span style="white-space:pre">			</span>&lt;result name="success"&gt;/result.jsp&lt;/result&gt;</div><div><span style="white-space:pre">			</span>&lt;result name="error"&gt;/error.jsp&lt;/result&gt;</div><div><span style="white-space:pre">		</span>&lt;/action&gt;<br /><br />通过配置文件校验<br />在需要校验的Aciton类下建立AcitonName-validation.xml文件<br /><div><div>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</div><div>&lt;!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator&nbsp;</div><div>1.0.2//EN"&nbsp;</div><div>"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"&gt;</div><div>&lt;validators&gt;</div><div><span style="white-space:pre">	</span>&lt;field name="username"&gt;</div><div><span style="white-space:pre">		</span>&lt;field-validator type="requiredstring"&gt;</div><div><span style="white-space:pre">			</span>&lt;message key="请输入用户名"&gt;&lt;/message&gt;</div><div><span style="white-space:pre">		</span>&lt;/field-validator&gt;</div><div><span style="white-space:pre">	</span>&lt;/field&gt;</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>&lt;field name="password"&gt;</div><div><span style="white-space:pre">		</span>&lt;field-validator type="requiredstring"&gt;</div><div><span style="white-space:pre">			</span>&lt;message key="请输入密码"&gt;&lt;/message&gt;</div><div><span style="white-space:pre">		</span>&lt;/field-validator&gt;</div><div><span style="white-space:pre">	</span>&lt;/field&gt;</div><div>&lt;/validators&gt;<br />同样需要在struts.xml文件中表明input</div></div></div></div></div></div><img src ="http://www.blogjava.net/fanzhongzhou/aggbug/368155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fanzhongzhou/" target="_blank">jberry</a> 2012-01-09 16:58 <a href="http://www.blogjava.net/fanzhongzhou/archive/2012/01/09/368155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript读取XML文件[兼容IE,FF,Chrome,Safari]</title><link>http://www.blogjava.net/fanzhongzhou/archive/2011/12/27/367330.html</link><dc:creator>jberry</dc:creator><author>jberry</author><pubDate>Tue, 27 Dec 2011 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/fanzhongzhou/archive/2011/12/27/367330.html</guid><wfw:comment>http://www.blogjava.net/fanzhongzhou/comments/367330.html</wfw:comment><comments>http://www.blogjava.net/fanzhongzhou/archive/2011/12/27/367330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fanzhongzhou/comments/commentRss/367330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fanzhongzhou/services/trackbacks/367330.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="font-family: simsun, arial; line-height: 24px; background-color: #ffffff; "><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; text-indent: 2em; line-height: 28px; "><span style="font-family: simsun, arial; font-size: 14px; line-height: 24px; "><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; text-indent: 2em; line-height: 28px; ">IE读取XML文件<br />FireFox读取XML文件<br />Chrome,Safari读取XML文件<br />以上三类浏览器读取XML文件各有不同，常常困扰开发人员，现在我们将其融合为一个函数方便大家使用。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; text-indent: 2em; line-height: 28px; "></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 7px; padding-right: 7px; padding-bottom: 7px; padding-left: 7px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; line-height: 20px; font-size: 12px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ebebeb; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; background-position: initial initial; background-repeat: initial initial; ">// 加载XML文件并返回XML文档节点<br />function loadXmlFile(xmlFile){<br />&nbsp; var xmlDom = null;<br />&nbsp; if (window.ActiveXObject){<br />&nbsp;&nbsp;&nbsp; xmlDom = new ActiveXObject("Microsoft.XMLDOM");<br />&nbsp;&nbsp;&nbsp; //xmlDom.loadXML(xmlFile);//如果用的是XML字符串<br />&nbsp;&nbsp;&nbsp; xmlDom.load(xmlFile);//如果用的是xml文件。<br />&nbsp; }else if (document.implementation &amp;&amp; document.implementation.createDocument){<br />&nbsp;&nbsp;&nbsp; var xmlhttp = new window.XMLHttpRequest();<br />&nbsp;&nbsp;&nbsp; xmlhttp.open("GET", xmlFile, false);<br />&nbsp;&nbsp;&nbsp; xmlhttp.send(null);<br />&nbsp;&nbsp;&nbsp; xmlDom = xmlhttp.responseXML;<br />&nbsp; }else{<br />&nbsp;&nbsp;&nbsp; xmlDom = null;<br />&nbsp; }<br />&nbsp; return xmlDom;<br />}</div><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; text-indent: 2em; line-height: 28px; ">将该函数保存入JS文件，引用方式：var xmlDom = loadXmlFile("123.xml");</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; text-indent: 2em; line-height: 28px; ">xmlDom得到的将是整个XHTML节点，接下来就直接按照W3C标准的节点处理方式针对该节点进行所需处理即可。</p></span></p></span><span class="Apple-style-span" style="font-family: simsun, arial; line-height: 28px; background-color: #ffffff; ">当前版本兼容IE,FF,Chrome,Safari。</span><span class="Apple-style-span" style="font-family: simsun, arial; line-height: 24px; background-color: #ffffff; "><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; text-indent: 2em; line-height: 28px; ">IE读取XML文件<br />FireFox读取XML文件<br />Chrome,Safari读取XML文件<br />以上三类浏览器读取XML文件各有不同，常常困扰开发人员，现在我们将其融合为一个函数方便大家使用。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; text-indent: 2em; line-height: 28px; "><span id="more-30"></span></p><div class="articleQuote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 7px; padding-right: 7px; padding-bottom: 7px; padding-left: 7px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; line-height: 20px; font-size: 12px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ebebeb; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; background-position: initial initial; background-repeat: initial initial; ">// 加载XML文件并返回XML文档节点<br />function loadXmlFile(xmlFile){<br />&nbsp; var xmlDom = null;<br />&nbsp; if (window.ActiveXObject){<br />&nbsp;&nbsp;&nbsp; xmlDom = new ActiveXObject("Microsoft.XMLDOM");<br />&nbsp;&nbsp;&nbsp; //xmlDom.loadXML(xmlFile);//如果用的是XML字符串<br />&nbsp;&nbsp;&nbsp; xmlDom.load(xmlFile);//如果用的是xml文件。<br />&nbsp; }else if (document.implementation &amp;&amp; document.implementation.createDocument){<br />&nbsp;&nbsp;&nbsp; var xmlhttp = new window.XMLHttpRequest();<br />&nbsp;&nbsp;&nbsp; xmlhttp.open("GET", xmlFile, false);<br />&nbsp;&nbsp;&nbsp; xmlhttp.send(null);<br />&nbsp;&nbsp;&nbsp; xmlDom = xmlhttp.responseXML;<br />&nbsp; }else{<br />&nbsp;&nbsp;&nbsp; xmlDom = null;<br />&nbsp; }<br />&nbsp; return xmlDom;<br />}</div><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; text-indent: 2em; line-height: 28px; ">将该函数保存入JS文件，引用方式：var xmlDom = loadXmlFile("123.xml");</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; text-indent: 2em; line-height: 28px; ">xmlDom得到的将是整个XHTML节点，接下来就直接按照W3C标准的节点处理方式针对该节点进行所需处理即可。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; text-indent: 2em; line-height: 28px; ">当前版本兼容IE,FF,Chrome,Safari。</p></span><img src ="http://www.blogjava.net/fanzhongzhou/aggbug/367330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fanzhongzhou/" target="_blank">jberry</a> 2011-12-27 14:00 <a href="http://www.blogjava.net/fanzhongzhou/archive/2011/12/27/367330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载：jsp标签小结</title><link>http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367073.html</link><dc:creator>jberry</dc:creator><author>jberry</author><pubDate>Fri, 23 Dec 2011 08:00:00 GMT</pubDate><guid>http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367073.html</guid><wfw:comment>http://www.blogjava.net/fanzhongzhou/comments/367073.html</wfw:comment><comments>http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367073.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fanzhongzhou/comments/commentRss/367073.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fanzhongzhou/services/trackbacks/367073.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JSP自定义标签试验原文：兔八哥笔记3:JSP自定义标签试验&nbsp;一、概述&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSP中有一块重要的技术：自定义标签（Custom Tag），最近这几天在学习Struts的时候发现Struts中使用了很多自定义标签，如html、bean等。所以我就做了个简单的试验，学习一下这种技术。&nbsp;&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367073.html'>阅读全文</a><img src ="http://www.blogjava.net/fanzhongzhou/aggbug/367073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fanzhongzhou/" target="_blank">jberry</a> 2011-12-23 16:00 <a href="http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载：Web.xml配置详解</title><link>http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367055.html</link><dc:creator>jberry</dc:creator><author>jberry</author><pubDate>Fri, 23 Dec 2011 02:46:00 GMT</pubDate><guid>http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367055.html</guid><wfw:comment>http://www.blogjava.net/fanzhongzhou/comments/367055.html</wfw:comment><comments>http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fanzhongzhou/comments/commentRss/367055.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fanzhongzhou/services/trackbacks/367055.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://www.cnblogs.com/chinafine/archive/2010/09/02/1815980.html1 定义头和根元素　　部署描述符文件就像所有XML文件一样，必须以一个XML头开始。这个头声明可以使用的XML版本并给出文件的字符编码。DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本（如2.2或2.3）并指定管理此文件其余部分内...&nbsp;&nbsp;<a href='http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367055.html'>阅读全文</a><img src ="http://www.blogjava.net/fanzhongzhou/aggbug/367055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fanzhongzhou/" target="_blank">jberry</a> 2011-12-23 10:46 <a href="http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载：web.xml中的url-pattern </title><link>http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367053.html</link><dc:creator>jberry</dc:creator><author>jberry</author><pubDate>Fri, 23 Dec 2011 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367053.html</guid><wfw:comment>http://www.blogjava.net/fanzhongzhou/comments/367053.html</wfw:comment><comments>http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367053.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fanzhongzhou/comments/commentRss/367053.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fanzhongzhou/services/trackbacks/367053.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #f2f9fd; line-height: 25px; background-color: #020727; "><span style="line-height: 21px; "><span style="color: #f2f9fd; font-size: 14px; line-height: 25px; background-color: #020727; "><span style="line-height: 21px; font-family: verdana, sans-serif; ">Servlet和filter是J2EE开发中常用的技术，使用方便，配置简单。servlet和filter中的url-pattern有一些文章在里面的，总结了一些东西，以免遇到问题又要浪费时间。&nbsp;<br style="line-height: 25px; " />&nbsp;&nbsp;&nbsp; 一，servlet容器对url的匹配过程：&nbsp;<br style="line-height: 25px; " /><br style="line-height: 25px; " />当一个请求发送到servlet容器的时候，容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url，比如我访问的是http://localhost/test/aaa.html，我的应用上下文是test，容器会将http://localhost/test去掉，剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的，而且当有一个servlet匹配成功以后，就不会去理会剩下的servlet了（filter不同，后文会提到）。其匹配规则和顺序如下：&nbsp;<br style="line-height: 25px; " /><br style="line-height: 25px; " />1.&nbsp;&nbsp;&nbsp;&nbsp; 精确路径匹配。例子：比如servletA 的url-pattern为 /test，servletB的url-pattern为 /* ，这个时候，如果我访问的url为http://localhost/test ，这个时候容器就会先进行精确路径匹配，发现/test正好被servletA精确匹配，那么就去调用servletA，也不会去理会其他的servlet了。&nbsp;<br style="line-height: 25px; " /><br style="line-height: 25px; " />2.&nbsp;&nbsp;&nbsp;&nbsp; 最长路径匹配。例子：servletA的url-pattern为/test/*，而servletB的url-pattern为/test/a/*，此时访问http://localhost/test/a时，容器会选择路径最长的servlet来匹配，也就是这里的servletB。&nbsp;<br style="line-height: 25px; " /><br style="line-height: 25px; " />3.&nbsp;&nbsp;&nbsp;&nbsp; 扩展匹配，如果url最后一段包含扩展，容器将会根据扩展选择合适的servlet。例子：servletA的url-pattern：*.action&nbsp;<br style="line-height: 25px; " /><br style="line-height: 25px; " />4.&nbsp;&nbsp;&nbsp;&nbsp; 如果前面三条规则都没有找到一个servlet，容器会根据url选择对应的请求资源。如果应用定义了一个default servlet，则容器会将请求丢给default servlet（什么是default servlet？后面会讲）。&nbsp;<br style="line-height: 25px; " /><br style="line-height: 25px; " />&nbsp;&nbsp;&nbsp;&nbsp; 根据这个规则表，就能很清楚的知道servlet的匹配过程，所以定义servlet的时候也要考虑url-pattern的写法，以免出错。&nbsp;<br style="line-height: 25px; " /><br style="line-height: 25px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于filter，不会像servlet那样只匹配一个servlet，因为filter的集合是一个链，所以只会有处理的顺序不同，而不会出现只选择一个filter。Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。&nbsp;<br style="line-height: 25px; " />&nbsp;&nbsp;&nbsp; 二，url-pattern详解&nbsp;<br style="line-height: 25px; " /><br style="line-height: 25px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在web.xml文件中，以下语法用于定义映射：&nbsp;<br style="line-height: 25px; " /><br style="line-height: 25px; " />l. 以&#8221;/&#8217;开头和以&#8221;/*&#8221;结尾的是用来做路径映射的。&nbsp;<br style="line-height: 25px; " /><br style="line-height: 25px; " />2. 以前缀&#8221;*.&#8221;开头的是用来做扩展映射的。&nbsp;<br style="line-height: 25px; " /><br style="line-height: 25px; " />3. &#8220;/&#8221; 是用来定义default servlet映射的。&nbsp;<br style="line-height: 25px; " /><br style="line-height: 25px; " />4. 剩下的都是用来定义详细映射的。比如： /aa/bb/cc.action&nbsp;<br style="line-height: 25px; " /><br style="line-height: 25px; " />所以，为什么定义&#8221;/*.action&#8221;这样一个看起来很正常的匹配会错？因为这个匹配即属于路径映射，也属于扩展映射，导致容器无法判断。</span><wbr style="line-height: 25px; "><div style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 25px; "><span style="line-height: 21px; font-family: verdana, sans-serif; "><br style="line-height: 25px; " /></span></div></span></span></span><span class="Apple-style-span" style="color: #f2f9fd; font-family: verdana, sans-serif; background-color: #020727; "><a rel="nofollow" href="http://blog.csdn.net/shangzhenhui/archive/2011/01/06/6119458.aspx" style="color: #e1f3fa; line-height: 25px; text-decoration: none; ">http://blog.csdn.net/shangzhenhui/archive/2011/01/06/6119458.aspx</a></span><span class="Apple-style-span" style="color: #f2f9fd; line-height: 25px; background-color: #020727; "><span style="line-height: 21px; "><font class="Apple-style-span" face="verdana, sans-serif">Servlet和filter是J2EE开发中常用的技术，使用方便，配置简单。servlet和filter中的url-pattern有一些文章在里面的，总结了一些东西，以免遇到问题又要浪费时间。&nbsp;</font><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">&nbsp;&nbsp;&nbsp; 一，servlet容器对url的匹配过程：&nbsp;</font><br style="line-height: 25px; " /><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">当一个请求发送到servlet容器的时候，容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url，比如我访问的是http://localhost/test/aaa.html，我的应用上下文是test，容器会将http://localhost/test去掉，剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的，而且当有一个servlet匹配成功以后，就不会去理会剩下的servlet了（filter不同，后文会提到）。其匹配规则和顺序如下：&nbsp;</font><br style="line-height: 25px; " /><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">1.&nbsp;&nbsp;&nbsp;&nbsp; 精确路径匹配。例子：比如servletA 的url-pattern为 /test，servletB的url-pattern为 /* ，这个时候，如果我访问的url为http://localhost/test ，这个时候容器就会先进行精确路径匹配，发现/test正好被servletA精确匹配，那么就去调用servletA，也不会去理会其他的servlet了。&nbsp;</font><br style="line-height: 25px; " /><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">2.&nbsp;&nbsp;&nbsp;&nbsp; 最长路径匹配。例子：servletA的url-pattern为/test/*，而servletB的url-pattern为/test/a/*，此时访问http://localhost/test/a时，容器会选择路径最长的servlet来匹配，也就是这里的servletB。&nbsp;</font><br style="line-height: 25px; " /><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">3.&nbsp;&nbsp;&nbsp;&nbsp; 扩展匹配，如果url最后一段包含扩展，容器将会根据扩展选择合适的servlet。例子：servletA的url-pattern：*.action&nbsp;</font><br style="line-height: 25px; " /><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">4.&nbsp;&nbsp;&nbsp;&nbsp; 如果前面三条规则都没有找到一个servlet，容器会根据url选择对应的请求资源。如果应用定义了一个default servlet，则容器会将请求丢给default servlet（什么是default servlet？后面会讲）。&nbsp;</font><br style="line-height: 25px; " /><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">&nbsp;&nbsp;&nbsp;&nbsp; 根据这个规则表，就能很清楚的知道servlet的匹配过程，所以定义servlet的时候也要考虑url-pattern的写法，以免出错。&nbsp;</font><br style="line-height: 25px; " /><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于filter，不会像servlet那样只匹配一个servlet，因为filter的集合是一个链，所以只会有处理的顺序不同，而不会出现只选择一个filter。Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。&nbsp;</font><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">&nbsp;&nbsp;&nbsp; 二，url-pattern详解&nbsp;</font><br style="line-height: 25px; " /><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在web.xml文件中，以下语法用于定义映射：&nbsp;</font><br style="line-height: 25px; " /><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">l. 以&#8221;/&#8217;开头和以&#8221;/*&#8221;结尾的是用来做路径映射的。&nbsp;</font><br style="line-height: 25px; " /><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">2. 以前缀&#8221;*.&#8221;开头的是用来做扩展映射的。&nbsp;</font><br style="line-height: 25px; " /><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">3. &#8220;/&#8221; 是用来定义default servlet映射的。&nbsp;</font><br style="line-height: 25px; " /><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">4. 剩下的都是用来定义详细映射的。比如： /aa/bb/cc.action&nbsp;</font><br style="line-height: 25px; " /><br style="line-height: 25px; " /><font class="Apple-style-span" face="verdana, sans-serif">所以，为什么定义&#8221;/*.action&#8221;这样一个看起来很正常的匹配会错？因为这个匹配即属于路径映射，也属于扩展映射，导致容器无法判断。</font></span><wbr style="line-height: 25px; "><div style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 25px; "><span style="line-height: 21px; font-family: verdana, sans-serif; "><br style="line-height: 25px; " /></span></div><div style="font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 25px; "><span style="line-height: 21px; font-family: verdana, sans-serif; "><a rel="nofollow" href="http://blog.csdn.net/shangzhenhui/archive/2011/01/06/6119458.aspx" style="color: #e1f3fa; line-height: 25px; text-decoration: none; ">http://blog.csdn.net/shangzhenhui/archive/2011/01/06/6119458.aspx</a></span></div></span><img src ="http://www.blogjava.net/fanzhongzhou/aggbug/367053.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fanzhongzhou/" target="_blank">jberry</a> 2011-12-23 10:36 <a href="http://www.blogjava.net/fanzhongzhou/archive/2011/12/23/367053.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第一天</title><link>http://www.blogjava.net/fanzhongzhou/archive/2011/12/09/365989.html</link><dc:creator>jberry</dc:creator><author>jberry</author><pubDate>Fri, 09 Dec 2011 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/fanzhongzhou/archive/2011/12/09/365989.html</guid><wfw:comment>http://www.blogjava.net/fanzhongzhou/comments/365989.html</wfw:comment><comments>http://www.blogjava.net/fanzhongzhou/archive/2011/12/09/365989.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fanzhongzhou/comments/commentRss/365989.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fanzhongzhou/services/trackbacks/365989.html</trackback:ping><description><![CDATA[初来乍到，先mark下。<img src ="http://www.blogjava.net/fanzhongzhou/aggbug/365989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fanzhongzhou/" target="_blank">jberry</a> 2011-12-09 17:31 <a href="http://www.blogjava.net/fanzhongzhou/archive/2011/12/09/365989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>