2011-04-18 40 views
1

我已經編寫了一個用於葉子批准的servlet。在這個servlet中,我也編寫了發送郵件的代碼。由於這個原因,它顯示HTTP 405錯誤。如果我刪除發送郵件的代碼,那麼它不會顯示錯誤,但我需要郵件代碼。405此方法不支持http方法獲取

package mis; 
import java.io.IOException; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.List; 
import java.util.Properties; 

import javax.jdo.PersistenceManager; 
import javax.mail.Message; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

import javax.jdo.Query; 
import com.google.appengine.api.users.UserService; 
import com.google.appengine.api.users.UserServiceFactory; 

public class approve extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws IOException { 

     try{ 



      HttpSession session = req.getSession(true);   

      PersistenceManager pm1 = PMF.get().getPersistenceManager(); 
     Query query1 = pm1.newQuery(Leave_bal.class); 
     query1.setFilter("emp_Id == emp"); 
     query1.declareParameters("String emp"); 
     List<Leave_bal> results1 = (List<Leave_bal>)query1.execute(session.getAttribute("emp_Id").toString()); 

     String plan=""; 
     String unplan=""; 

     String planleave_result="" ; 
     String unplanleave_result=""; 


     for (Leave_bal e : results1) 
     { 
      plan=e.getplan_leave(); 
      resp.getWriter().println("Planned_Leave"+plan); 

      unplan=e.getunplan_leave(); 
      resp.getWriter().println("Unplanned:"+unplan); 
     } 

     int plan_leave=Integer.parseInt(plan); 
     int unplan_leave=Integer.parseInt(unplan); 


     String ID=req.getParameter("id"); 
     resp.getWriter().println(ID); 
     PersistenceManager pm = PMF.get().getPersistenceManager(); 
     Query query = pm.newQuery(Leave_detail.class); 
    query.setFilter("id == ID"); 
    query.declareParameters("String ID");  
    List<Leave_detail> results = (List<Leave_detail>)query.execute(ID); 

    String plan_detail=""; 


    String duration=""; 
    for (Leave_detail e : results) 
    { 
    plan_detail=e.getLeave_Type(); 
    duration=e.getdurtn(); 
    //f=e.getfrom(); 
    //t=e.getto(); 
    } 

    resp.getWriter().println("duration "+duration); 
    resp.getWriter().println("Planned_selected "+plan_detail); 


     int duration_integer=Integer.parseInt(duration); 
     resp.getWriter().println("duration "+duration_integer); 


     //String duration=req.getParameter("date"); 
     // resp.getWriter().println("diffrence:"+duration); 
     //int workingdays=Integer.parseInt(duration);            

     //String Leave = req.getParameter("a"); 
     // resp.getWriter().println("planned:"+Leave); 

     if(plan_detail.equals("UNPLAN")) 
     {       
      unplan_leave=unplan_leave-duration_integer; 
      unplanleave_result=String.valueOf(unplan_leave); 
      planleave_result=plan; 
     resp.getWriter().println("Planned After Change"+unplanleave_result); 
      //st="Applied"; 

     } 
     if(plan_detail.equals("PLAN")) 
     { 
      plan_leave= plan_leave-duration_integer; 
      planleave_result=String.valueOf(plan_leave); 
     resp.getWriter().println("Planned After Change"+planleave_result); 
      unplanleave_result=unplan; 

     } 

     if(plan_detail.equals("LWP")) 
     { 
      plan_leave= plan_leave-duration_integer; 
      planleave_result=String.valueOf(plan_leave); 
      resp.getWriter().println("Planned After Change"+planleave_result); 
      unplanleave_result=unplan; 

     } 

     if(plan_detail.equals("Onduty")) 
     { 
      planleave_result=plan; 
      unplanleave_result=unplan; 

     } 




     Leave_detail status_update = pm.getObjectById(Leave_detail.class,ID); 
     status_update.setstatus("Approved"); 
     pm.makePersistent(status_update); 

     Leave_bal ed1=new Leave_bal(session.getAttribute("emp_Id").toString(),planleave_result,unplanleave_result); 

     pm.makePersistent(ed1); 



//code for mail 

     RequestDispatcher dispatcher = getServletConfig () .getServletContext().getRequestDispatcher("/MailServiceapply");   
     dispatcher.forward (req, resp) ; 

    pm.close(); 
    } 
      catch(Exception a) 
      { 
       resp.getWriter().println(a .getMessage()); 
      } finally{ 

      } 
      resp.sendRedirect("hr.jsp#LMS");   
     } 
} 
+1

能否請您發佈您收到的錯誤消息 – 2011-04-18 09:26:47

回答

1

This thread關於Java論壇提供了一些提示這個錯誤,就像

  • HTML表單調用POST操作和servlet沒有實現doPostdirect link
  • Inital HTML形式web.xml沒有聲明文件(或拼寫錯誤)(direct link
+0

直到無法正常工作 – aditi 2011-04-18 10:01:33

+0

對於我來說,我沒有在web.xml文件中的類名稱之前具有完全限定的包名稱。希望這可以幫助別人! – anon58192932 2014-08-21 00:41:07

1

在這個servlet的底部喲你就像將請求轉發到另一個servlet:

RequestDispatcher dispatcher = getServletConfig().getServletContext().getRequestDispatcher("/MailServiceapply"); 
dispatcher.forward(req, resp); 

這不僅是一個貧窮的做法,肯定是因爲你已經在servlet之前寫入數據到HTTP響應,因此你的風險IllegalStateException(寫入響應應該發生在JSP中),但是這樣做也要求所討論的servlet也實現了doGet()。您遇到的錯誤表明此郵件服務servlet僅實現了doPost()

您需要將doGet()方法添加到郵件服務servlet並使用RequestDispatcher#include()來調用它。

dispatcher.include(req, resp); 

不用說,這仍然是一個糟糕的做法。您更希望將郵件代碼邏輯重構爲獨立的Java類,然後您可以在這兩個servlet中導入和調用獨立的Java類,並將所有表示邏輯放入JSP中。

相關問題