Ah now that is the ultimate question! You will get 101 responses no doubt but if your question is actually asking which of these technologies is probably best suited to making a database available then I would go for Mirroring every single time. Replication is fantastic for scaling of data, and improving availability of subsets of data.
If your question is what infrastructure can I put in place to aim towards 5 nines or better availability then I would start talking about Clustering, Virtualization and Peer to peer replication (last I'd only go for in SQL 2008 R2).
Going back to the Mirroring, for automatic failover you will need a witness server and your server name resolution will need to be addressed (one solution is that you can use failover partner in connection string).
See URL Database Mirroring