프로그래밍/JSP

JSP 3일차 - 액션태그

윤도ri 2022. 1. 20. 16:27

>액션 태그
- 서버나 클라이언트에게 어떤 행동을 하도록 명령하는 태그 
- 페이지와 페이지 사이를 제어하거나 다른 페이지의 실행 결과 내용을 현재 페이지에 포함시키거나 자바빈즈(객체) 등    의 다양한 기능을 제공한다.
: 액션태그는 XML 형식인 <jsp:?? />를 이용한다.  
 (폼에서 입력을 한 경우 action 속성을 이용하여 값이 넘어간다. 이때 처리를 하는데 처리를 한 후 결과값으로 이동할때   는 따로 속성이 없어서 이때 쓰는게 액션태그이다. 

 *태그 안에 html 주석 쓰면 같이 해석되서 넘어가서 오류가 발생한다. 쓰지말것. 

 

1.<jsp:forward/>
    다른 페이지로 이동, 페이지의 흐름을 제어하기 위한 역할
(바로 다른페이지로 이동하게됨)
2.<jsp:param/>
현재 페이지에서 다른 페이지에 값을 전달하기 위한 역할 
parameter 의 줄임말 
값을 보내주는것이라는 의미보다는 값을 지정한다고 보면 된다
3.<jsp:useBean/>

4.<jsp:setProperty/>
5.<jsp:getProperty/>   

 

특정 파라미터(사용자가 입력한 값)는 요청을 통해 서버쪽으로 보내진다. 받는쪽에는 파라미터로 날라왔는데 파라미터중에 우리가 사용할 파라미터를 잘 골라서 써야하고 요청정보를 가져와서 처리한다. 다시 말하면, 페이지 이동(요청)시 사용자의 모든 정보를 가지고 있다. 그래야지 결과 페이지에서 정보받아서 처리를 해준다. 그래서 요청이라는 객체에 모든 정보담겨있게 되고 그걸 결과페이지에서 요청객체에서 정보를 꺼내는 코드를 써주어야한다.

또한 마지막으로 행위(요청)에 대한 것도 UTF-8로 인코딩을 해주어야한다. pageEncoding에 적어주더라도 그것은 페이지 자체를 인코딩할때 변환되는것이므로 요청행위에 대한 것도 따로 인코딩을 해주어야 한다. 

 

결론

1.사용자가 key, value를 입력한다. (우리는 입력했다는 전제하에 써준다.) //요청하는 페이지

 <jsp:param value="apple" name="userid">

2.서버에게 처리해달라고 요청을 보내야한다. = 요청값 넘기기  //요청하는 페이지

 <jsp:forward page="paramResult.jsp"> </jsp:forward>

3.이제 사용자가 요청했을때 나오는 페이지에 요청한 내용에 대한 값을 보여주어야 한다. //요청받는 페이지

 아이디: <%=request.getParameter("userid")%>

 (내장객체인 request.getParameter를 이용해서 특정 parameter를  get하기!)

4. 다 완료되었지만 한글의 경우 깨지기 때문에 꼭 요청행위를 UTF-8로 맞춰주어야 한다.  //요청하는 페이지

 <%request.setCharacterEncoding("UTF-8");%>

<Encoding 종류>

1.완성형: 글자하나하나 저장 가~핳 까지 가지고있음 (EUC-KR)
2.조합형: 문자 이루고 있는 값을 가로축 세로축으로 만들어냄 (UTF-8)

 

jsp:param / jsp:forward 의 예이다. 이 페이지에서는 입력값을 forward로 바로 넘겨주기 때문에 이 페이지에 어떤 내용을 적더라도 뷰단에는 보여지지 않는다. 위에 '아주예쁜제목'제목 또한 나오지 않게 될 것이다.&nbsp;

 

요청값을 getParameter로 가져온것을 볼 수 있다.


>자바빈즈 태그
- 객체 생성
<jsp:useBean class="패키지명.클래스명" id="객체명">

>객체 필드 세팅
- (무조건 기본생성자를 이용한다)
<jsp:setProperty name="세팅할객체" property="필드명" value="세팅값">

>객체 필드값 접근 
<jsp:getProperty name="객체" property="필드명" value="세팅값" >

>자바빈즈 개발 규약 
1.패키지화(default 패키지 인식 불가)
 -어떤 패키지안에 반드시 속해 있어야 한다.
2.필드 변수 접근자는 private으로 설정(접근은 메소드로만 가능하게 하기 위함)
3.getter, setter 메소드는 반드시 public으로 설정해야 한다.

<폼을 처리하는 과정>

1.폼 입력화면 페이지를 만든다.

-정수,실수,문자열 값 받기 

-Form action에 처리할 페이지 적어두기. 

2.submit 누르면 처리페이지로 이동하여 자바빈즈태그써서 객체 생성하기 

<jsp:userBean id="객체명" class="자바빈즈이름">

3.src들어가서 package 만들고 안에 자바빈즈만들기(객체생성을 위한 클래스만들기).

필드변수접근자와 setter,getter 메소드 만들기 

4.객체필드를 세팅한다. 

<jsp:setProperty property="intdata" name="bean"/>

입력값들중에 name에 intdata있는거있나 찾아보자~ 그거 있으면 bean객체에 넣어주자!

뷰단에 보여주고 싶을시 표현식을 쓰거나 getProperty 를 이용하면 값을 보여줄 수 있다. system.out.println을 쓸 경우에는 console창에 보여주게 된다.

<실습>

1.아이디,비밀번호,이름,핸드폰번호 입력받아서 "가입하기"버튼 클릭

2.join_db.jsp 로 이동 --> join_db.jsp 에서 가입할때 입력받았던 정보들 객체로 포장하기

 

답.

1)입력하는 페이지 생성

