이것을 달성하는 데는 여러 가지 방법이 있습니다.
아마도 가장 쉬운 방법은 JavaScript를 사용하여 양식의 동작을 변경하는 것입니다.
<input type="submit" value="SecondServlet" onclick="form.action='SecondServlet';">
그러나 이것은 최종 사용자가 JS를 사용할 수없는 경우 (모바일 브라우저, 스크린 리더 등)에는 물론 작동하지 않습니다.
또 다른 방법은 다른 형태로 두 번째 버튼을 넣어되는 수도 있고 당신이 모든 질문에서 명확하지 않다 구체적인 기능 요구 사항에 따라, 필요하지 않을 수 있습니다. 형태가없는 다른 형태 만 제출 매우 동일한 형태로 포함 된 입력 데이터를 보낼 것이라고
는
<form action="FirstServlet" method="Post">
Last Name: <input type="text" name="lastName" size="20">
<br><br>
<input type="submit" value="FirstServlet">
</form>
<form action="SecondServlet" method="Post">
<input type="submit"value="SecondServlet">
</form>
참고.
는 또 다른 방법은 적절한 서블릿하는 위임 또 다른 하나의 엔트리 포인트 서블릿을 생성하는 것이다 (바람직하게 오른쪽 비즈니스 동작) 버튼에 따라 자체적으로 요구 파라미터로서 사용할 수있는 (가압 그는 name
)에 의해 다음 MainServlet
String action = request.getParameter("action");
if ("FirstServlet".equals(action)) {
// Invoke FirstServlet's job here.
} else if ("SecondServlet".equals(action)) {
// Invoke SecondServlet's job here.
}
에 다음과
<form action="MainServlet" method="Post">
Last Name: <input type="text" name="lastName" size="20">
<br><br>
<input type="submit" name="action" value="FirstServlet">
<input type="submit" name="action" value="SecondServlet">
</form>
이 버전뿐만 아니라입니다 i18n/유지 보수가 용이합니다. 서블릿 코드를 고려하지 않은 채 다른 언어로 버튼을 표시하거나 단추 값을 변경해야하는 경우에는 어떻게해야합니까?
<form action="MainServlet" method="Post">
Last Name: <input type="text" name="lastName" size="20">
<br><br>
<input type="submit" name="first" value="FirstServlet">
<input type="submit" name="second" value="SecondServlet">
</form>
: 요청 매개 변수로 그 존재 대신 국제화/유지 보수에 민감 할 것이다 가치의 확인 수 있도록
약간의 변화는 버튼을 자신의 고정 고유 한 이름을 지정하는 것입니다 와
제 j하는 것 MainServlet
if (request.getParameter("first") != null) {
// Invoke FirstServlet's job here.
} else if (request.getParameter("second") != null) {
// Invoke SecondServlet's job here.
}
마지막 방법으로 다음과 같은 JSF과 같은 MVC 프레임 워크를 사용하여 javabean 메서드를 버튼에 직접 바인딩 할 수 있지만 기존 코드를 크게 변경해야합니다. 이전 응답뿐만 아니라, 최선의 선택은 언어 문제없이 다른 버튼과 양식을 제출
@ManagedBean
@RequestScoped
public class Bean {
private String lastName; // +getter+setter
public void first() {
// Invoke original FirstServlet's job here.
}
public void second() {
// Invoke original SecondServlet's job here.
}
}
와우, 매우 포괄적 인 답변! –
+1의 답을 얻으려면 +1 : – srk
@BalusC 서블릿을 호출하는 방법을 설명해 주시겠습니까?이 RequestDispatcher rd = request.getRequestDispatcher ("/ servletName"); \t \t \t rd.forward (request, response);하지만 작동하지 않습니다. – spt