我有一个网站,实施的虚假URL模块非常糟糕,并且在某些时间段内负载非常高。由于url模块中存在一些错误,系统需要经常重启。所以,我想重写一个血腥的模块,使它变得更好,减少错误......
实施虚荣URL系统是否有良好的模式?
处理虚荣URL以获得高性能时,最好的方法是什么?
查看来源的最佳图书馆是什么?
干杯。 AKO
答案 0 :(得分:1)
我不确定您的应用程序的具体实现细节,但作为一般草图,我会写一个Filter
映射到感兴趣的URL空间(也许/*
)。
此类Filter
将检查网址是否为花哨,在这种情况下 forward
对适当资源的请求( URL调度程序或命名的调度程序)。您需要保存filterConfig.getServletContext()
中传递的init(FilterConfig)
才能创建请求调度程序。如果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。