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.
精彩评论