I agree that danger rooms are clearly an exploit, there are other ways that are arguably 'like cheating' in that you have a high probability of success but dangerous are clearly a problem with the coding, thus an exploit (as opposed to walling yourself in, or creating a thin passage over a deep pit and making your enemies fall in, etc).
As for me, make one way in (I don't wall off, but I will made a bottleneck three squares wide), when the enemy comes I try to get hammer and axe dwarves up front and some archers behind, chaos breaks out quickly but if your dwarves respond fast you can pull it off.
Also for armor helmets and shields seem to be the key. SHields are great for blocking arrows and weapons and stunning the enemy, and it seems most of my dwarves who are killed die from having their skull smashed and bones entering the brain, so having a helmet will help protect that. Obviously 'full steel' is a general armor advice but you are low on metal and/or need to prioritize I'd go with helmets and shields first.
If you've built walls on the surface you can also have your achers on the walls and have your melee dwarves meet the enemy in the chokepoint so they are getting hit with arrows from all sides while the melee dwarves hold the line.
That is a good way to block enemies using pure military, once you get into traps (some traps are fine, but using too many, like spamming stone fall or cage traps, and you don't really even 'have' a battle) and walling in and of course exploits like danger rooms things get a lot easier but, IMO at least, far less fun.