java.net.uri如何解析相对uri?

bbuxkriu  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(422)

我有一个java应用程序,在tomcat中运行一个登录机制。当用户单击“注销”时,应用程序应该将其重定向回登录页面。因此,当用户单击“注销”时,将调用端点/注销,执行注销逻辑,然后将用户重定向回登录页面。

@GET
@Path("logout")
@Produces(MediaType.TEXT_HTML)
public Response logOut(@Context HttpServletRequest request) throws URISyntaxException {
    // logout logic omitted
    Response.ResponseBuilder response = Response.seeOther(new URI("../jsp/login.jsp"));
    return response.build();
}

当我在本地机器上测试时,一切正常。相对路径“./jsp/login.jsp”被转换为http://localhost:8080/myapplication/jsp/login.jsp. 然而,在生产系统上,url的授权部分不是生产系统的地址,而是http://localhost:7080/myapplication/jsp/login.jsp.
这就是为什么我想问java.net.uri如何解析相对url?在文档中,它说“如果指定,层次uri的授权组件是基于服务器或基于注册表的。”这是什么意思?在我的tomcat中是否有我或我的同事设置了错误主机的文件?我感谢所有的建议,帮助我从哪里开始寻找这个问题的原因。

dxpyg8gm

dxpyg8gm1#

javadoc URI.resolve(URI) 他说:

public URI resolve(URI uri)

根据此uri解析给定uri。
因此,您的问题的答案是servlet基础结构正在针对其他uri解析“./jsp/login.jsp”。您在代码中创建的uri将是上面代码中的“给定uri”。
它针对哪个uri进行解析?
看起来它是当前上下文的基本uri。
但归根结底,决定解决问题的不是java。正是webapp框架和/或tomcat在起决定作用。这就是你应该寻找对你所看到的东西的解释的地方。

相关问题