resources just get sent off to the browser; jar resources get extracted into
temporary files, and those files' URLs get sent off to the browser.
I don't really like the handling of exceptions here, but I don't see a better
way around it. Trying to just declare hyperlinkUpdate() as throwing exceptions
fails because I'm overriding an abstract method that doesn't throw exceptions.
So, I need to throw a runtime exception when an exception happens; the stack
trace in the bug report shows that as the location of the exception so I
didn't want to just wrap all the code in the method in one big try/catch as
that reduces the information about where things broke. So, bunch of try/catch
blocks around related operations.