You can use JSTL for creating urls.
For example, <c:url value="/images/header.jpg" />
will prefix the context root.
With CSS, this usually isn’t an issue for me.
I have a web root structure like this:
/css
/images
In the CSS file, you then just need to use relative URLs (../images/header.jpg) and it doesn’t need to be aware of the context root.
As for JavaScript, what works for me is including some common JavaScript in the page header like this:
<script type="text/javascript">
var CONTEXT_ROOT = '<%= request.getContextPath() %>';
</script>
Then you can use the context root in all your scripts (or, you can define a function to build paths – may be a bit more flexible).
Obviously this all depends on your using JSPs and JSTL, but I use JSF with Facelets and the techniques involved are similar – the only real difference is getting the context root in a different way.