2017-07-26 62 views
-2

私はJAVA Mail APIを使用して電子メールを送信しようとしているこのコードを持っています。 Eclipseでこのコードを実行すると、「この行に複数の注釈が見つかりました:重複するローカル変数セッション」というエラーが表示されます。セッション変数を宣言したのはなぜですか?なぜこのエラーが出るのですか?ここに「重複するローカル変数エラー」が表示されるのはなぜですか?

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 {} 

これは私が使用しているサーブレットです。

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

すべてのコードを、JSPではなく、Javaソースファイルに置きます。 JSP内には、すでにセッションと呼ばれる暗黙のローカル変数があり、HTTPセッションを表しています。 JSPには、単一のJavaコード行しかないはずです。これらはビューコンポーネントであり、JSP EL、JSTL、およびその他のタグライブラリを使用してHTMLを生成するだけです。 –

+0

@JBニジェットありがとうございます。私は、JSPがJavaコードをほとんど持ってはいけないという事実を認識しています。しかし、サーブレットに電子メール送信コードをどこに置くかを決めることができないような混乱があったので、代わりに最終的なJSPにすべてを入れようとしました。私はこのコードをどこに置くことができるかわからないので、ユーザーが正しいデータを提出するとすぐに、彼/彼女はイミデーションの電子メールを受け取ります。 – New2Java

+0

さて、あなたのdoPost()メソッドのelseブロックからメールを送信するメトスを呼び出してください:これは、送信を処理するメソッド、送信が有効であることを知っている広告、そうですか? –

答えて

0

jspには、実際に使用できるinbuiltセッション変数があります。だからあなたはそれを再利用しているので、重複エラーが発生しています。

これは、サーブレットでSession session = request.getSession()を実行するのと同じです。

+0

あなたのコードは、実際にはJSPファイルにないサーブレットまたは別のJavaクラスに属しています。 JSPはUIの生成にもっと取り組むべきです。 –

+0

はい@Joey私はJSPがJavaコードで詰め込まれるべきではないという事実を認識しています。これはちょうど好奇心の外にあるので、私は電子メールを送信する方法を試してみましたので、私はそれをやっています。次回以降、私は別のクラスで自分のコードを保持します... btw任意の提案そのセッションを使用する方法?そのコードをどのように変更する必要がありますか? – New2Java

+0

このコードをすべてサーブレットクラスに入れて、セッションコードをそのまま使用できます。 –

関連する問題