??xml version="1.0" encoding="utf-8" standalone="yes"?>web.xml
<filter>
<filter-name>AuthorizationFilter</filter-name>
<filter-class>com.cenin.util.filter.AuthorizationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthorizationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
AuthorizationFilter.java
public class AuthorizationFilter implements Filter
{
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException
{
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
HttpSession session = request.getSession();
String servletPath = request.getServletPath();//获得如: /baseinfo/codeBillTypeList.action
Object user = session.getAttribute(Config.getConfig().getSessionUser());
//判断权限
boolean passed = true;
/*if(user == null && (servletPath.indexOf("action")>=0 )){
passed = false;
String[] noLimit = Config.getConfig().getNoFilter().split(";");
for(int i=0;i<noLimit.length;i++){
if(servletPath.matches(noLimit[i])){
System.out.println(servletPath + " " + noLimit[i]);
passed = true;
break;
}
}
}*/
request.getRequestDispatcher(servletPath).forward(request, response);//控制struts or xwork跌{
// if(passed)
// chain.doFilter(request, response);
// else
// {
// String modelType = request.getParameter("model.bmoduleType");
// String particalUrl = request.getParameter("particalUrl");
// session.setAttribute("model.bmoduleType", modelType);
// session.setAttribute("particalUrl", particalUrl);
// String url = Config.getConfig().getPageLogin();
// RequestDispatcher dispatcher = request.getRequestDispatcher(url);
// dispatcher.forward(request, response);
// }
}
public void init(FilterConfig filterConfig) throws ServletException
{
}
public void destroy()
{
}
}
xwork.xmld
<include file="xwork-onlinehall.xml"/>
xwork-onlinehall.xml文g内容Q?br />
<package name="onlinehall" extends="cenin" namespace="/onlinehall" externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContextReferenceResolver">
<action name="myOrderLoadList" class="com.cenin.web.action.onlinehall.MyOrderAction" method="myOrderLoadList">
<result name="success" type="freemarker">/onlinehall/myOrder.ftl</result>
</action>
</package>
MyOrder.java内容
public class MyOrderAction extends BaseActionSupport {
public String myOrderLoadList() throws Exception {
}
}
]]>public List xmlElements(String xmlDoc) {
//创徏一个新的字W串
StringReader read = new StringReader(xmlDoc);
//创徏新的输入源SAX 解析器将使用 InputSource 对象来确定如何读?nbsp;XML 输入
InputSource source = new InputSource(read);
//创徏一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
List list = new ArrayList();
try {
//通过输入源构造一个Document
Document doc = sb.build(source);
//取的根元?/span>
Element root = doc.getRootElement();
System.out.println(root.getName());//输出根元素的名称Q测试)
//得到根元素所有子元素的集?/span>
List jiedian = root.getChildren();
//获得XML中的命名I间QXML中未定义可不写)
Namespace ns = root.getNamespace();
Element et = null;
DataModel dataModel = new DataModel();
Collections c ;
Ctnfee ctnfee = null;
for(int i=0;i<jiedian.size();i++){
et = (Element) jiedian.get(i);//循环依次得到子元?/span>
ctnfee = new Ctnfee();
/**//*
* 无命名空间定义时
* et.getChild("users_id").getText();
* et.getChild("users_address",ns).getText()
*/
/*System.out.println(et.getChild("users_id",ns).getText());
System.out.println(et.getChild("users_address",ns).getText());*/
System.out.println(et.getChild("p_id",ns).getText());
System.out.println(et.getChild("ctnno",ns).getText());
ctnfee.setP_id(et.getChild("p_id",ns).getText());
ctnfee.setCtnno(et.getChild("ctnno",ns).getText());
ctnfee.setFee_type(et.getChild("fee_type",ns).getText());
ctnfee.setStart_time(et.getChild("start_time",ns).getText());
ctnfee.setEnd_time(et.getChild("end_time",ns).getText());
ctnfee.setFee(Double.parseDouble(et.getChild("fee",ns).getText()));
ctnfee.setFee_count(Double.parseDouble(et.getChild("fee_count",ns).getText()));
ctnfee.setCpid(et.getChild("cpid",ns).getText());
ctnfee.setFee_name(et.getChild("fee_name",ns).getText());
ctnfee.setFee_rate_id(Double.parseDouble(et.getChild("fee_rate_id",ns).getText()));
ctnfee.setJffs(et.getChild("jffs",ns).getText());
ctnfee.setIf_hand(et.getChild("if_hand",ns).getText());
ctnfee.setSfid(et.getChild("sfid",ns).getText());
ctnfee.setWt_company(et.getChild("wt_company",ns).getText());
ctnfee.setOpid(et.getChild("opid",ns).getText());
ctnfee.setCy(et.getChild("cy",ns).getText());
ctnfee.setIf_bf(et.getChild("if_bf",ns).getText());
ctnfee.setDays_count(et.getChild("days_count",ns).getText());
ctnfee.setIf_collect(Double.parseDouble(et.getChild("if_collect",ns).getText()));
ctnfee.setIf_dd(et.getChild("if_dd",ns).getText());
ctnfee.setDd_fee_name(et.getChild("dd_fee_name",ns).getText());
ctnfee.setSpec_sign(et.getChild("spec_sign",ns).getText());
list.add(ctnfee);
counttotal = counttotal +Double.parseDouble(et.getChild("fee_count",ns).getText());
}
/**//*
* 如要?lt;row>下的子元素的名称
*/
et = (Element) jiedian.get(0);
List zjiedian = et.getChildren();
for(int j=0;j<zjiedian.size();j++){
Element xet = (Element) zjiedian.get(j);
System.out.println(xet.getName());
}
} catch (JDOMException e) {
// TODO 自动生成 catch ?/span>
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch ?/span>
e.printStackTrace();
}
return list;
}
]]>
this.platformEncoding = "GBK";
获得数据库字W时候需要{?img src ="http://www.aygfsteel.com/youngturk/aggbug/398720.html" width = "1" height = "1" />
]]>
import java.io.StringReader;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;
public class TestXML {
public List xmlElements(String xmlDoc) {
//创徏一个新的字W串
StringReader read = new StringReader(xmlDoc);
//创徏新的输入源SAX 解析器将使用 InputSource 对象来确定如何读?XML 输入
InputSource source = new InputSource(read);
//创徏一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
try {
//通过输入源构造一个Document
Document doc = sb.build(source);
//取的根元?br /> Element root = doc.getRootElement();
System.out.println(root.getName());//输出根元素的名称Q测试)
//得到根元素所有子元素的集?br /> List jiedian = root.getChildren();
//获得XML中的命名I间QXML中未定义可不写)
Namespace ns = root.getNamespace();
Element et = null;
for(int i=0;i<jiedian.size();i++){
et = (Element) jiedian.get(i);//循环依次得到子元?br /> /**//*
* 无命名空间定义时
* et.getChild("users_id").getText();
* et.getChild("users_address",ns).getText()
*/
/*System.out.println(et.getChild("users_id",ns).getText());
System.out.println(et.getChild("users_address",ns).getText());*/
System.out.println(et.getChild("p_id",ns).getText());
System.out.println(et.getChild("ctnno",ns).getText());
}
/**//*
* 如要?lt;row>下的子元素的名称
*/
et = (Element) jiedian.get(0);
List zjiedian = et.getChildren();
for(int j=0;j<zjiedian.size();j++){
Element xet = (Element) zjiedian.get(j);
System.out.println(xet.getName());
}
} catch (JDOMException e) {
// TODO 自动生成 catch ?br /> e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch ?br /> e.printStackTrace();
}
return null;
}
public static void main(String[] args){
TestXML doc = new TestXML();
String xml = "<?xml version=\"1.0\" encoding=\"gb2312\"?>"+
"<Result xmlns=\" "<row resultcount=\"1\">"+
"<users_id>1001 </users_id>"+
"<users_name>wangwei </users_name>"+
"<users_group>80 </users_group>"+
"<users_address>1001?nbsp; </users_address>"+
"</row>"+
"<row resultcount=\"1\">"+
"<users_id>1002 </users_id>"+
"<users_name>wangwei </users_name>"+
"<users_group>80 </users_group>"+
"<users_address>1002?nbsp; </users_address>"+
"</row>"+
"</Result>";
String xml1 = "<?xml version=\"1.0\" encoding=\"UTF-16LE\" standalone=\"no\"?>" +
"<d_fsgl_fee_count_for_xml>" +
" <d_fsgl_fee_count_for_xml_row>" +
" <p_id>JD1302130002</p_id>" +
" <ctnno>CXDU1499549</ctnno>" +
" <fee_type>?lt;/fee_type>" +
" <start_time>2013-02-09 00:00:00</start_time>" +
" <end_time>2013-02-13 00:00:00</end_time>" +
" <fee>4</fee>" +
" <fee_count>16</fee_count>" +
" <cpid></cpid>" +
" <fee_name>堆存?lt;/fee_name>" +
" <fee_rate_id></fee_rate_id>" +
" <jffs>1</jffs>" +
" <if_hand>0</if_hand>" +
" <sfid>FDZT1302180104</sfid>" +
" <wt_company>QT</wt_company>" +
" <opid>928</opid>" +
" <cy>D</cy>" +
" <if_bf></if_bf>" +
" <days_count>4</days_count>" +
" <if_collect>1</if_collect>" +
" <if_dd></if_dd>" +
" <dd_fee_name></dd_fee_name>" +
" <spec_sign>五洲代垫</spec_sign>" +
" </d_fsgl_fee_count_for_xml_row>" +
" <d_fsgl_fee_count_for_xml_row>" +
" <p_id>JD1302130002</p_id>" +
" <ctnno>CXDU1499549</ctnno>" +
" <fee_type>?lt;/fee_type>" +
" <start_time>2013-02-13 00:00:00</start_time>" +
" <end_time>2013-02-20 00:00:00</end_time>" +
" <fee>4</fee>" +
" <fee_count>32</fee_count>" +
" <cpid></cpid>" +
" <fee_name>堆存?lt;/fee_name>" +
" <fee_rate_id>67</fee_rate_id>" +
" <jffs>1</jffs>" +
" <if_hand>0</if_hand>" +
" <sfid>FDZT1302180104</sfid>" +
" <wt_company>QT</wt_company>" +
" <opid>928</opid>" +
" <cy>D</cy>" +
" <if_bf></if_bf>" +
" <days_count>8</days_count>" +
" <if_collect>1</if_collect>" +
" <if_dd></if_dd>" +
" <dd_fee_name></dd_fee_name>" +
" <spec_sign></spec_sign>" +
" </d_fsgl_fee_count_for_xml_row>" +
"</d_fsgl_fee_count_for_xml>";
doc.xmlElements(xml1);
}
}
<script type="text/javascript">
//<![CDATA[
//嵌入CDATAD可以防止不兼容Javacript的浏览器不生错误信?br /> //增加正则表达?span class="Apple-converted-space">
String.prototype.getQueryString = function(name) {
var reg = new RegExp("(^|&|\\?)" + name + "=([^&]*)(&|$)"), r;
if (r = this.match(reg)) return unescape(r[2]);
return null;
};
var address = location.search.getQueryString("address"); //通过表达式获得传递参?br /> //针对两种览器,分别获取xmlDocument对象// dXML文g
function loadXML(xmlFile) {
var xmlDoc;
if (window.ActiveXObject) {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.load(xmlFile);
}
else if (document.implementation && document.implementation.createDocument) {
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.async = false;
xmlDoc.load(xmlFile);
} else {
alert('您的览器不支持该系l脚本!');
}
return xmlDoc;
}
//调用地图
var map; //全局GMap GOOGLE 地图 API
function load() {
if (GBrowserIsCompatible()) //查浏览器兼容?br /> {
map = new GMap2(document.getElementById("map")); //地图加栽到ID为map的DIV中?br /> map.addControl(new GSmallMapControl()); //dGcontrol控g//攑֤~小的那?br /> map.setCenter(new GLatLng(26.577014, 104.877977), 15); //讄地图中心
//创徏多个坐标点(从INFO.XML文g中读取)
var xmlDoc = loadXML("Info.xml");
var members = xmlDoc.getElementsByTagName("number");
var maxRes = members.length;
for (var i = 0; i <= maxRes; i++) { //XML中记录了多个坐标点,要每个点都标C?br /> var oName = members[i].getElementsByTagName("name");
var oLongitude = members[i].getElementsByTagName("Longitude");
var oLatitude = members[i].getElementsByTagName("Latitude");
var name = oName[0].firstChild.nodeValue
var Longitude = oLongitude[0].firstChild.nodeValue
var Latitude = oLatitude[0].firstChild.nodeValue
var marker = new GMarker(new GLatLng(Longitude, Latitude), { title: name }); //Ҏ个点d标记
marker.openInfoWindowHtml("<div style=line-height:20px;text-align:center;font-size:12px;'><a href=Left.aspx?info=" + name + " target=framLeft>" + name + ",点击查看信息</a></div>");
map.addOverlay(marker);
}
}
}
//]]>
</script>
XML文g
<?xml version="1.0" encoding="GB2312"?>1、下载proxool 地址Qhttp://proxool.sourceforge.net
2、解压羃proxool-0.9.0RC2.zipQ拷贝lib/proxool-0.9.0RC2.jar到web-info/lib
拯jdbc驱动到web-info/lib
3、在web-info下徏立文Ӟproxool.xml
文g内容如下Q?br /><?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>Develop</alias>
<driver-url>jdbc:oracle:thin:@192.168.100.18:1521:RNMS</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="scmlp"/>
<property name="password" value="scmlpscmlp"/>
</driver-properties>
<maximum-connection-count>500</maximum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>
4、在web.xml文g内加入以下内容:
<servlet>
<servlet-name>proxoolServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- proxool提供的管理监控工P可查看当前数据库q接情况。如果运行不成功Q请删除本行 -->
<servlet>
<servlet-name>Admin</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Admin</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>
5、在调用数据库连接代码:
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool.Develop");
6、利用proxool监控工具查看数据库运行状态。地址Q?/admin
配置二:propertiesҎ
1Q下载proxool-0.8.3.jarq放到相应的目录Q这个应该比较简单了
2Q写一个配|文件放到web-inf目录下,配置文g内容如下Q?
jdbc-0.proxool.alias=bidding
jdbc-0.proxool.driver-url=jjdbc:oracle:thin:@127.0.0.1:1521:dbname
jdbc-0.proxool.driver-class=oracle.jdbc.driver.oracledriver
jdbc-0.user=name
jdbc-0.password=pass
jdbc-0.proxool.maximum-connection-count=200
jdbc-0.proxool.house-keeping-test-sql=select *
3Q在web-inf/web.xml中添加如下代码:
<servlet>
<servlet-name>servletconfigurator</servlet-name>
<servlet-lass>org.logicalcobwebs.proxool.configuration.servletconfigurator</servlet-class>
<init-param>
<param-name>propertyfile</param-name>
<param-value>web-inf/proxool.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
4Q配|就q么单,下面l你一D|么得到一个连接代码,其他的应该就比较单了
public connection getconnection() {
try {
conn = drivermanager.getconnection("proxool.bidding");
}catch(sqlexception ex){
ex.printstacktrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (sqlexception e) {
e.printstacktrace();
log("problem closing connection");
}
}
return conn;
}
public void invokeActionHandler(ModelAndView mv , HttpServletRequest request) throws Exception{
String className = mv.getClassName();
String methodName = mv.getMethodName();
//load class
Class controllerClass = cache.loadClass(className);//== Class.forName(className);java反射机制Qjvm加蝲lassNamec?/span>
Class parentControllerClass = cache.loadClass(baseControllerClass);//class org.bluechant.mvc.controller.Controller
//load method参数1c,创徏一个方法ؓsetRequest参数为HttpServletRequest.class的方法与method = clazz.getDeclaredMethod(setRequest, HttpServletRequest.class);与HttpServletRequest的setRequestҎ一致的Ҏ.
Method setRequest = cache.loadMethod(parentControllerClass, "setRequest", new Class[] { HttpServletRequest.class }); //HttpServletRequest.classQjava的反机制得到自qc,能够拥有自己的方法|QMethod setRequest获取成员函数Q?/span>
Method setModelAndView = cache.loadMethod(parentControllerClass, "setModelAndView", new Class[] { ModelAndView.class });//org.bluechant.mvc.controller.Controller-setModelAndView@6024418 public void org.bluechant.mvc.controller.Controller.setModelAndView(org.bluechant.mvc.controller.ModelAndView)
Method targetMethod = cache.loadMethod(controllerClass, methodName, new Class[]{});
//buiid controller instance and invoke target method以上setRequestQsetModelAndViewQtargetMethod都放在cacheQhashMap中)
Object instance = controllerClass.newInstance();//加蝲classNamec?font color="#008000">;//此方法引入数据库q接
//以上刚进入页面的时候instance调用三个cd始化Q分别是l承关系DaosupportController QcontrollerQ和BeanFactory
/*--->>>其中DaoSupportControllercMprotected ObjectDao dao = (ObjectDao)BeanFactory.getBean("objectDao");
--->>>调用QgetBean Ҏpublic class BeanFactory {
public static ApplicationContext context = new ClassPathXmlApplicationContext("appcontext.xml") ;//此方法引入数据库q接
public static Object getBean(String beanId) {
return context.getBean(beanId);
}
}*/
setRequest.invoke(instance, new Object[] { request });//对带有指定参数的指定对象调用由此 Method 对象表示的基Ҏ
setModelAndView.invoke(instance, new Object[] { mv });//instance立即为原型指?br />
// --->>>执行指定的targetMethodҎ实则为AccountController的loginQ)登陆Ҏ此时开始调用数据库
targetMethod.invoke(instance, new Object[]{});
//调用instancecMtargetMethodq个ҎQObject[]{}q个作ؓ参数..
//invokeҎ实体获得ҎQ添加所要造的参数Q就是个扑֮例的Ҏ克隆工厂Q由Method获得实例模型Q由Ҏ锻造样子,传入参数得出惌l果
}
}
首先你要明白在java里面Mclass都要装蝲在虚拟机上才能运行。这句话是装蝲cȝ?和new 不一P要分清楚)?nbsp;
至于什么时候用Q你可以考虑一下这个问题,l你一个字W串变量Q它代表一个类的包名和cdQ你怎么实例化它Q只有你提到的这个方法了Q不q要再加一炏V?nbsp;
A a = (A)Class.forName("pacage.A").newInstance();
q和?nbsp;
A a = new A()Q?nbsp;
是一L效果?nbsp;
关于补充的问?nbsp;
{案是肯定的Qjvm会执行静态代码段Q你要记住一个概念,静态代码是和classl定的,class装蝲成功pC执行了你的静态代码了。而且以后不会再走q段静态代码了?/p>
Class.forName(xxx.xx.xx) q回的是一个类
Class.forName(xxx.xx.xx);的作用是要求JVM查找q加载指定的c,也就是说JVM会执行该cȝ静态代码段
动态加载和创徏Class 对象Q比如想Ҏ用户输入的字W串来创建对?nbsp;
String str = 用户输入的字W串
Class t = Class.forName(str);
t.newInstance();
在初始化一个类Q生成一个实例的时候,newInstance()Ҏ和new关键字除了一个是ҎQ一个是关键字外Q最主要有什么区别?它们的区别在于创建对象的方式不一P前者是使用cd载机Ӟ后者是创徏一个新cR那么ؓ什么会有两U创建对象方式?q主要考虑到Y件的可~、可扩展和可重用{Y件设计思想?nbsp;
Java中工厂模式经怋用newInstance()Ҏ来创建对象,因此从ؓ什么要使用工厂模式上可以找到具体答案?nbsp;例如Q?nbsp;
class c = Class.forName(“Example”);
factory = (ExampleInterface)c.newInstance();
其中ExampleInterface是Example的接口,可以写成如下形式Q?nbsp;
String className = "Example";
class c = Class.forName(className);
factory = (ExampleInterface)c.newInstance();
q一步可以写成如下Ş式:
String className = readfromXMlConfig;//从xml 配置文g中获得字W串
class c = Class.forName(className);
factory = (ExampleInterface)c.newInstance();
上面代码已经不存在Example的类名称Q它的优ҎQ无论ExamplecL么变化Q上qC码不变,甚至可以更换Example的兄弟类Example2 , Example3 , Example4……Q只要他们承ExampleInterface可以?nbsp;
从JVM的角度看Q我们用关键字new创徏一个类的时候,q个cd以没有被加蝲。但是用newInstance()Ҏ的时候,必M证:1、这个类已经加蝲Q?、这个类已经q接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,q个静态方法调用了启动cd载器Q即加蝲 java API的那个加载器?nbsp;
现在可以看出QnewInstance()实际上是把newq个方式分解Z步,即首先调用Class加蝲Ҏ加蝲某个c,然后实例化?nbsp;q样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灉|性,提供l了一U降耦的手段?nbsp;
最后用最单的描述来区分new关键字和newInstance()Ҏ的区别:
newInstance: q型。低效率。只能调用无参构造?nbsp;
new: 强类型。相寚w效。能调用Mpublic构造?/p>
<servlet-mapping> |
Servlet 2.5规范允许<servlet-mapping>?lt;url-pattern>子元素出现多ơ,之前的规范只允许一?lt;servlet-mapping>元素包含一?lt;url-pattern>子元素。我们看下面的例子:
<servlet-mapping> |
在配|了Servlet与URL样式之间的映后Q当Servlet容器接收C个请求,它首先确定该h应该由哪一个Web应用E序来响应。这是通过比较hURI的开始部分与Web应用E序的上下文路径来确定的。映到Servlet的\径是hURI减去上下文的路径QWeb应用E序的Context对象在去掉请求URI的上下文路径后,按照下面的路径映射规则的顺序对剩余部分的\径进行处理,q且在找到第一个成功的匚w后,不再q行下一个匹配?/font>
容器试着对请求的路径和Servlet映射的\径进行精匹配,如果匚w成功Q则调用q个Servlet来处理请求?/strong>
容器试着匚w最长的路径前缀Q以斜杠Q?Qؓ路径分隔W,按照路径树逐递减匚wQ选择最长匹配的Servlet来处理请求?/strong>
如果h的URL路径最后有扩展名,?jspQServlet容器会试着匚w处理q个扩展名的Servlet?/strong>
如果按照前面3条规则没有找到匹配的ServletQ容器会调用Web应用E序默认的Servlet来对hq行处理Q如果没有定义默认的ServletQ容器将向客L发送HTTP 404错误信息Q请求资源不存在Q?/font>
在部|描q符中,可以使用下面的语法来定义映射?/p>
?开始ƈ且以 /* l束的字W串用来映射路径Q例如:
<url-pattern>/admin/*</url-pattern> |
如果没有_匚wQ那么对/admin/路径下的资源的所有请求将由映了上述URL样式的Servlet来处理?/font>
?*. 为前~的字W串用来映射扩展名,例如Q?/strong>
<url-pattern>*.do</url-pattern> |
如果没有_匚w和\径匹配,那么对具?do扩展名的资源的请求将由映了上述URL样式的Servlet来处理?/font>
以一个单独的/指示q个Web应用E序是默认的ServletQ例如:
<url-pattern>/</url-pattern> |
如果Ҏ个请求没有找到匹配的ServletQ那么将使用Web应用E序的默认Servlet来处理?/font>
所有其他的字符被用于精匹配,例如Q?/font>
<url-pattern>/login</url-pattern> |
如果h/loginQ那么将由映了URL样式/login的Servlet来处理?/strong>
web.xml对应的servlet控制java改写Q?/span>
smvc-config.xml文g: