2015-12-01 28 views
0

Я знаю, что есть много сообщений с тем же именем, но я все еще не могу найти проблему. Я пытаюсь представить регистрационную форму с помощью сообщения, чтобы зарегистрировать пользователя в базе данных, но я получаю ошибку заголовка, когда я нажимаю кнопку отправки. Это, кажется, вызвано не имеяМетод HTTP POST не поддерживается этим URL-адресом, когда doPost переопределен

doPost(HttpServletRequest, HttpServletResponse) 

в классе будет вызван, но у меня есть тот, который почему я не могу видеть проблему.

Форма представляется находится в URL:/история/регистрация

<form method="post" action="RegisterHandler"> 
    <label>Username: <input type="text" name="desired_username" value="" size="10"></label><br><br> 
    <label>Password: <input type="password" name="desired_pass" value="" size="10"></label><br><br> 
    <input type="submit" name="commit" value="Register"> 
</form> 

On отправить URL-адрес становится/История/RegisterHandler. У меня есть диспетчер, который отображает этот URL-адрес в настоящий класс Registerhandler.

URL url = new URL(request.getRequestURL().toString()); 
String path = url.getPath(); 
String parts[] = path.split("/"); 
if(parts.length>2){ 
         if("story".equals(parts[2])){ 
           this.log(requestIp + ": " + "- User: Sean - Email: [email protected] - Accessed a story."); 
           new Story().doGet(request, response); 
         } else if ("about".equals(parts[2])){ 
           log(requestIp + ": " + "- User: Sean - Email: [email protected] - Accessed a the about page"); 
           about(request, out, cfg); 
         } else if ("default.css".equals(parts[2])){ //needed because dispatcher sends href to external stylesheet to the default page 
           defaultCss(request, out, cfg); 
         } else if ("register".equals(parts[2])){ 
           log(requestIp + ": " + "- User: Sean - Email: [email protected] - Accessed a the register page."); 
           register(request, out, cfg); 
         } else if ("RegisterHandler".equals(parts[2])){ 
           log(requestIp + ": " + "- User: Sean - Email: [email protected] - Accessed RegisterHandler"); 
           new RegisterHandler().doPost(request, response); 
         } else { 
           log(requestIp + ": " + "- User: Sean - Email: [email protected] - Accessed the default page"); 
           new Default().doGet(request, response); 
         } 

Диспетчерский работает во всех случаях, кроме случая RegisterHandler, который я предполагаю, из-за ошибки.

класса

RegisterHandler выглядит следующим образом:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
      cfg = new Configuration(Configuration.VERSION_2_3_22); 
      cfg.setDirectoryForTemplateLoading(new File("/home/ubuntu/jetty-distribution-9.3.3.v20150827/cse383base/webapps/Story")); 
      cfg.setDefaultEncoding("UTF-8"); 

      PrintWriter out = response.getWriter(); 
      try { 
        this.generatePage(request, out, cfg); 
      } catch (Exception e) { 
        e.printStackTrace(out); 
      } 
    } 

Я знаю, что если заявление в Dispatcher получает правильный URL от кнопки отправки, потому что любой другой URL будет просто перейти на страницу по умолчанию.

Кто-нибудь видит, почему он говорит, что URL-адрес не поддерживает POST?

ответ

1

Ключом является сообщение ...

HTTP method POST is not supported 

Это сообщение производится реализацией по умолчанию в javax.servlet.http.HttpServletdoPost(HttpServletRequest request, HttpServletResponse response).

См: https://github.com/jetty-project/codehaus-servlet-api/blob/servlet-3.0/src/main/java/javax/servlet/http/HttpServlet.java#L351-L361

Это означает, что URI запроса, который был выдан бьет сервлет, который не имеет void doPost(HttpServletRequest request, HttpServletResponse response) переопределены.

Что исследовать:

  • Что ваш URI запроса, как показано на стороне сервера? (наиболее важной частью будет URI.path)
  • Каков фактический сервлет, пораженный вашим клиентом?
  • Что говорит этот сервлет для своего звонка doPost()?