I prefer PHP because it has fewer moving parts and does what I need it to do.
The problem with Java is that you are flooded with Java's frameworks and other frameworks, like Tomcat, that force a certain strait-jacket on you. What I've learned to do is collect light-weight "micro-frameworks" for dynamic languages that can be tossed, modified, or ignored as needed to get the job done. You date micro-frameworks, not marry them. They are a series of functions that one puts into an INCLUDE file.
Often I modify a copy for a particular application. This violates true factoring, but true factoring (aka pure reuse) for domain libraries has never worked right. The Ultimate Generic Thing ends up being an explosion of features needed to handle each blue-moon case like an idealistic feature packrat. It is easier to add niche features to a "core" sample than to try to have a shared version with every niche feature and a giant interface.
Some say microframeworks would not work in a bigger shop that needs to enforce a constistent rowing pattern as the whip is snapped to a rythm, and perhaps they are right. But I try to avoid big beurocratic shops for that reason. Java reflects it's targeted culture: Big tangled money lost in big tangled red-tape armies. I'll take lean and nimble frameworks with dynamic languages instead.