今天在做乙個專案的時候遇到了乙個很奇怪的問題,這個專案的一部分是之前用servlet寫的,但是後邊打算用struts寫,再加入struts框架配置後發現原先的那部分不能正常訪問了,之前沒這麼做過所以很納悶,struts2配置自認為寫的很熟了,應該沒什麼問題啊,struts.xml檔案改了又改還是找不到錯誤,後來在看到web.xml時突然眼前一亮。。
原來是所有的請求都被struts2攔截了,struts2把servlet當成action了,因為servlet和action都是沒有字尾的。很是悲劇,要想使servlet和struts各司其職只能是限制struts的攔截範圍了,
這裡在struts.xml的配置裡邊加乙個這個就可以限制struts只攔截action型別的請求了,當然在發起請求時也是要寫清楚http://***/xx.action了這個action就不能向之前那樣省掉了。下面給出網上的幾種方法:方式一:修改servlet的相關配置,統一在servlet後面加上「.servlet」1.修改web.xml配置檔案形如:
jqueryajaxservlet
com.clzhang.sample.struts2.servlet.jqueryajaxservlet
jqueryajaxservlet
/servlet/jqueryajax.servlet
2.修改呼叫servlet的地方,形如:
......
$.ajax(
public void dofilter(servletrequest req, servletresponse resp,
filterchain chain) throws ioexception, servletexception else
// 第二種方式 (二選 一)
/**if (this.includes.contains(target)) else */}
private arraylist includes = new arraylist();
public void init(filterconfig config) throws servletexception
}2.修改web.xml,類似如下格式:
<?xml version="1.0" encoding="utf-8"?>
redisp
com.clzhang.sample.struts2.filterservlet
redisp
/*struts2
org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter
struts2
/*jqueryajaxservlet
com.clzhang.sample.struts2.servlet.jqueryajaxservlet
jqueryajaxservlet
/servlet/jqueryajax
jsonviewservlet
com.clzhang.sample.struts2.servlet.jsonviewservlet
jsonviewservlet
/servlet/jsonview
index.jsp
index.html
注意,redisp必須放置於struts2之前,這樣才能夠保證它們能夠按照正常的順序處理,否則會出錯。
struts2動態方法呼叫訪問servletAPI
struts2動態方法呼叫 動態方法呼叫 在struts2中動態方法呼叫有三種方式,動態方法呼叫就是為了解決乙個action對應多個請求的處理,以免action太多 第一種方式 指定method屬性 這種方式我們前面已經用到過,類似下面的配置就可以實現 redirect web inf jsppag...
struts2概述與框架搭建
一開始學習struts2比較好奇的應該是為什麼會叫 2吧,查了一下,之前有大神寫了乙個struts1,但是是基於servlet的,我們知道servlet有他的限制,而另乙個小組開發了乙個叫webwork的框架,兩個人商量一下把對方的整合在一起,但畢竟struts的作者名聲大,所以沿用了struts的...
Struts2驗證框架
action配置中一定要設定input返回頁面 新增驗證只要建立驗證的xml檔案 在action同包下,建立 action類名 validation.xml 如 validateaction建立validateaction validation.xml 注意 1.要驗證的方法不能叫input.2.這...