2011-04-18 90 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中。

相关问题