gpt4 book ai didi

java - 虚荣/花哨/重写 URL 实现并不糟糕

转载 作者:太空宇宙 更新时间:2023-11-04 07:47:34 27 4
gpt4 key购买 nike

我有一个网站,其 Vanity URL 模块实现得非常糟糕,并且在某些时间段的负载非常高。由于url模块存在一些bug,系统需要经常重启。所以,我想重写一个该死的模块,使其变得更好并且更少错误......

是否有一个好的模式来实现 Vanity URL 系统?

处理个性 URL 以获得高性能的最佳方法是什么?

查看源代码的最佳库是什么?

干杯。赤子

最佳答案

我不确定您的应用程序的具体实现细节,但作为一般草图,我会编写一个映射到感兴趣的 URL 空间(可能是 /*)的 Filter

这样的过滤器检查URL是否是一个奇特的URL,在这种情况下请求转发到适当的资源(URL调度程序或命名资源)。您需要保存传入 init(FilterConfig)filterConfig.getServletContext() 以便创建请求调度程序。如果 URL 不奇特,过滤器将调用 chain.doFilter(req, resp),然后提供非映射资源。

public class ExceptionFilter implements Filter {
private ServletContext servletContext;

public void destroy() {}
public void doFilter(ServletRequest req,
ServletResponse resp,
FilterChain chain)
throws IOException, ServletException {
String mapping = getMappingFor((HttpServletRequest)req);
if(mapping!=null) servletContext.getRequestDispatcher(mapping).forward(req,resp);
else chain.doFilter(req, resp);
}

public void init(FilterConfig filterConfig) throws ServletException {
this.servletContext = filterConfig.getServletContext();
}

private String getMappingFor(HttpServletRequest req) {...}

如何实现 getMappingFor 取决于应用程序,但它可能会打开与数据库的连接并询问 URL/foo/bar 是否已映射,如果没有映射则返回映射的 URL 或 null。如果已知映射不会更改,您可以缓存那些已检索到的映射。

您可以采用更详细的实现,例如根据给定的 URL 或数据库中的信息设置一些请求属性,然后将请求转发到某个知道要做什么的 servlet。

关于java - 虚荣/花哨/重写 URL 实现并不糟糕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15040793/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com