[JSP] Action Tag 액션 태그

sang·2024년 3월 15일

Include Action Tag

<jsp:include page="jsp페이지" flush="true 또는 false /*JSP 실행 전 출력 버퍼 비우기*/">
     ...
</jsp:include>

기존 JSP를 현재 JSP에 포함
화면 분할 관리
공통 화면 재사용

Include 액션 태그 / 디렉티브 태그

공통: JSP 레이아웃 모듈화

  • Include Action Tag
    요청 시간에 처리
    동적 처리 가능
    include 되는 JSP 각각 자바 파일 생성

  • Include Directive Tag
    JSP -> 자바 변환 시 처리
    정적 처리만 가능
    include 되는 JSP가 합쳐져서 하나의 자바 파일 생성

pro13/WebContent/duke_image.jsp

포함되는 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<% /* param 액션태그로 전달된 데이터 가져오기 */
  request.setCharacterEncoding("utf-8");
  String name = request.getParameter("name") ;
  String imgName = request.getParameter("imgName"); %>
  
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
  <title>듀크이미지</title>
</head>
<body>
  <br><br>
  <h1>이름은 <%=name %>입니다.</h1>     <br><br>
  <img src="./image/<%= imgName %>" />
</body>
</html>

pro13/WebContent/include1.jsp

다른 페이지를 포함할 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("utf-8"); %>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>include1.jsp</title>
</head>
<body>
  안녕하세요. 쇼핑몰 중심 JSP 시작입니다!!!
  <br>
  <jsp:include page="duke_image.jsp" flush="true" > //포함
  <jsp:param name="name" value="듀크" /> //데이터 전달
    <jsp:param name="imgName" value="duke.png" />
  </jsp:include>
  <br>
  안녕하세요. 쇼핑몰 중심 JSP 끝 부분입니다.!!!
</body>
</html>


Forward Action Tag

<jsp:forward page="포워딩할 JSP 페이지" >
   ..
</jsp:forward>

자바 코드 없이 포워딩
RequestDispatcher 포워딩 기능과 동일

pro13/WebContent/login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<% request.setCharacterEncoding("utf-8"); %>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>로그인창</title>
</head>
<body>
<% String msg = request.getParameter("msg");
   if(msg != null) { %> //브라우저 접속 시 (최초 접속이 아닐 때)
  <h1> <%=msg %> </h1> //아이디 미입력 문구
<% } %>

  <form action="result.jsp" method="post">
    아이디: <input type="text" name="userID"><br>
    비밀번호: <input type="password" name="userPw"><br>
    <input type="submit" value="로그인">
    <input type="reset" value="다시입력">
  </form>
</body>
</html>

pro13/WebContent/result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("utf-8"); %>

<%! String msg = "아이디를 입력하지 않았습니다. 아이디를 입력해 주세요."; %>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>결과창</title>
</head>
<body>
<% String userID = request.getParameter("userID" ); //입력한 ID 가져오기
   if(userID.length()==0) { %> //아이디 미입력 시
  <jsp:forward page="login.jsp" > //요청 넘기기: login.jsp -> result.jsp -> login.jsp
    <jsp:param name="msg" value="<%= msg %>" /> //데이터 전달
  </jsp:forward>
<% } %>
  <h1>환영합니다. <%=userID %>님!!! </h1>
</body>
</html>


객체 관리

Java Bean

데이터 저장 및 전달에 사용
DTO 클래스, VO 클래스와 같은 개념

단점: 높은 화면 복잡성

사용 방식

테이블의 각 칼럼명+자료형과 동일한 맴버 변수 설정
private 접근제한자 사용
각 속성마다 getter/setter 사용
getter/setter 이름 첫글자 소문자
인자 없는 생성자 필수, 다른 생성자 추가 가능

pro13/src/sec01/ex01/MemberBean.java

package sec01.ex01;
...

public class MemberBean {
  /*회원 테이블 칼럼과 동일한 맴버 변수*/
  private String id;
  private String pwd;
  private String name;
  private String email;
  private Date joinDate;

  public MemberBean() { }
  public MemberBean(String id, String pwd, String name, String email) {
    this.id = id;
    this.pwd = pwd;
    this.name = name;
    this.email = email;
  }
 
  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getPwd() {
    return pwd;
  }

  public void setPwd(String pwd) {
    this.pwd = pwd;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getEmail() {
    return email;
  }

  public void setEmail(String email) {
    this.email = email;
  }
}

pro13/WebContent/memberForm.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>회원 가입창</title>
<body>
  <form method="post" action="member.jsp">
    <h1 style=”text-align:center”>회원 가입창</h1>
    