2.입력값 객체화하기 위해서 자바빈즈 생성

3.처리하는 페이지 만들어서 입력값 객체화하여 사용하기. 

*처리만 하는 경우 html,head,body 필요없음. 그러므로 위의 디렉티브를 제외하고는 다 지우고 만들면 된다. 

1)입력값이 한글일수도 있으므로 인코딩을 UTF-8로 맞춰준다. 

 request.setCharacterEncoding("UTF-8");

2)객체를 만들어서 객체필드를 생성한다.

<jsp:useBean id="newUser" class="test.UserDTO">

<jsp:setProperty property="userid" name="newUser"/>

   ....

 코드가 반복이 많아져 힘들어진다. 한번에 사용할 수 있는 코드가 있나 봤더니 우리는 이 객체의 모든 필드를 데려오는 상황이다. 그러므로 property로 *을 주면 한번에 해결될 수 있다. BUT 파라미터의 name과 property의 값이 같은 전제하에만 가능하다.

UserDTO 클래스에서 현재 변수명을 userid로 사용중인데 user_id로 바꾸고 싶을 수도 있다. 만약 이 경우 객체필드코드는 잘 작동을 할까? 정답은 Yes이다. 

 <jsp:setProperty property="userid" nae="newUser"> 

=newUser.setUserid(request.getParameter("userid")); 마치 이것과 같다. newUser객체의 setUserid 라는 setter메소드를 사용하는것과 같기때문에 setter메소드 이름을 바꾸지만 않는다면 변수명을 바꾸어도 상관없다!

 

<결론> 

1.setter와 getter메소드의 이름은 바뀌면 안된다.

2.파라미터의 name과 DTO객체의 필드명을 필드명을 동일하게 맞춰주자

 

 오늘은 액션태그를 이용하여 입력값 페이지를 만들고 처리페이지를 만들고 입력값을 받아서 객체에 넣어주는 것까지 해보았다.  느낀것은 입력 호출 하나로 인하여 무려 3개의 파일을 만들어야 했다는 것이다.. 강사님께서 말씀해주시길 그래서 우리는 곧 구조화라는 개념에 대해 배우게 된다고 하셨다. 설계를 잘한다는것은 굉장히 복잡하고 어려운 길인것 같다.^^.. 오늘도 고생했다. 끗! (팀플하러 고...) 

 

 

'프로그래밍 > JSP' 카테고리의 다른 글

JSP 6일차 - DBCP, JNDI,Mybatis  (0) 2022.01.27
JSP 5일차 - Session, Ajax  (0) 2022.01.24
JSP 4일차 - 내장객체, 쿠키  (0) 2022.01.21
JSP 2일차 - 스크립트,디렉티브 태그  (0) 2022.01.19
JSP 1일차 - JSP 란?  (0) 2022.01.17