나는이 HttpServletRequest
개체를.
이 호출이 내 서블릿에 도착하게하는 완전하고 정확한 URL을 어떻게 얻습니까?
또는 재생성 할 수있는 것 (매개 변수의 순서)이있을 수 있으므로 가능한 한 정확하게 작성하십시오.
답변
는 HttpServletRequest
다음과 같은 방법이 있습니다 :
getRequestURL()
-쿼리 문자열 구분 문자 앞에 전체 URL의 일부를 반환합니다.?
getQueryString()
-쿼리 문자열 구분 문자 뒤의 전체 URL 부분을 반환합니다.?
따라서 전체 URL을 얻으려면 다음을 수행하십시오.
public static String getFullURL(HttpServletRequest request) {
StringBuilder requestURL = new StringBuilder(request.getRequestURL().toString());
String queryString = request.getQueryString();
if (queryString == null) {
return requestURL.toString();
} else {
return requestURL.append('?').append(queryString).toString();
}
}
답변
이 방법을 사용합니다.
public static String getURL(HttpServletRequest req) {
String scheme = req.getScheme(); // http
String serverName = req.getServerName(); // hostname.com
int serverPort = req.getServerPort(); // 80
String contextPath = req.getContextPath(); // /mywebapp
String servletPath = req.getServletPath(); // /servlet/MyServlet
String pathInfo = req.getPathInfo(); // /a/b;c=123
String queryString = req.getQueryString(); // d=789
// Reconstruct original requesting URL
StringBuilder url = new StringBuilder();
url.append(scheme).append("://").append(serverName);
if (serverPort != 80 && serverPort != 443) {
url.append(":").append(serverPort);
}
url.append(contextPath).append(servletPath);
if (pathInfo != null) {
url.append(pathInfo);
}
if (queryString != null) {
url.append("?").append(queryString);
}
return url.toString();
}
답변
// http://hostname.com/mywebapp/servlet/MyServlet/a/b;c=123?d=789
public static String getUrl(HttpServletRequest req) {
String reqUrl = req.getRequestURL().toString();
String queryString = req.getQueryString(); // d=789
if (queryString != null) {
reqUrl += "?"+queryString;
}
return reqUrl;
}
답변
Spring 프로젝트에서 사용할 수 있습니다
UriComponentsBuilder.fromHttpRequest(new ServletServerHttpRequest(request)).build().toUriString()
답변
HttpUtil은 더 이상 사용되지 않습니다. 올바른 방법입니다.
StringBuffer url = req.getRequestURL();
String queryString = req.getQueryString();
if (queryString != null) {
url.append('?');
url.append(queryString);
}
String requestURL = url.toString();
답변
의 결과를 결합 getRequestURL()
하고하는 것은 getQueryString()
당신에게 원하는 결과를 얻을 수 있습니다.
답변
filter를 사용할 수 있습니다.
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
HttpServletRequest test1= (HttpServletRequest) arg0;
test1.getRequestURL()); it gives http://localhost:8081/applicationName/menu/index.action
test1.getRequestURI()); it gives applicationName/menu/index.action
String pathname = test1.getServletPath()); it gives //menu/index.action
if(pathname.equals("//menu/index.action")){
arg2.doFilter(arg0, arg1); // call to urs servlet or frameowrk managed controller method
// in resposne
HttpServletResponse httpResp = (HttpServletResponse) arg1;
RequestDispatcher rd = arg0.getRequestDispatcher("another.jsp");
rd.forward(arg0, arg1);
}
<dispatcher>FORWARD</dispatcher>
web.xml에 필터 매핑 을 넣는 것을 잊지 마십시오