sti*_*vlo 18 java servlets spring-mvc
我想从Controller中找到Spring中webapp的绝对URL.我知道JSTL c:url,但我需要来自Controller内部的这些信息.
@Controller
public class AuthorizeController {
@Autowired
private Authorizer auth;
@RequestMapping("/auth")
public String sendToAuthorization() {
String baseUrl = "http://localhost:8080/tasks/";
return "redirect:" + auth.getAuthorizationUrl(baseUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,baseUrl是硬编码的,我可以通过Spring配置将它提供给Authorizer类,但我确信可以在Controller中从Spring获取此信息.我试图google"spring mvc url"并找不到解决这个问题的方法.
Bor*_*hov 30
我认为只有在处理请求时才能获得绝对 URL,因为您的服务器可能有许多IP地址和域名.
@RequestMapping("/auth")
public String sendToAuthorization(HttpServletRequest request) {
String baseUrl = String.format("%s://%s:%d/tasks/",request.getScheme(), request.getServerName(), request.getServerPort());
return "redirect:" + auth.getAuthorizationUrl(baseUrl);
}
Run Code Online (Sandbox Code Playgroud)
至于servlet,它在web.xml中也可能有几个映射.
PS无论如何,在运行时解析url对我来说并不是一个好主意.
bim*_*api 10
这个答案很晚,但如果你不想将servlet对象推入方法签名,那么Boris的答案的一个变体就是RequestContextHolder从实用程序类/方法中使用.这也将提供抽象回退逻辑的能力(例如,从属性文件中提取).俗气的例子:
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if(null != requestAttributes && requestAttributes instanceof ServletRequestAttributes) {
HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
// build URL from request
}
else {
// fallback logic if request won't work...
}
Run Code Online (Sandbox Code Playgroud)
这假设您已org.springframework.web.context.request.RequestContextListener注册为听众web.xml
| 归档时间: |
|
| 查看次数: |
36162 次 |
| 最近记录: |