405 http метод get не поддерживается этим URL - PullRequest
1 голос
/ 18 апреля 2011

Я написал сервлет для утверждения листьев.В этом сервлете я также написал код для отправки почты.Из-за этого он показывает ошибку HTTP 405.Если я удаляю код, который отправляет письмо, то он не показывает ошибку, но мне нужен почтовый код.

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");        
        }
}

Ответы [ 2 ]

1 голос
/ 19 апреля 2011

В нижней части этого сервлета вы пересылаете запрос другому сервлету:

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

Это не только плохой подход, конечно, потому что вы ранее записали данные в ответ HTTP вservlet, и вы рискуете IllegalStateException (запись в ответ должна осуществляться в JSP), но для этого также необходимо, чтобы в рассматриваемом сервлете также был реализован doGet().Ошибка, с которой вы столкнулись, предполагает, что в этом сервлете почтовой службы реализован только doPost().

Вам необходимо добавить метод doGet() в сервлет почтовой службы и использовать RequestDispatcher#include() для его вызова.

dispatcher.include(req, resp);

Само собой разумеется, что это все еще плохой подход.Вы бы предпочли реорганизовать логику почтового кода в отдельный Java-класс, который затем импортируется и вызывается в обоих сервлетах и ​​помещает всю логику представления в JSP.

1 голос
/ 18 апреля 2011

Эта тема на форумах Java содержит некоторые подсказки для этой ошибки, например

  • HTML-форма вызывает операцию POST, а сервлет не реализует doPost ( прямая ссылка )
  • Начальная HTML-форма не объявлена ​​в web.xml файле (или написана с ошибкой) ( прямая ссылка )
...