开发者

405 http method get is not supported by this url

I have written a servlet for approval of leaves. In this servlet I have also written code to send a mail. Due to this, it shows HTTP 405 error. If I remove the code which sends a mail, then it does not show the error, but I need the mail code.

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


This thread on Java Forums provides some hints for this error, like

  • HTML form invokes POST operation and servlet doesn't implement doPost (direct link)
  • Inital HTML form not declared in web.xml file (or misspelled) (direct link)


At the bottom of this servlet you're forwarding the request to another servlet:

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

This is not only a poor approach, certainly because you've written data to the HTTP response before in the servlet and you thus risk IllegalStateException (writing to the response should take place in a JSP), but doing so also requires that the servlet in question also implements doGet(). The error which you're facing suggests that this mail service servlet has only the doPost() implemented.

You need to add a doGet() method to the mail service servlet and use RequestDispatcher#include() to invoke it.

dispatcher.include(req, resp);

Needless to say that this is still a poor approach. You'd rather like to refactor the mail code logic into a standalone Java class which you then import and invoke in both servlets and put all the presentation logic in a JSP.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