개발자입니다
IT BANK) JSP 20일차 - JSP(회원관리 페이지(SQL)2), EL, JSTL 본문
221005
// BoardDAO.java 추가
public void delete(int num) {
String sql = "DELETE FROM session_quiz_board WHERE num=?";
PreparedStatement ps = null;
try {
ps = con.prepareStatement(sql);
ps.setInt(1, num);
ps.executeQuery();
}catch (Exception e) {
e.printStackTrace();
}
}
-검색 기능 코딩
<option> 태그의 selected 속성은 페이지가 로드될 때 옵션 중에서 미리 선택되어지는 옵션을 명시한다.
<form action=""> : 값 비우면 자기 자신의 페이지가 기본이다.
// boardForm.jsp 수정
<%@page import="java.util.ArrayList"%>
<%@page import="session_quiz.BoardDAO"%>
<%@page import="session_quiz.BoardDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>boardForm</title>
</head>
<body>
<%@ include file="/session_quiz/header.jsp" %>
<%
// 검색 코드 추가 부분
request.setCharacterEncoding("utf-8");
String select = request.getParameter("select");
String search = request.getParameter("search");
if(select == null)
select = "";
if(search == null)
search = "";
// 추가 종료
String cp = request.getParameter("currentPage");
int currentPage = 0;
try{
currentPage = Integer.parseInt(cp);
}catch(Exception e){
currentPage = 1;
}
if(currentPage < 1)
currentPage = 1;
int pageBlock = 3;
int end = currentPage * pageBlock;
int begin = end - pageBlock + 1;
BoardDAO boardDao = new BoardDAO();
int totalCount; // 수정
ArrayList<BoardDTO> boards; // 수정
// 검색 코드 추가 및 수정 부분
if(select == "" || search == ""){
boards = boardDao.list(begin, end);
totalCount = boardDao.count();
}else{
boards = boardDao.list(begin, end, select, search);
totalCount = boardDao.count(select, search);
}
// 추가 및 수정 종료
int totalPage = totalCount / pageBlock;
boardDao.disconnection();
if(boards.isEmpty() == true){
out.print("<h1> 등록된 데이터가 존재하지 않습니다. </h1>");
return;
}else{
%> <form > // 추가
<table border=1 align="center">
<caption><h2>게시글 목록</h2></caption> // 추가
<tr>
<th width="50">No.</th>
<th width="250">제목</th>
<th width="150">작성자</th> // width 수정
<th width="150">작성일</th> // width 수정
<th width="50">조회수</th>
</tr>
<%for(BoardDTO board : boards){ %>
<tr>
<td><%=board.getNum() %></td>
<td onclick="location.href='content.jsp?num=<%=board.getNum()%>'"> <%=board.getTitle() %></td>
<td><%=board.getId() %></td>
<td><%=board.getWriteTime() %></td>
<td><%=board.getHit() %></td>
</tr>
<%} %>
<tr>
<td colspan=2> // colspan 수정
<%
if(totalCount % pageBlock > 0)
totalPage++;
if(currentPage <= 1){
out.print("<a href='#'>[이전] </a>");
}else{
int tmp = currentPage - 1;
out.print("<a href='boardForm.jsp?currentPage="+tmp+"&select="+select+"&search="+search+"'>[이전] </a>"); // select, search 추가
}
for(int i = 1; i <= totalPage; i++){
if(i == currentPage){
out.print("<b> " + i + "</b>");
}else{
out.print("<a href='boardForm.jsp?currentPage=" + i + "&select="+select+"&search="+search+"'> " + i + " </a>"); // select, search 추가
}
}
if(currentPage >= totalPage){
out.print("<a href='#'> [다음] </a>");
}else{
int tmp = currentPage + 1;
out.print("<a href='boardForm.jsp?currentPage="+tmp+"&select="+select+"&search="+search+"'> [다음] </a>"); // select, search 추가
}
%>
</td>
// 검색 코드 추가 부분
<td colspan=2>
<select name="select">
<%if(select == null || select == "") {%>
<option value="">전체</option>
<option value="title">제목</option>
<option value="id">작성자</option>
<%}else if(select.equals("title")) {%>
<option value="">전체</option>
<option value="title" selected="selected">제목</option>
<option value="id">작성자</option>
<%} else if(select.equals("id")){ %>
<option value="">전체</option>
<option value="title" >제목</option>
<option value="id" selected="selected">작성자</option>
<%} %>
</select>
<input type="text" name="search" value=<%=search %>>
<input type="submit" value="검색">
</td>
// 추가 종료
<td>
<input type="button" value="글쓰기" onclick="location.href='boardWrite.jsp'">
</td>
</tr>
</table>
</form> // 추가
<%} %>
<%@ include file="/session_quiz/footer.jsp" %>
</body>
</html>
WHERE id like '%te%' : 부분 일치 코드는 = 대신 like 사용한다. %를 앞뒤로 사용하면 모든 문자를 대체한다.
// BoardDAO.java 추가
public ArrayList<BoardDTO> list(int begin, int end, String select, String search){
String sql;
if(select.equals("title")) {
sql = "SELECT B.* FROM "
+ "(SELECT ROWNUM rn, A.* FROM "
+ "(SELECT num, id, title, writetime, hit FROM session_quiz_board WHERE title like ? ORDER BY num DESC)A"
+ ")B "
+ "WHERE rn >= ? AND rn <= ?";
}else {
sql = "SELECT B.* FROM "
+ "(SELECT ROWNUM rn, A.* FROM "
+ "(SELECT num, id, title, writetime, hit FROM session_quiz_board WHERE id like ? ORDER BY num DESC)A"
+ ")B "
+ "WHERE rn >= ? AND rn <= ?";
}
PreparedStatement ps = null;
ResultSet rs = null;
ArrayList<BoardDTO> boards = new ArrayList<>();
try {
ps = con.prepareStatement(sql);
ps.setString(1, "%"+search+"%");
ps.setInt(2, begin);
ps.setInt(3, end);
rs = ps.executeQuery();
while(rs.next()) {
BoardDTO board = new BoardDTO();
board.setNum( rs.getInt("num") );
board.setId(rs.getString("id") );
board.setTitle(rs.getString("title"));
board.setWriteTime(rs.getString("writetime"));
board.setHit(rs.getInt("hit"));
boards.add(board);
}
} catch (Exception e) {
e.printStackTrace();
}
return boards;
}
public int count(String select, String search){
String sql;
if(select.equals("id")) {
sql = "SELECT count(*) as cnt FROM session_quiz_board WHERE id like ?";
}else {
sql = "SELECT count(*) as cnt FROM session_quiz_board WHERE title like ?";
}
PreparedStatement ps = null;
ResultSet rs = null;
int cnt = 0;
try {
ps = con.prepareStatement(sql);
ps.setString(1, "%"+search+"%");
rs = ps.executeQuery();
if(rs.next()) {
cnt = rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
}
return cnt;
}
■ EL(표현 언어(Expression Language))
Dynamic Web Project - el_jstl 폴더 생성
// ex1.jsp
<body>
<%="표현식으로 출력" %> <br>
<% out.print("메서드로 출력"); %> <br>
${"표현 언어(Expression Language)로 출력" } <br>
</body>
null은 빈 문자로 나온다.
// ex2.jsp
정수형 : ${10 } <br>
실수형 : ${10.123 } <br>
문자열형 : ${"홍길동" } <br>
논리형 : ${true } <br>
null데이터 : ${null } <br>
연산 : ${10 + 123 } <br>
/는 div, %는 mod로 쓸 수 있다.
// ex3.jsp
\${5 + 2 } : ${5 + 2 } <br>
\${5 - 2 } : ${5 - 2 } <br>
\${5 * 2 } : ${5 * 2 } <br>
\${5 / 2 } : ${5 / 2 } <br>
\${5 div 2 } : ${5 div 2 } <br>
\${5 % 2 } : ${5 % 2 } <br>
\${5 mod 2 } : ${5 mod 2 } <br>
eq : equal, ne : not equal
lt : less than, gt : greater than
le : less or equal, ge : greater or equal
// ex4.jsp
\${5 == 2 } : ${5 == 2 } => \${5 eq 5 } : ${5 eq 5 }<br>
\${5 != 2 } : ${5 != 2 } => \${5 ne 5 } : ${5 ne 5 }<br>
\${5 < 2 } : ${5 < 2 } => \${5 lt 5 } : ${5 lt 5 }<br>
\${5 > 2 } : ${5 > 2 } => \${5 gt 5 } : ${5 gt 5 }<br>
\${5 <= 2 } : ${5 <= 2 } => \${5 le 5 } : ${5 le 5 }<br>
\${5 >= 2 } : ${5 >= 2 } => \${5 ge 5 } : ${5 ge 5 }<br>
// ex5.jsp
\${(5>2) || (5<2) } : ${(5>2) || (5<2) } => \${false or true } : ${false or true } <br>
\${(5>2) && (5<2) } : ${(5>2) && (5<2) } => \${false and true } : ${false and true } <br>
\${ !(5>2) } : ${ !(5>2) } => \${ not false }: ${ not false } <br>
// ex6_result.jsp
<%
request.setCharacterEncoding("utf-8");
%>
아이디 : <%=request.getParameter("id") %> <br>
비밀번호 : <%=request.getParameter("pw") %> <br>
아이디 : ${param.id} <br>
비밀번호 : ${param.pw} <br>
${data } : pageContext, request, session, application 지정하지 않고 사용하면 좁은 범위부터 data라는 key가 있는지 찾아보고 있으면 value 가져온다.
// ex7_A.jsp
<%
// ex7_A.jsp
pageContext.setAttribute("data", "pageContext");
request.setAttribute("data", "request");
session.setAttribute("data", "session");
application.setAttribute("data", "application");
%>
범위 지정 없음 : ${data } <br>
pageContext : ${pageScope.data } <br>
request : ${requestScope.data } <br>
session : ${sessionScope.data } <br>
application : ${applicatoinScope.data } <br>
<a href="ex7_b.jsp">이동</a>
<!-- ex7_B.jsp -->
범위 지정 없음 : ${data } <br>
pageContext : ${pageScope.data } <br>
request : ${requestScope.data } <br>
session : ${sessionScope.data } <br>
application : ${applicatoinScope.data } <br>
■ JSTL
: JSP에서 사용 가능한 표준 라이브러리이다. 가독성을 위해 사용한다. 제어문도 사용 가능하다.
EL은 출력만 가능하다.
jstl 폴더 생성
라이브러리 2개 파일 해당 폴더에 복사한다.
JSTL 사용하기 위해서는 jsp 페이지 내 맨 앞에 다음 코드 삽입한다.
prefix="c" 코드로 <c:> 사용 가능하다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
// ex1.jsp
<%="표현식으로 출력" %> <br>
<% out.print("메서드로 출력"); %> <br>
${"표현 언어(Expression Language)로 출력" } <br>
<c:out value="JSTL로 출력" />
// ex2.jsp
<c:set var="data1" value="JSTL TEST" />
<c:set var="data2">
value 속성 대신해서 태그 사이에 변수에 입력할 값을 넣을 수 있다.
</c:set>
data1 : <c:out value="${data1 }" /> <br>
data1 : ${data1 } <br>
data2 : ${data2 } <br>
if 조건문
// ex3.jsp
<%
String data1 = "자바 변수의 데이터";
%>
data1 : <%=data1 %> <br>
<c:set var="data2" value="<%=data1 %>"/>
data2 : ${data2 } <br>
<%--
<c:if test="조건식">
종속문장
</c:if>
--%>
// 아래는 나오지 않는다. 스크립트릿 안의 내용이 먼저 실행된다.
<c:if test="${'자바 변수의 데이터' == data1 }">
<h3>두 데이터는 같아요</h3>
</c:if>
<c:if test="${'자바 변수의 데이터' == data2 }">
<h3>두 데이터는 같아요</h3>
</c:if>
forEach로 for문을 대체한다.
// ex4.jsp
<%
String data[] = {"김변수", "이상수", "박객체"};
%>
<c:set var="names" value="<%=data %>" />
이름 목록 : ${names[0] }, ${names[1] }, ${names[2] }
<br>
이름 목록 :
<c:forEach var="i" begin="0" end="2" step="1">
${names[i] },
</c:forEach>
<br>
이름 목록 :
<c:forEach var="name" items="${names }">
${name },
</c:forEach>
if ~ else if ~ else, switch ~ case ~ default 와 비슷하다.
// ex5.jsp
<c:set var="name" value="김상수"/>
<c:choose>
<c:when test="${name == '김변수' }">
<h3>이름은 김변수입니다.</h3>
</c:when>
<c:when test="${name == '이상수' }">
<h3>이름은 이상수입니다.</h3>
</c:when>
<c:otherwise>
<h3>이름은 홍길동입니다.</h3>
</c:otherwise>
</c:choose>
// ex6_form.jsp
<form action="ex6_result.jsp" method="post">
<input type="text" name="id" placeholder="아이디"><br>
<input type="password" name="pw" placeholder="비밀번호"><br>
<input type="password" name="confirmPw"placeholder="비밀번호 확인"><br>
<input type="text" name="name" placeholder="이름"><br>
<input type="text" name="email" placeholder="이메일"><br>
<input type="submit" value="회원 가입">
<input type="reset" value="취소">
</form>
uri와 prefix가 다르다.
// ex6_result.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<fmt:requestEncoding value="UTF-8"/>
아이디 : ${param.id} <br>
비밀번호 : ${param.pw} <br>
비밀번호 확인 : ${param.confirmPw} <br>
이름 : ${param.name} <br>
이메일 : ${param.email} <br>
java - jsp - spring 등 하나를 잘하고 나서 다른 걸 하면 따라잡기 쉽다.
php -> jsp 넘어가게 되면 변경된 사항들만 적용하면 금방한다.
'JSP > IT BANK - JSP' 카테고리의 다른 글
IT BANK) JSP 19일차 - JSP(회원관리 페이지(SQL)2) (0) | 2022.10.04 |
---|---|
IT BANK) JSP 18일차 - JSP(회원관리 페이지(SQL)2) (0) | 2022.09.30 |
IT BANK) JSP 17일차 - JSP(회원관리 페이지(SQL)2) (0) | 2022.09.29 |
IT BANK) JSP 16일차 - JSP(회원관리 페이지(SQL)2) (0) | 2022.09.28 |
IT BANK) JSP 15일차 - JSP(회원관리 페이지(SQL)2) (0) | 2022.09.27 |