Yes, it is possible using mod_rewrite and an 'escape' rewrite map. See http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritemap
First, you need to define the rewrite map in your server or virtual host config, like this:
RewriteMap escaped int:escape
This creates a rewrite map named "escaped" that will translate special chars in the string to their hex encodings. You can use it like this ${escaped:text to escape}.
Next, you need to work up an appropriate set of rewrite rules to pass the information to your handler:
RewriteRule .* - [E=HT:http]
RewriteCond %{HTTPS} =on
RewriteRule .* - [E=HT:https]
RewriteRule .* %{ENV:HT}://myhost.com/app2/controller/?TARGET_URL=${escaped:%{ENV:HT}://%{HTTP_HOST}%{REQUEST_URI}?%{QUERY_STRING}}
The first three lines figure out whether you should use 'http' or 'https' in your final rewrite. The last line makes a go at putting the original URL through the escape rewrite map and sending it along to your servlet/handler.
This is a little complicated, since it tries to handle http and https. One problem is that it will always include the ?
char, even if the original request does not have a query string.
The last comment I have would be to suggest that you think about just proxying or using AJP to your servlet controller, which would make all this URL parameter manipulation unnecessary.