> I'm building a somewhat complex web app
I'm guessing that if you had a CL background the choice would be easy!
The answer also depends in part on what your app structure's going to be like.. some considerations:
A. Will you embed your UI logic in Lisp?
B. How interactive do you want your application to be?
C. How computationally intensive will it be?
D. Is horizontal scalability (ala swarmiji) important?
E. Will the application deal heavily with forms?
F. Do you want to use SQL, or go through an ORM? Or use objects directly? (eg (mapcar #'do-foo (all 'clients)))
> make it easy to deal with data in json and xml, and
cl-json has been very easy to use, with trivial mapping from lisp objects to json.
> allow me to generate html and javascript.
We use html-template. If you're using forms you'll have to decide where you want to put your validation logic. With html-template you'll probably end up rolling your own, or do it in javascript.
A big consideration may be that Clojure is much more strictly functional than CL. That may limit your coding flexibility (and be harder to adjust to if you come from an imperative-coding background).
IMHO going with CL will yield greater benefit with Slime and the debugger, related to dynamically responding to requests, debugger-tested programming etc.
Real-world Clojure programming seems to require a knowledge of java libraries. CL libraries have been available for everything we've wanted to do. Postmodern is probably faster, and more "native" than JDBC.
If you want to put your UI complexity in Lisp (as opposed to javascript) then check out Weblocks, which has many nice features, one of which is generating validations from the data-model. If you want to write a RESTy app then plain hunchentoot should serve just as well.
Have you checked out some of the Clojure/CL webcasts? They should give you a feel for the relative strengths and weaknesses of developing in both environments.