PITTSBURGH -- The only real drama -- if it could be called that -- Thursday night at Heinz Field was who would make the better impression in the competition to be the Pittsburgh Steelers' third-string quarterback.
That's the way the last games of the preseason usually go in the NFL.
Rookie free agent Jarrod Johnson made his bid to back up Ben Roethlisberger and Byron Leftwich by throwing a game-winning 6-yard touchdown pass to Weslye Saunders with 7:23 left to lift the Steelers to a 17-16 victory over the Carolina Panthers.
The touchdown capped a 10-play, 89-yard drive and gave the Steelers three straight wins to finish the preseason 3-1. Johnson played the second half and completed 7 of 10 passes for 78 yards and the one touchdown.
"I feel I put the team in position to win in the games I played in, and that's all I can ask of myself in my first NFL camp," Johnson said. "I believe I can play in this league, but the decision is out of my hands."
Saunders, a second-year tight end, was suspended for four games by the NFL during the offseason for testing positive for a performance-enhancing drug. He will not be allowed to play in the regular season until Oct. 11 at Tennessee.
Charlie Batch, the 15-year veteran quarterback, played the first half for the Steelers and was 11 of 14 for 102 yards and one touchdown.
"I believe I'll be in the meeting Monday morning getting ready for the opener," Batch said. "I feel I showed that if I'm needed to go in the game that we can move the ball and the rest of the guys can count on me. I've been in this situation before where it's been unsettled and the competition has been really fierce in this camp, but I'm confident I will make the team."
Carolina (2-2) scored with 2:31 to go when third-stringer Jimmy Clausen threw a 79-yard pass to Lamont Bryant to draw within 17-16. However, the Panthers missed a two-point conversion as Clausen's pass attempted for Bryant was incomplete.
Carolina had another chance to win the game, but Justin Medlock's 50-yard field goal attempt was wide right with 32 seconds left. Medlock beat out veteran Olindo Mare for the Panthers' kicking job.
"I think we learned that we got some young guys that will fight and give us a chance at the end of the game," Carolina coach Ron Rivera said. "We learned that some of our guys will step up when called upon, and I'm pretty excited going forward."
Pittsburgh quarterback Ben Roethlisbeger didn't play, and neither did Carolina's Cam Newton.
Derek Anderson, Newton's primary backup, was 8 of 18 for 91 yards.
Panthers fourth-string running back Armond Smith rushed for 85 yards on 16 carries. Third-stringer Jonathan Dwyer topped the Steelers with 63 rushing yards on 13 carries.
Batch helped the Steelers take a 10-3 halftime lead.
The Steelers scored on the game's initial possession as Emmanuel Sanders made a diving 37-yard catch in the end zone of a pass by Batch. The drive covered 80 yards in five plays.
Pittsburgh increased its lead to 10-0 when Shaun Suisham kicked a 49-yard field goal with 41 seconds left in the first quarter.
Thursday's game was the Steelers' last dress rehearsal under new offensive coordinator Todd Haley before the regular season.
"We feel really good," Sanders said of the offense. "Every day we practice, we get better and better. Everyone can feel it. Coach Haley is learning his personnel better and we are starting to click. The sky is the limit. We have an exceptional amount of talent."
Medlock kicked a 31-yard field goal with 8:18 to go in the second quarter.
The Steelers were pleased that their defense did not allow any first-half touchdowns.
"Our communication has definitely improved," linebacker Larry Foote said. "We've worked hard toward putting the whole package together and executing as a team."
Clausen led Carolina on a 10-play, 87-yard scoring drive to start the second half and capped it by throwing a 3-yard touchdown pass to Jared Green.
NOTES: Pittsburgh rookie running back Chris Rainey had two punt returns for touchdowns in the first quarter, covering 78 and 90 yards, but both were called back because of holding penalties, on defensive backs Will Allen and Ryan Mundy. ... Pittsburgh rookie linebacker Sean Spence, a third-round draft pick, was carted off in the fourth quarter with a knee injury. ... It marked the 10th straight season the Steelers and Panthers met in the preseason finale. ... The Steelers open the regular season Sept. 9 with a night game at Denver, while Carolina opens that afternoon at Tampa Bay.