未提交错误500响应

时间:2015-08-02 10:05:30

标签: java jsp servlets httpresponse requestdispatcher

我正在尝试向我的jsp页面发送请求,即制造商详细信息并通过会话获取属性,但它会引发500错误。

    package com.osahub.disaster.controller;
    import java.io.IOException;

    import static com.osahub.disaster.controller.Ofymethodadmin.ofy;

    import java.io.PrintWriter;
    import java.util.Iterator;
    import java.util.List;

    import javax.servlet.ServletException;
    import javax.servlet.http.*;

       import com.osahub.disaster.controller.SendMail;

        @SuppressWarnings("serial")
         public class admin extends HttpServlet {
        public void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws IOException, ServletException {
            resp.setContentType("text/plain");
            resp.getWriter().println("Data Saved!");

        PrintWriter out = resp.getWriter();

        String name= req.getParameter("name");
        String address = req.getParameter("address");
        String email = req.getParameter("email");
        String website = req.getParameter("website");
        String topex = req.getParameter("topex");
        String topdes = req.getParameter("topdes");
        String topmob = req.getParameter("topmob");
        String year = req.getParameter("year");
        String brand = req.getParameter("brand");
        String factory = req.getParameter("factory");
        String sector = req.getParameter("sector");
        String contactpername = req.getParameter("contactpername");
        String contactperdes = req.getParameter("contactperdes");
        String contactpermob = req.getParameter("contactpermob");

        HttpSession currentSession=req.getSession();
        currentSession.setAttribute("name", name);
        req.getRequestDispatcher("ManufacturerDetails.jsp").forward(req, resp);


        SendMail mail = new SendMail();
        mail.send(email, "send Test mail from gae" , "this is the mail body");



        ManufacturerDetails ad = new ManufacturerDetails(name,address,email,website,topex,topdes,topmob,year,brand,factory,sector,contactpername,contactperdes,contactpermob);
        ofy().save().entity(ad);
        ofy().clear();

        List<ManufacturerDetails> li = ofy().load().type(ManufacturerDetails.class).list();
        Iterator<ManufacturerDetails> iter = li.iterator();

        while(iter.hasNext())
        {
            ManufacturerDetails ad1 = iter.next();
            System.out.println(ad1.getName());
            System.out.println(ad1.getAddress());
            System.out.println(ad1.getEmail());
            System.out.println(ad1.getWebsite());
            System.out.println(ad1.getTopex());
            System.out.println(ad1.getTopdes());
            System.out.println(ad1.getTopmob());
            System.out.println(ad1.getYear());
            System.out.println(ad1.getBrand());
            System.out.println(ad1.getFactory());
            System.out.println(ad1.getSector());
            System.out.println(ad1.getContactpername());
            System.out.println(ad1.getContactpermob());
            System.out.println(ad1.getContactperdes());

        }
    resp.sendRedirect("about.jsp");


    }
    }

2 个答案:

答案 0 :(得分:1)

HTTP状态代码500的响应可能由任何异常引起。

但是,在您的情况下看起来会抛出异常,因为您在window.location.href='#' or window.location.href='' 之后调用了resp.sendRedirect("about.jsp");

你不能这样做,因为一旦对req.getRequestDispatcher("ManufacturerDetails.jsp").forward(req, resp);的调用完成,就会提交响应。但是,这并不意味着forward()方法返回控制权,而是继续执行。因此,doPost()会导致resp.sendRedirect("about.jsp");异常被抛出,因为响应已经关闭。

您必须检查您的方法,并引入条件语句:

java.lang.IllegalStateException

另一种选择是在if (condition) { // do something req.getRequestDispatcher("ManufacturerDetails.jsp").forward(req, resp); } else { // do something resp.sendRedirect("about.jsp"); } 之后引入明确的return

答案 1 :(得分:0)

由于服务器问题,发生了500异常。这是因为你可以写两个代码 - getRequestDispatcher和sendRedirect for execute。这是不可能的。你不能这样做,因为一旦发送请求参数后它就会终止。所以你可以用if-else条件写两个代码。