1. JSP
번외) jsp 액션은 왜 존재할까?
스크립트릿(<% %>)를 쓰면 되는데 왜 굳이 jsp 액션과 자바빈을 사용할까. 바로 JSP Action 태그를 사용할 줄 안다면 자바 코드를 사용하지 않아도 JSP로 웹 페이지를 개발할 수 있기 때문입니다. 또한 로직을 처리하는 부분과 화면을 처리하는 부분을 따로 나눠서 개발할 수 있습니다
1-1. jsp의 기능
jsp의 주요 기능 중 하나는 데이터를 보여주는 기능입니다. 예시를 하나 들자면 게시판이 있다
이런 기능을 가지고 있는 jsp가 화면 출력부랑 같이 붙어있으면 후에 유지보수, 더 나아가 코드를 재사용하기가 상당히 어려워집니다.
그렇기에 jsp에서는 데이터를 javabean이라는 클래스에 담아서 보여줍니다.
2. JavaBean
2-1. 자바빈 작성 방법
자바빈은 클래스이기 때문에 하나의 클래스를 만들어 거기에서 데이터를 관리합니다. 또한 자바빈의 경우 데이터를 담을 필드변수와 데이터를 가져오거나 수정하는 메서드(getter setter)로 구성됩니다.
public class MemberBean {
private String id;
private String pw;
private String addr;
private tel;
//getter 와 setter
}
2-2. 자바빈의 액션태그
2-2-1. jsp: useBean
<jsp: useBean id ="빈이름" class="자바빈 클래스 이름" scope="범위" />
- id : jsp페이지에서 자바빈 객체에 접근할때 사용하는 이름
- class : 자바빈 클래스의 완전한 이름을 입력(패키지이름까지 포함해야함)
- 인터페이스는 올 수 없다
- scope에서 지정한 보관소에서 객체를 찾지 못한 경우 class 값을 사용해서 인스턴스를 생성한다
- 그 객체는 자동으로 scope보관소에 저장된다.
- class 속성이 없으면 객체를 생성할 수 없다
- scope : 자바빈 객체가 저장될 영역을 지정 기본값은 page
- page(기본값)
- request
- session
- application
예시)
<jsp:useBean id="member" class="test.MemberBean"/>
// 위와 아래의 코드는 같은 코드
Member member = (MemberBean)request.getAttribute("member")
if(memeber == null){
member = new MemeberBean();
request.setAttribute("member", member)
}
이를 해석하면 이렇게 됩니다
1. 프론트 단에서 회원가입을 한다고 가정했을 때 form의 input의 value와 name을 기준으로 값이 request됩니다.(유저가 회원가입 버튼을 누른것)
2. 일련의 과정을 거쳐서 getAttribute로 member의 필드들을 가져와 member 변수에 담습니다
3. 만약에 그 member가 null이라면(새로운 회원이라면) 새로운 member 인스턴스를 생성합니다.
3-1. 만약 속성값이 있을 경우 그 객체를 그대로 씁니다
4. setAttribute를 사용하여 member를 수정해줍니다.
이렇게 복잡한 과정을 거치는 코드를 한줄로 마무리하는게 자바빈입니다.
2-2-1-1. scope 속성
scope 속성을 사용하면 속성의 값에 따라서 서로 다른 기본 객체에 저장됩니다 즉 자바 객체를 저장하는 보관소 라고 생각하면 됩니다. 만약 보관소에 객체가 없다면 새로 생성하여 보관소에 저장하는 것입니다.
- page : 자바빈 클래스를 현재 페이지 내에서만 사용 가능, 이동하면 유지 안됨
- request : 리퀘스트 요청을 받고 처리가 완료될때 까지 유지
- session : 세션 영역이 유지되는 동안(브라우저 종료 전까지) 사용 가능
- application : 서버 종료전까지 유지
2-2-2 jsp:setProperty
<jsp: setProperty name="자바빈" property="이름" value="값" />
- name : 프로퍼티 값을 변경할 자바빈 객체의 이름, useBean 액션 태그의 id속성과 같은 값을 사용해야합니다
- property : 값을 지정할 프로퍼티 이름
- value : 프로퍼티 값, 표현식 사용가능
- param : 파라미터 값(get방식을 사용했을 때 주소창에 나오는 값들)을 프로퍼티의 값으로 지정할때 사용
만약 위에서 작성한 MemberBean의 필드변수 id 값을 abc로 저장하고 싶다면
<jsp:useBean id="memeber" class="test.MemberBean" />
<jsp:setProperty name="member" property="id" value="abcd" />
간단하게 설명하면 인스턴스를 member라는 변수에 담고 member라는 변수의 (MemberBean의 인스턴스) 필드변수 id의 값을 abcd로 넣는다는 뜻입니다
여기서 property 값을 *로 처리할 수 있습니다 코드는 아래와 같습니다
<jsp:useBean id="member" class="test.MemberBean"/>
<jsp:setProperty name="member" property="*" />
이 경우엔 각각 필드변수의 값을 프로퍼티의 값으로 지정한다는 뜻입니다.(폼에 입력한 값을 자바빈 객체에 담을때 유용하다)
예를들어 회원가입을 한다고 가정하면 form의 각 name을 프로퍼티 값으로 설정하는 것입니다
2-2-3. jsp:getProperty
<jsp:getProperty name="자바빈" property="이름" />
- name : useBean 액션 태그의 id 속성에서 지정한 값을 사용
- property : 값을 가져올 프로퍼티 이름
getter 처럼 간단히 값을 가져옵니다
추가)
실무환경에서는 적합하지 않습니다
MVC 모델을 사용할 경우 로직은 자바 클래스에서 처리를 하는데 클래스에서는 useBean 태그를 사용할 수 없습니다. 그래서 request.getParameter와 같은 메서드를 사용하여 값을 읽어와 자바객체에 저장하거나 비슷한 모듈을 사용합니다. 그래서 MVC모델을 사용할 경우 useBean 태그를 사용할 일이 많지 않다고 합니다.
하지만 오직 jsp만을 가지고 구현해야하는 경우엔 많이 쓰입니다
최신버전인 JSP2.0에서는 EL표현 언어가 추가되면서 더 코드가 간결해졌습니다
JSP
<jsp:getProperty name="memberInfo" property="email" />
EL표현언어
${memberInfo.email}
'Java 개념' 카테고리의 다른 글
Stream API (1) | 2024.02.19 |
---|---|
자바 둘러보기 (0) | 2024.02.16 |
JDBC 연동 (0) | 2023.09.04 |
Stack과 Queue (0) | 2023.08.23 |
Collection - Set,Map (0) | 2023.08.23 |