In front of over 60,000 fans, Thierry Henry proved the matchwinner for Barca, nodding home minutes before halftime. But it was Messi and Lopez who emerged as the game's two outstanding players.
Messi enjoyed a superb match out of midfield, but was undone midway through the second-half when his penalty was wonderfully saved by former Real Madrid keeper Lopez.
Pascal Cygan saw red for Villarreal immediately after Henry had put the hosts ahead.
"We dominated all game, although the result was close. We experienced that anxiety in the second-half because we could not get the second goal," said Barca coach Frank Rijkaard afterwards.
"The dismissal didn't have much difference. Even with ten men, Villarreal still ran more than us. I won't comment on the red card, though I know there are complaints."