2016-11-01 3 views
1

저는 책을 읽고 몇 가지 온라인 자습서를 따라 JSP와 Servlet을 연구하고 있습니다. 나는 JSP와 서블릿을 사용하는 웹 프로그래밍에 완전히 새로운 것이다.<input type = "hidden"name ... /> JSP Servlet에서 어떻게 작동합니까?

내가 이해하려고하는 예를 발견했습니다.

index.html을

<form action="emailList" method="post"> 

    <input type="hidden" name="action" value="add" /> 

    <label>Email: </label> 
    <input type="email" name="email" required /> <br /> 
    <label>First Name:</label> 
    <input type="text" name="firstName" required /> <br/> 
    <label>Last Name:</label> 
    <input type="text" name="lastName" required /> <br /> 

    <label>&nbsp;</label> 
    <input type="submit" value="Join Now" id="submit" /> 

</form> 

EmailServlet.java

public class EmailListServlet extends HttpServlet{ 

    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     String url = "/index.html"; 

     //get the current action 
     String action = req.getParameter("action"); 

     if(action == null){ 
      action = "join"; //default action 
     } 

     //perform action and set URL to appropriate page 
     if(action.equals("join")){ 
      url = "/index.html"; //the join page 
     } 
     else if(action.equals("add")){ 
      //get parameters from the request 
      String firstName = req.getParameter("firstName"); 
      String lastName = req.getParameter("lastName"); 
      String email = req.getParameter("email"); 

      //store data in User object and save User object in database 
      User user = new User(firstName, lastName, email); 
      UserDB.insert(user); 

      //set User object in request object and set URL 
      req.setAttribute("user", user); 
      url = "/thanks.jsp"; //the thanks page 
     } 

     //forward request and response objects to specified url 
     getServletContext().getRequestDispatcher(url).forward(req, resp); 
    } 

내가 이해하지 않는 것은 IF-ELSE 부분입니다.

어딘가에 숨겨진 <input>을 사용하는 주된 목적은 양식의 상태를 확인하는 것입니다. 내가 이해하는 방식은 양식 필드 (또는 매개 변수)가 null인지 아닌지 확인하는 방법입니다..

그런 경우라면 value="add" 속성의 목적은 무엇입니까?

else if(action.equals("add"))에 대해 add이 사용 되었기 때문에.

req.getParameter()은 무엇을 반환 할 수 있습니까?

//get the current action 
    String action = req.getParameter("action"); 

이전에 PHP에 CRUD 프로젝트를 수행하여 양식에 null 매개 변수가 없는지 확인하기 위해 ff를 사용했기 때문에 묻습니다.

if(isset($_POST['btnSave'])){ 

} 

<form method ="POST" action="index.php"> 
     <label>First Name<input type="text" name="firstname" required></label> 
     <br /><br /> 
     <label>Last Name<input type="text" name="lastname" required></label> 
     <br /><br /> 
     <input type = "submit" name="btnSave" value="Save" /> 
     <input type = "submit" name="btnSearch" value="Search" /> 
    </form> 

대신 마지막 형태 예에 대신 hidden inputbtnSave 결정 (버튼)를 사용 하였다.

value="add"req.getParameter("action")이 반환 할 수있는 점이 없습니다. 그것이에 사용 되었기 때문에 IF-ELSE

나는 어떤 설명을 주시면 감사하겠습니다.

감사합니다.

+0

req.getParameter ("동작")는 동작, 즉 값이 숨겨진 필드는 단지 모든 입력 필드처럼 – Gaur93

+0

닦이. 차이점은 화면에 나타나지 않으며 사용자가 값을 수정할 수 없다는 것입니다. 그 외에도 다른 필드와 마찬가지로 요청 매개 변수를 제출할 수 있습니다. 이 경우 서버에서 수행 할 작업 (추가 또는 결합)을 알리는 데 사용됩니다. –

답변

1

역순으로 질문을 다루는 :

