
簡單介紹我自己寫的MethodNameResolver和UrlHandlerMapping
PathMethodNameResolver,根據(jù)url取得調(diào)用MultiAction的方法名稱,比如/user/userAdd.action,就可以調(diào)用到id為user的類的userAdd的方法來處理action
package com.zgc.test.multiaction;
import javax.servlet.http.HttpServletRequest;
import org.sPRingframework.web.servlet.mvc.multiaction.MethodNameResolver;
import org.springframework.web.servlet.mvc.multiaction.NoSUChRequestHandlingMethodException;
public class PathMethodNameResolver implements MethodNameResolver {
public String getHandlerMethodName(HttpServletRequest request)
throws NoSuchRequestHandlingMethodException {
String uri=request.getRequestURI();
int begin = uri.lastIndexOf(’/’);
if (begin == -1) {
begin = 0;
}
else {
begin++;
}
int end;
if (uri.indexOf(";") != -1) {
end = uri.indexOf(";");
}
else if (uri.indexOf("?") != -1) {
end = uri.indexOf("?");
}
else {
end = uri.length();
}
String fileName = uri.substring(begin, end);
if (fileName.indexOf(".") != -1) {
fileName = fileName.substring(0, fileName.lastIndexOf("."));
}
return fileName;
}
}
DynamicUrlHandlerMapping,考慮到有的時(shí)候有非凡需求,所以就最后一個(gè)來指定方法,前面的來構(gòu)成beanname,如/admin/user/viewUser.action,就可以查找到adminUser這個(gè)id的類,然后調(diào)用viewUser這個(gè)方法。用到了lazy load而不是一開始就把所有的bean都放到工廠,有利于服務(wù)的啟動(dòng)速度(最近老是覺得這個(gè)煩),也可以不實(shí)例化一輩子都用不到的類(這種類可以刪除了)
package com.zgc.test.multiaction;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.servlet.handler.AbstractUrlHandlerMapping;
public class DynamicUrlHandlerMapping extends AbstractUrlHandlerMapping {
protected Object lookupHandler(String urlPath) {
Object handler = super.lookupHandler(urlPath);
if (handler == null) {
String[] paths=urlPath.split("/");
String beanName="";
for(int i=0;i<paths.length-1;i++){
beanName+=StringUtils.capitalize( paths[i]);
}
registerHandler(urlPath,StringUtils.uncapitalize(beanName));
handler=super.lookupHandler(urlPath);
}
return handler;
}
}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注