    <table align="center">
      <tr>
        <td width="200"><p align="right">아이디</td>
        <td width="400"><input type="text" name="id"></td>
      </tr>
      <tr>
        <td width="200"><p align="right">비밀번호</td>
        <td width="400"><input type="password" name="pwd"></td>
      </tr>
      <tr>
        <td width="200"><p align="right">이름</td>
        <td width="400"><p><input type="text" name="name"></td>
      </tr>
      <tr>
        <td width="200"><p align="right">이메일</td>
        <td width="400"><p><input type="text" name="email"></td>
      </tr>
      <tr>
        <td width="200"><p>&nbsp;</p></td>
        <td width="400">
          <input type="submit" value="가입하기">
          <input type="reset" value=”다시입력”>
        </td>
      </tr>
    </table>
  </form>
</body>
</html>

pro13/WebContent/member.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*, sec01.ex01.*" pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<% /*전송된 회원 정보 받아오기*/
  String id = request.getParameter("id");
  String pwd = request.getParameter("pwd");
  String name = request.getParameter("name");
  String email = request.getParameter("email");
  
  MemberBean m = new MemberBean(id, pwd, name, email); //자바빈 객체 생성 및 정보 설정
  MemberDAO memberDAO = new MemberDAO();
  memberDAO.addMember(m); //DAO를 통해 DB에 회원 추가
  List membersList = memberDAO.listMembers(); //DB 회원 목록 조회
%>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>회원 목록창</title>
</head>
<body>
  <table align="center" width="100%">
    <tr align="center" bgcolor="#99ccff">
      <td width="7%">아이디</td>
      <td width="7%">비밀번호</td>
      <td width="5%">이름</td>
      <td width="11%">이메일</td>
      <td width="5%">가입일</td>
    </tr>
    
<!-- 회원이 0명일 경우 -->
<% if(membersList.size()==0) { %>
    <tr>
      <td colspan="5">
        <p align="center"><b><span style="font-size:9pt;"> 등록된 회원이 없습니다.</span></b></p>
      </td>
    </tr>
<% }
<!-- 회원이 있는 경우 -->
   else {
     for( int i = 0; i < membersList.size(); i++ ) { //회원 목록 순회
       MemberBean bean = (MemberBean) membersList.get(i); %>
    <tr align="center">
      <!-- 회원 정보 출력 -->
      <td><%= bean.getId() %></td>
      <td><%= bean.getPwd() %></td>
      <td><%= bean.getName() %></td>
      <td><%= bean.getEmail() %></td>
      <td><%= bean.getJoinDate() %></td>
    </tr>
<%   } /*end for*/
   } /*end else*/ %>
   
    <tr height="1" bgcolor="#99ccff">
      <td colspan="5"></td>
    </tr>
  </table>
</body>
</html>

pro13/src/sec01/ex01/MemberDAO.java

package sec01.ex01;
...

public class MemberDAO {
  private Connection con;
  private PreparedStatement pstmt;
  private DataSource dataFactory;

  public MemberDAO() { //DAO 생성
    try {
      Context ctx = new InitialContext();
      Context envContext = (Context) ctx.lookup("java:/comp/env");
      dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
    } catch (Exception e) { e.printStackTrace(); }
  }

  public List listMembers() { //회원 조회
    List list = new ArrayList();
    try {
      con = dataFactory.getConnection();
      String query = "select * from t_member order by joinDate desc ";
      System.out.println("prepareStatememt: " + query);
      pstmt = con.prepareStatement(query);
      ResultSet rs = pstmt.executeQuery();
      while (rs.next()) {
        String id = rs.getString("id");
        String pwd = rs.getString("pwd");
        String name = rs.getString("name");
        String email = rs.getString("email");
        Date joinDate = rs.getDate("joinDate");
        
        /*자바빈 객체에 회원정보 저장*/
        MemberBean vo = new MemberBean();
        vo.setId(id);
        vo.setPwd(pwd);
        vo.setName(name);
        vo.setEmail(email);
        vo.setJoinDate(joinDate);
        
        list.add(vo); //리스트에 자바빈 객체 저장
      }
      rs.close();
      pstmt.close();
      con.close();
    } catch (Exception e) { e.printStackTrace(); }
    
    return list;
  }

