Danger rooms are the easiest and fastest way to train these quickly. They're so effective that most everybody considers them exploits.
Please elaborate.
Dwarfs (and all other creatures) train certain skills when reacting to an attack, especially ones that train the stats mention in the OP. You can exploit this by constantly attacking them with frequent but basically harmless attacks in a controlled environment. You deliver those attacks by creating upright spikes loaded with training spears and some repeating trigger in a designated area.
Make a small room with a weapons rack, so you can designate it as a barracks, and a space for your squad to stand. 4x1 is sufficient for most people, 2x1 is the minimum, since dwarves will happily occupy the same square for training. I use 3x3 with a small alcove for the weapon rack as a bit of a handicap because I feel dirty having the dwarves crawl over each other while I mechanically poke them with sticks. Link the upright spikes to an external trigger, either a lever or some kind of repeater. Have the dwarfs train there while the trigger is active (easiest and fastest is to have the lever have a repeating 'pull lever' task, so idle dwarves will keep toggling it). Watch their skills sky-rocket, and the linked stats as well.
Even if you do it the way I do, which requires 90 training spears (a maximum of 10 spears per tile of upright spikes), this is a laughably cheap, quick and easy way to turn your dwarves into supermen. They'll still get slaughtered by nastier attackers (especially elite marksmen goblins) or megabeasts unless you equip them well. Just note that this room is certain death to pets and babies--a 'tightly closed' (not pet-accessible door) is a must, and I for one never recruit females into my military, not until they do something other with their babies than carry them around everywhere.