2010-03-03 3 views

Répondre

32

Vous devez avoir une méthode doGet comme:

public void doGet(HttpServletRequest request, 
     HttpServletResponse response) 
throws IOException, ServletException 
{ 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 

    out.println("<html>"); 
    out.println("<head>"); 
    out.println("<title>Hola</title>"); 
    out.println("</head>"); 
    out.println("<body bgcolor=\"white\">"); 
    out.println("</body>"); 
    out.println("</html>"); 
} 

Vous pouvez voir this lien pour un simple servlet Bonjour tout le monde

+12

Il n'est pas recommandé de générer du code HTML à partir d'une servlet de cette manière. C'est un idiome vintage de 1998. Une meilleure solution serait d'utiliser un JSP. – duffymo

+2

Ou utilisez un framework/des outils comme dojo, GWT etc. et gardez le HTML côté client complètement séparé du code côté serveur. – saugata

+1

@duffymo: Mais parfois, dans certaines occasions, j'aimerais générer une réponse html en cours de la part de Servlet. Ne pas tout est adapté pour MVC. –

93

Normalement, vous réachemine la demande à un JSP pour l'affichage. JSP est une technologie de visualisation qui fournit un modèle pour écrire HTML/CSS/JS et peut interagir avec le code/les variables Java à l'aide de taglibs et EL. Vous pouvez contrôler le flux de page avec taglibs comme JSTL. Vous pouvez définir toutes les données dorsales en tant qu'attributs dans n'importe quelle demande, session ou application et utiliser EL (les choses ${}) dans JSP pour les afficher/les afficher.

exemple Coup d'envoi:

@WebServlet("/hello") 
public class HelloWorldServlet extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String message = "Hello World"; 
     request.setAttribute("message", message); // This will be available as ${message} 
     request.getRequestDispatcher("/WEB-INF/hello.jsp").forward(request, response); 
    } 

} 

Et /WEB-INF/hello.jsp ressembler à:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>SO question 2370960</title> 
    </head> 
    <body> 
     <p>Message: ${message}</p> 
    </body> 
</html> 

Lors de l'ouverture http://localhost:8080/contextpath/hello cela montrera

Message: Hello World

dans le navigateur.

Ceci empêche le code Java d'être encombré par HTML et améliore grandement la maintenabilité. Pour apprendre et pratiquer plus avec les servlets, continuez avec les liens ci-dessous.

Consultez également the "Frequent" tab of all questions tagged [servlets] pour trouver la foire aux questions.

+2

Est-ce encore une approche valable?J'entends toujours notre principal architecte dire de ne pas utiliser JSP du tout, mais je me demande comment créer tout le HTML? Créer chaque élément un par un par programmation? Cela prend probablement une éternité. – Timo

+2

@Timo: soit vous avez mal compris votre architecte, soit votre architecte doit lire http://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files, http: // stackoverflow. com/questions/2095397/quoi-est-la-différence-entre-jsf-servlet-et-jsp et http://stackoverflow.com/tags/servlets/info Si vous n'êtes toujours pas convaincu, lancez-vous et cherchez un autre projet. – BalusC

+0

ceci .... ceci devrait être marqué comme meilleure réponse! –