2017-07-26 4 views
-2

Ich habe diesen Code, wo ich versuche, eine E-Mail mit JAVA Mail API zu senden. Wenn ich diesen Code in Eclipse ausführe, erhalte ich den Fehler "Mehrere Anmerkungen gefunden in dieser Zeile: Duplicate local variable session". Ich habe die Sitzungsvariable nur einmal deklariert, warum bekomme ich diesen Fehler?Warum bekomme ich "Duplicate local variable error" hier?

try{ 
    String host="smtp.gmail.com"; 
    String to="[email protected]"; 
    final String user="[email protected]"; 
    final String password="*********"; 
    Properties properties = System.getProperties(); 
    properties.setProperty("mail.smtp.host",host); 
    properties.put("mail.smtp.auth", "true"); 

    Session session = Session.getDefaultInstance(properties, 
    new javax.mail.Authenticator() { 
    protected PasswordAuthentication getPasswordAuthentication() { 
    return new PasswordAuthentication(user,password); 
    } 
    }); 
    MimeMessage message = new MimeMessage(session); 
    message.setFrom(new InternetAddress(user)); 
    message.addRecipient(Message.RecipientType.TO, 
          new InternetAddress(to)); 

    message.setSubject("Thank you subscriber"); 
    message.setContent("<table><tr><td>Name</td><td>+name+</td></tr><tr><td>Address</td><td>+Addr+</td></tr><tr><td>Age</td><td>+age+</td></tr><tr><td>Qualification</td><td>+Qual+</td></tr><tr><td>Percentage</td><td>+Persent+</td></tr><tr><td>Passout</td><td>+Year+</td></tr></table>","text/html"); 

    Transport.send(message); 
    System.out.println("message sent...."); 
} 
catch (MessagingException ex) {ex.printStackTrace();} 
finally {} 

Dies ist mein Servlet, das ich benutze.

package com.registration; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class RegistrationController 
*/ 
public class RegistrationController extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public RegistrationController() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 

     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     String name = request.getParameter("fullname"); 
     String Addr = request.getParameter("address"); 
     String age = request.getParameter("age"); 
     String Qual = request.getParameter("qual"); 
     String Persent = request.getParameter("percent"); 
     String Year = request.getParameter("yop"); 
     if(name.isEmpty()||Addr.isEmpty()||age.isEmpty()||Qual.isEmpty()||Persent.isEmpty()||Year.isEmpty()) 
     { 
      RequestDispatcher rd = request.getRequestDispatcher("registration.jsp"); 
      out.println("<font color=red>OOPS!! YOU MISSED OUT SOME FIELDS. FILL THEM AGAIN</font>"); 
      rd.include(request, response); 
     } 
     else 
     { 
      RequestDispatcher rd = request.getRequestDispatcher("home.jsp"); 
      rd.forward(request, response); 
     } 
    } 


} 
+2

Setzen Sie den gesamten Code in eine Java-Quelldatei, in die er gehört, und nicht in eine JSP. In einer JSP gibt es bereits eine implizite lokale Variable namens session, die die HTTP-Sitzung darstellt. JSPs sollten keine einzige Zeile Java-Code haben. Sie sind View-Komponenten und sollten daher nur HTML erzeugen, indem sie JSP EL, JSTL und andere Tag-Bibliotheken verwenden. –

+0

Danke @JB Nizet. Ich bin mir der Tatsache bewusst, dass JSP JAVA-Codes NIEMALS haben sollte. Aber da ich verwirrt war, konnte ich nicht entscheiden, wohin ich den E-Mail-Sendecode in das Servlet schreiben sollte, stattdessen versuchte ich, dies alles in die endgültige JSP zu schreiben. Ich bin nicht sicher, wo ich diesen Code setzen kann, so dass, sobald Benutzer korrekte Daten übermittelt, er/sie eine sofortige E-Mail erhält. – New2Java

+0

Nun, rufen Sie die Methos Senden der E-Mail aus dem Else-Block Ihrer doPost() -Methode: Das ist die Methode, die die Einreichung, Anzeige, wo Sie wissen, die Einreichung ist gültig, richtig? –

Antwort

0

jsp hat eine integrierte Sitzungsvariable, die Sie tatsächlich verwenden können. Also, da Sie es wiederverwenden, erhalten Sie den doppelten Fehler.

Dies entspricht der Ausführung von Session session = request.getSession() in einem Servlet;

+0

Ihr Code gehört in ein Servlet oder eine separate Java-Klasse eigentlich nicht in einer JSP-Datei. JSP sollte sich mehr mit der Erstellung der Benutzeroberfläche befassen. –

+0

Ja @Joey Ich bin mir dieser Tatsache bewusst, dass JSP nicht mit Java-Codes gefüllt werden sollte. Da dies nur aus Neugier ist, habe ich versucht, einen Versuch zu machen, wie man eine E-Mail sendet, also mache ich es gerade. Beim nächsten Mal werde ich meinen Code in einer anderen Klasse aufbewahren ... Übrigens: Wie kann ich diese Sitzung nutzen? Wie sollte ich diesen Code ändern? – New2Java

+0

Setzen Sie den gesamten Code in eine Servlet-Klasse und verwenden Sie den Session-Code wie er ist. –

Verwandte Themen