我有带注释的控制器的Spring3.0设置,当我从浏览器向它发送url时,它正在查找我的控制器并执行它。但是当用过滤器重写url时,我得到的结果与在浏览器中工作的完全相同
No mapping found for HTTP request with URI [/test/lookup]
. 过滤器由org.springframework.web.filter.DelegatingFilterProxy加载。
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.springframework.stereotype.Component;
@Component("urlLookupFilter")
public class UrlLookupFilter implements Filter {
private class ModifiedRequest extends HttpServletRequestWrapper {
private String mRequestURI;
private String mQueryString;
public ModifiedRequest(HttpServletRequest request) {
super(request);
}
@Override
public String getRequestURI() {
return mRequestURI;
}
public void setRequestUri(String s) {
this.mRequestURI = s;
}
@Override
public String getQueryString() {
return mQueryString;
}
public void setQueryString(String s) {
this.mQueryString = s;
}
}
public void init(FilterConfig filterConfig) throws ServletException {
throw new UnsupportedOperationException("Not supported yet.");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest oRequest = (HttpServletRequest) request;
if (oRequest.getRequestURI().endsWith("test")) {
ModifiedRequest mRequest = new ModifiedRequest(oRequest);
mRequest.setRequestUri(oRequest.getContextPath() + "/lookup");
mRequest.setQueryString(oRequest.getRequestURI().substring(oRequest.getContextPath().length()));
chain.doFilter(mRequest, response);
return;
}
chain.doFilter(request, response);
}
public void destroy() {
throw new UnsupportedOperationException("Not supported yet.");
}
}