  public void addMember(MemberBean memberBean) { //회원 추가
    try {
      Connection con = dataFactory.getConnection();
      /*전달받은 회원정보 가져오기*/
      String id = memberBean.getId();
      String pwd = memberBean.getPwd();
      String name = memberBean.getName();
      String email = memberBean.getEmail();
      
      /*회원정보 저장*/
      String query = "insert into t_member";
      query += " (id,pwd,name,email)";
      query += " values(?,?,?,?)";
      System.out.println("prepareStatememt: " + query);
      pstmt = con.prepareStatement(query);
      pstmt.setString(1, id);
      pstmt.setString(2, pwd);
      pstmt.setString(3, name);
      pstmt.setString(4, email);
      pstmt.executeUpdate();
      
      pstmt.close();
    } catch (Exception e) { e.printStackTrace(); }
  }
}

UseBean

pro13/WebContent/member.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*, sec01.ex01.*" pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>

<%-- 전송된 회원 정보 받아오기 --%>
<jsp:useBean id="m" class="sec01.ex01.MemberBean" scope="page"/>
<jsp:setProperty name="m" property="*" />

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>회원 목록창</title>
</head>
<body>
<table align="center" width="100%">
  <tr align="center" bgcolor="#99ccff">
    <td width="7%">아이디</td>
    <td width="7%">비밀번호</td>
    <td width="5%">이름</td>
    <td width="11%">이메일</td>
  </tr>
  <tr align="center">
    <!-- 회원 정보 출력 -->
    <td><jsp:getProperty name="m" property="id" /></td>
    <td><jsp:getProperty name="m" property="pwd" /></td>
    <td><jsp:getProperty name="m" property="name" /></td>
    <td><jsp:getProperty name="m" property="email" /></td>
  </tr>
  <tr height="1" bgcolor="#99ccff">
    <td colspan="5"></td>
  </tr>
</table>
</body>
</html>

UseBean Action Tag

<jsp:useBean id="javaBean 객체 접근 이름" class="패키지 이름 + javaBean 클래스명 [scope="접근범위"]/>

javaBean 보완을 위해 등장
new 연산자와 동일
자바 코드 없이 javaBean 생성 가능

접근범위: page(default), request, session, application

<!-- 적용 전 -->
<% /*전송된 회원 정보 받아오기*/
  String id = request.getParameter("id");
  String pwd = request.getParameter("pwd");
  String name = request.getParameter("name");
  String email = request.getParameter("email");
  
  MemberBean m = new MemberBean(id, pwd, name, email); //자바빈 객체 생성 및 정보 설정
  MemberDAO memberDAO = new MemberDAO();
  memberDAO.addMember(m); //DAO를 통해 DB에 회원 추가
  List membersList = memberDAO.listMembers(); //DB 회원 목록 조회
%>


<!-- 적용 후 -->
<jsp:useBean id="m" class="sec01.ex01.MemberBean" scope="page" /> <%-- //"MemberBean m = new MemberBean();"와 동일 --%>

<% /*전송된 회원 정보 받아오기*/
  String id = request.getParameter("id");
  String pwd = request.getParameter("pwd");
  String name = request.getParameter("name");
  String email = request.getParameter("email");
  
  /*회원 정보 설정*/
  m.setId(id);
  m.setPwd(pwd);
  m.setName(name);
  m.setEmail(email);
  
  MemberDAO memberDAO = new MemberDAO();
  memberDAO.addMember(m); //DAO를 통해 DB에 회원 추가
  List membersList = memberDAO.listMembers(); //DB 회원 목록 조회
%>

SetProperty Action Tag

<jsp:setProperty name="useBean 설정 id" property="처리할 속성 이름" value="설정할 값" />

setter
useBean 속성 값 설정

<!-- setProperty 적용 -->
<jsp:useBean id="m" class="sec01.ex01.MemberBean" scope="page"/>

<jsp:setProperty name="m" property="id" value='<%= request.getParameter("id") %>' />
<jsp:setProperty name="m" property="pwd" value='<%= request.getParameter("pwd") %>' />
<jsp:setProperty name="m" property="name" value='<%= request.getParameter("name") %>' />
<jsp:setProperty name="m" property="email" value='<%= request.getParameter("email") %>' />


<!-- '매개변수명 == 속성명'일 때 자동 값 설정 -->
<jsp:useBean id="m" class="sec01.ex01.MemberBean" scope="page"/>

<jsp:setProperty name="m" property="id" param="id" />
<jsp:setProperty name="m" property="pwd" param="pwd" />
<jsp:setProperty name="m" property="name" param="name" />
<jsp:setProperty name="m" property="email" param="email" />


<!-- 매개변수명과 일치하는 속성으로 자동 값 설정 -->
<jsp:useBean id="m" class="sec01.ex01.MemberBean" scope="page"/>

<jsp:setProperty name="m" property="id" />
<jsp:setProperty name="m" property="pwd" />
<jsp:setProperty name="m" property="name" />
<jsp:setProperty name="m" property="email" />


<!-- 매개변수명과 일치하는 속성 전체 자동 값 설정 -->
<jsp:useBean id="m" class="sec01.ex01.MemberBean" scope="page"/>

<jsp:setProperty name="m" property="*" />

GetProperty Action Tag

<jsp:getProperty name="useBean 설정 id" property="처리할 속성 이름" />

getter
useBean 속성 값 가져오기

  <!-- 적용 전 -->
  <tr align="center">
    <!-- 회원 정보 출력 -->
    <td><%= bean.getId() %></td>
    <td><%= bean.getPwd() %></td>
    <td><%= bean.getName() %></td>
    <td><%= bean.getEmail() %></td>
    <td><%= bean.getJoinDate() %></td>
  </tr>

  
  <!-- 적용 후 -->
  <tr align="center">
    <!-- 회원 정보 출력 -->
    <td><jsp:getProperty name="m" property="id" /></td>
    <td><jsp:getProperty name="m" property="pwd" /></td>
    <td><jsp:getProperty name="m" property="name" /></td>
    <td><jsp:getProperty name="m" property="email" /></td>
  </tr>


*자바 웹을 다루는 기술

profile
CS 메모장

0개의 댓글