2016-09-04 1 views
-2

Java EE 및 Maven을 배우고 있으며 간단한 dopost.but을 시도하고 있습니다. (HTTP 메서드 POST가이 URL에서 지원되지 않습니다.) 문제점이 될 수 있습니다. login .JSPHTTP 메서드 POST가이 URL에서 지원되지 않는 이유

<form action="/login" method="post" > 
<div class="login-container less"> 
    <div class="well-login"> 
     <div class="control-group"> 
      <div class="controls"> 
       <div> 
        <input type="text" placeholder="Username or Email" class="login-input user-name"> 
       </div> 
      </div> 
     </div> 
     <div class="control-group"> 
      <div class="controls"> 
       <div> 
        <input type="password" placeholder="Password" class="login-input user-pass"> 
       </div> 
      </div> 
     </div> 
     <div class="clearfix"> 
      <button class="btn btn-inverse login-btn" type="submit" value="submit">Login</button> 
     </div> 
     <div class="remember-me"> 
      <input class="rem_me" type="checkbox" value=""> Remeber Me 
     </div> 
    </div> 
</div> 
</form> 

로그인 서블릿

package webapp; 

import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@WebServlet(urlPatterns = "/login") 
public class LoginServlet extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response); 
    } 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     super.doPost(request, response); 
     response.getWriter().println("success"); 
    } 
} 

오류가 어디에서 오는 볼 수없는 이유는 무엇입니까? 모든 것은 내 옆에 SOS에서 oky 것

답변

0

web-inf 폴더 안에 페이지가있을 때 Http 액세스로부터 보호해야하는 리소스는 WEB-INF 아래에 배치되고 필터는 직접 액세스를 막기 위해 (jsp/html/.doc/.txt/xml)보기에 첨부됩니다.

) (

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
    response.getWriter().println("<h1>success</h1> "); 
    request.getServletContext().getRequestDispatcher("/WEB-INF/views/login.jsp").include(request, response); 
} 

당신의 doPost 내부 super.doPost(request, response);의 오버라이드 (override) 제거 지금의 doGet()

request.getServletContext().getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response); 

내부 getServletContext()을 사용하고 실 거예요 doPost() 방법에서 다른 페이지를 탐색 할 수 있기 때문에 그래서 include() 방법을 사용 또한 <form action="login" method="post" > 로그인에서 "/"를 제거하십시오.

3

이 줄 삭제 : HttpServlet 기본 클래스의 doPost 방법은 무조건 HTTP에 대한 HTTP 1.1, 400 HTTP 오류 (405을 반환 구현

super.doPost(request, response); 

을 1.0). doGet, doPutdoDelete은 모두 동일한 방식으로 구현됩니다.

서블릿에서 POST 요청을 지원하려면 doPost을 무시하고 수퍼 클래스 메서드를 호출하지 마십시오.

+0

당신은 오버라이드에 대해 조금 더 설명 할 수 있습니까? uper.doPost (request, response); HTTP 405 오류가 발생합니까? –

+1

@ B'bekShakya : 나는 당신의 질문을 완전히 이해하지 못합니다. '왜 수퍼 클래스 메소드가 HTTP 오류 405를 발생 시키는가'라는 질문은 구현자가이를 선택했기 때문에 대답이됩니다. Tomcat의 HttpServlet 구현 [here] (http://svn.apache.org/repos/asf/tomcat/trunk/java/javax/servlet/http/HttpServlet.java)을 참조하십시오. 내가 말할 수있는 한, [HttpServlet javadoc] (http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServlet.html)은 기본 클래스 메소드가해야 할 일을 말하지 않는다. . –

+0

선생님, 고맙습니다. 후드 아래 기본 클래스 메소드에 대해 정리하고 싶습니다. 당신이 말했듯이, 그 문서는 정말로 저를 제공하지 않습니다. –

관련 문제