Google App Engine - 错误503_Service不可用

时间:2012-07-20 13:21:59

标签: java eclipse google-app-engine

我正在编写一个简单的gae webapp,它应该从表单发送一封电子邮件:

我编写了gae代码:

的index.html:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>A form</title>
 </head>
 <body>
 <form action="/feedback" method="post">

  <!-- Simple text field -->
 <label for="name">Name </label>
 <input type="text" name="name"/>
 <br/>

  <!-- Email -->
 <label for="email">Email </label>
 <input type="email" name="email"/>
 <br/>


  <!-- Textarea -->
 <label for="description">Description </label>
 <textarea  name="description" cols="50" rows="5">Type your comment here</textarea>
 <br/>


<input type="submit" name="submit" value="Send Request" action="/feedback"/>
 </form>
 </body>
</html>

的web.xml

<servlet>
    <servlet-name>FeedbackServlet</servlet-name>
    <servlet-class>at.wunderapps.servlets.FeedbackServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>FeedbackServlet</servlet-name>
    <url-pattern>/feedback</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

的servlet:

import java.io.IOException;
import java.util.Properties;

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.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
public class FeedbackServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        String name = req.getParameter("name");
        String description = req.getParameter("description");
        String email = req.getParameter("email");
        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);

        String msgBody = name  + description + email + " :EMAIL";

        try {
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress("apps@gmail.com",
                    "Es FUNKTIONIERT!!!"));
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress("my.mail@mail.com", "Your name"));
            msg.setSubject("Bestellung");
            msg.setText(msgBody);
            Transport.send(msg);

        } catch (Exception e) {
            resp.setContentType("text/plain");
            resp.getWriter().println("Something went wrong. Please try again.");
            throw new RuntimeException(e);
        }

        resp.setContentType("text/plain");
        resp.getWriter().println(
                "Thanks you for your feedback. An Email has been send out.");
    }
}

当我在做localhost时,我得到:

HTTP ERROR: 503

Problem accessing /. Reason:

    SERVICE_UNAVAILABLE

我得到的例外是:

  

java.lang.ClassNotFoundException:at.wunderapps.servlets

     

CRITICAL:javax.servlet.ServletContext log:不可用   javax.servlet.UnavailableException:at.wunderapps.servlets

     

20.07.2012 13:13:46 com.google.apphosting.utils.jetty.JettyLogger警告WARNUNG:失败的FeedbackServlet:java.lang.NullPointerException   20.07.2012 13:13:46 com.google.apphosting.utils.jetty.JettyLogger警告WARNUNG:上下文启动失败   com.google.appengine.tools.development.DevAppEngineWebAppContext@495c998a {/,C:\用户\桌面\ MailService的\战争}   显示java.lang.NullPointerException

我想问题可能是inde.html找不到我的servlet。但是为什么,因为web.xml似乎没问题?你能帮我吗?

PS:我在Windows 7上运行它。

1 个答案:

答案 0 :(得分:2)

<servlet-class>at.wunderapps.servlets.FeedbackServlet</servlet-class>  

如果这是servlet的完全限定名,那么FeedbackServlet.java文件的第一行应该是

package at.wunderapps.servlets;   

和FeedbackServlet.class文件应该在

<yourWebAppRootFolder>/WEB-INF/classes/at/wunderapps/servlets/FeedbackServlet.class   

或者,如果您将IDE用于IDE,则只需将代码放在

<yourWebAppRootFolder>/src/at/wunderapps/servlets/FeedbackServlet.java