<jsp:include page="jsp페이지" flush="true 또는 false /*JSP 실행 전 출력 버퍼 비우기*/">
...
</jsp:include>
기존 JSP를 현재 JSP에 포함
화면 분할 관리
공통 화면 재사용
공통: 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>
<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>
데이터 저장 및 전달에 사용
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> </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(); }
}
}
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>
<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 회원 목록 조회
%>
<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="*" />
<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>
*자바 웹을 다루는 기술