브라우저 주소 표시줄을 통해 URL을 입력하고 ?를 통해 매개변수를 전달하여 리소스를 요청하면 ? 뒤의 매개변수를 "쿼리 문자열"이라고 하며, 이는 직접 액세스하기 때문에 백그라운드 서블릿의 doGet()을 트리거합니다. 브라우저 주소창을 통한 방법은 GET 방식입니다.
폼의 메소드 속성이 매개변수 전달에 미치는 영향을 살펴보겠습니다.
원래 형식:
매개변수 정보: 쿼리 문자열
폼의 메소드 속성을 지정할 경우:
매개변수 정보: 양식 데이터
위 두 가지 방법의 응답은 새로 고침 후 현재 페이지를 표시하는 것입니다. 양식에 작업 속성이 지정되어 있지 않기 때문에 기본 제출 주소는 현재 페이지입니다.
이제 메소드 속성에 대해 자세히 알아보려면 action 속성을 지정하여 서블릿에 액세스하세요.
TestServlet.java 핵심 소스 코드:
@WebServlet("/servlet/TestServlet")
공용 클래스 TestServlet은 HttpServlet을 확장합니다. {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest 요청, HttpServletResponse 응답) throws ServletException, IOException {
response.getWriter().print("doGet()");
}
protected void doPost(HttpServletRequest 요청, HttpServletResponse 응답)은 ServletException, IOException을 발생시킵니다. {
response.getWriter().print("doPost()");
}
}
세 번째 경우: method="get" action="/test/servlet/TestServlet"
네 번째 사례: method="post" action="/test/servlet/TestServlet"
TestServlet.java get 매개변수 코드 추가:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String param = request.getParameter ("type");
response.getWriter().print("doGet() get type="+param);
}
protected void doPost(HttpServletRequest 요청, HttpServletResponse 응답) throws ServletException, IOException {
String param = request.getParameter("type");
response.getWriter().print("doPost() get type="+param);
}
다섯 번째 경우, method="get"은 액션 이후에 action = "/servlet/TestServlet?type=01" 매개변수를 전달하는 동시에 백그라운드 서블릿에서 매개변수를 가져옵니다
이때 브라우저 주소창 : http://localhost:8080/test/servlet/TestServlet?username=
백그라운드의 doGet()이 매개변수 유형을 가져오지 못하는 것을 확인할 수 있습니다.
동시에 "쿼리 문자열"에 유형 매개변수가 추가되지 않은 것으로 확인됩니다. "
6번째 경우, method="post"는 액션 뒤에 매개변수 action = "/servlet/TestServlet?type=01"을 전달하고, 동시에 백그라운드 서블릿의 시간
백그라운드의 doPost()가 매개변수 유형을 가져오는 것을 확인할 수 있습니다.
동시에 매개변수 열이 이전과 조금 다릅니다.
"쿼리 문자열"과 "양식 데이터"가 모두 있습니다
그래서 위의 내용은 우리에게 계시를 제공합니다. 즉, 양식의 작업 후에 매개변수를 전달할 때 양식의 method="post"를 수동으로 지정해야 합니다. 그렇지 않으면 우리는 get ?;
다음 매개변수에 도달할 수 없습니다. 오해: 브라우저 주소 표시줄의 url을 통해 매개변수를 전달하기 전에도 ?를 통해서였습니다. 이를 달성하기 위해 궁극적으로 doGet() 메서드를 호출하므로 (기본 메서드="get") 형식의 작업이 전달될 수 있다고 생각합니까? 오셔서 인삼을 전해 주세요.
최종 이유: (개인 요약) get 메소드에서 양식 데이터를 제출할 때 URL이 재구성됩니다. 양식 데이터를 "쿼리 문자열"로만 조합하여 지정된 항목에 제출합니다. 따라서 원래 ? 메소드를 통해 전달된 매개변수는 재구성 후 URL이 손실되므로 제출되지 않습니다.
그러나 양식이 게시 모드로 제출되면 양식 데이터와 ? 이후의 매개변수가 별도로 저장되고 양식의 작업에서 지정한 URL에 함께 제출됩니다.
(참조 리소스) HTML 양식: 왜 액션이 값을 얻을 수 없나요?
http://stackoverflow.com/questions/3548795/html-form-why-action-cant-have -가치 획득