req.getParameter()가 무엇을 반환 할 수 있을까?

그것은 아무것도 반환 할 수있다. <form>이 보이는 서버에 요청 생성 게시 : 누군가가 대신 다음과 같은 요청을 제출하는 경우, 지금

POST /emailList HTTP/1.1 
Host: example.com 
Cache-Control: no-cache 

action=add&email=MyEmail&firstName=MyFirstName&lastName=MyLastName&submit=Join Now 

을 고려

POST /emailList HTTP/1.1 
Host: example.com 
Cache-Control: no-cache 

action=edit&id=1&email=NewEmail&firstName=TypoFreeName&lastName=TypoFreeLastName&submit=Update Details 

당신은이 없기 때문에 서블릿에서 "편집"사건은,하지만 당신은 if 검사, 서블릿은 단지 사용자의 세부 사항을 변경하거나 새 사용자를 삽입하는 대신 /index.html를 리디렉션 것 있나요.

같은 코드에 대한 논리적 인 다음 단계는 서블릿에 새 섹션을 추가하는 것입니다 :

if(action.equals("join")){ 
    url = "/index.html"; //the join page 
} 
else if (action.equals("delete") { 
    //Call UserDB.delete() 
} 
else if (action.equals("edit") { 
    //Call UserDB.update() 
} 
else if(action.equals("add")){ 
    ... 
} 

는 =이 "추가"값의 목적은 무엇인가 속성?

부분적으로는 서블릿의 흐름을 제어하고 부분적으로 오류 예방 조치로 사용됩니다. 요청 조치를 포함하는 경우 = 당신은 다른 형태의 요소를해야합니다 가정하에 진행, 추가 (더 나은 방법은 이름, 성, 이메일이 USERDB를 호출하기 전에 요청에 설정되어 있는지 확인하십시오하는 것입니다).

+0

감사합니다. 아주 잘 설명하고 나는 그 예를 고맙게 생각합니다. 그것은 내가 그것을 더 잘 이해하는 것을 도왔습니다. 그래도 질문이 있는데, 매개 변수가 요청에 설정되어 있는지 확인하는 것이 더 나은 방법이라면, EmailServlet.java 파일에서 매개 변수를 설정해야한다는 의미입니까? 간단한 예제를 줄 수 있습니까? 감사. – p3ace

1

코드는 솔직히 약간 이상합니다. 다른 양식 (action 필드 없음)이 서블릿에 게시되고 index.html 페이지를 표시하여 처리하는 경우를 처리하도록 설계된 것 같습니다. 아마도 그 장의 다른 부분에 다른 형식이있을 것입니다.

질문에있는 양식이 서버에 게시되면 서블릿 action 매개 변수를받습니다. JavaScript 코드가 input을 먼저 양식에서 제거하지 않는 한, getParameter("action")null을 반환하지 않습니다. JavaScript 코드가 input의 값을 변경 한 경우 다른 문자열 ("" 문자열까지)이 표시 될 수 있지만 null은 표시되지 않을 수 있습니다.

그것은 다른 형태와 action=add 필드가 서버에 게시하고, 행복하게 그들에게 서버 측을 확인하지 않고 다른 매개 변수를 사용합니다가, 가난한되는 가능성을 처리하지 않음을 지적 아마 가치 연습. 유효성 검사 은 서버 측에서 수행해야합니다..

+0

정보를 제공해 주셔서 감사합니다. 몇 가지 검증 작업을 아직 시도하지는 않았지만 서버 측에서 검증해야한다는 요지를 얻었습니다. 당신이 말할 때 그건 그렇고, "검증은 서버 측을 수행해야합니다"당신은 내가 매개 변수를 확인하기 위해 내 EmailServlet.java 일부 IF-그렇지 분기를 추가 할 필요가 있음을 의미합니까? – p3ace

+0

@ p3ace : 그렇습니다. 사용하기 전에 다른 매개 변수가 유효한지 확인해야합니다. –

관련 문제