※ 인코딩
- 컴퓨터가 이해할 수 있는 코드 형태로 만들어 주는 작업
▶ EUC-KR
- 문자코드 : 코드들을 1대1로 연결시켜 놓은 것 ex ) A : 65, a : 97 = ASCII
- ASCII 문자코드 = 1바이트로 표현
- 한글 문자코드 = 2바이트로 표현
▶ UTF-8
- 유니코드 : 인간이 사용하는 모든 언어를 표현할 수 있도록 하기 위 하여 만들어짐
- ASCII 문자코드는 1바이트로 인코딩, 다른 문자들은 2바이트나 그 이상으로 인코딩하는 방식
- 한글은 3바이트로 인코딩
※ 웹 어플리케이션, JDBC 프로그래밍
PD 테이블로 아주아주 간단한 게시판 만들기예제
툴 : 오라클, 톰캣, 이클립스
톰캣-이클립스 연동하는데 3시간 걸림. . . 촤학
▶ pdWrite.jsp
- 상품등록 창
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>pdWrite.jsp</title>
</head>
<body>
<h1>상품등록</h1>
<form method = "post" action="pdWrite_ok.jsp">
상품명 : <input type = "text" name = "pdName"><br>
가격 : <input type = "text" name = "price"><br><br>
<input type = "submit" value ="등록">
<input type = "reset" value ="취소">
</form>
<br>
<a href = "pdList.jsp">상품목록</a>
</body>
</html>

▶ pdWrite_ok.jsp
- dao 에서 insert 메서드 가져와서 처리할 창
- pdWrite에서 Post 방식으로 submit 되어 도착
ㄴ POST 방식으로 왔을 때 인코딩 필수
= request.setCharacterEncoding("euc-kr");
★ 처리순서 (공통)
1. 요청 파라미터읽어오기
- Post 방식일때의 파라미터 : input 태그 name
- Get 방식일때의 파라미터 : a태그 '?' 뒤 name
2. db작업
- DAO 에서 DB작업 메서드 만들어둔것 가져와서 사용
3. 결과처리
- 브라우저에 보여줄 html 작성 / insert or update
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>pdWrite_ok.jsp</title>
</head>
<body>
<%
request.setCharacterEncoding("euc-kr");
//1
String pdName=request.getParameter("pdName");
String price=request.getParameter("price");
//2
PdDAO dao = new PdDAO();
PdDTO dto = new PdDTO();
dto.setPdName(pdName);
dto.setPrice(Integer.parseInt(price));
try{
int cnt=dao.insertPd(dto);
//3
if(cnt>0){
response.sendRedirect("pdList.jsp"); //get방식으로 pdListf로 가기
}else{
System.out.println("상품등록실패 ! ");
response.sendRedirect("pdWrite.jsp");
}
}catch(SQLException e){
e.printStackTrace();
}
%>
</body>
</html>
- 보여주는 창이 아니라 처리하는 창임
insert 성공 > 목록으로 이동
insert 실패 > 등록페이지로 이동
▶ pdList.jsp
- 전체 목록을 보여줄 창
- 경로 : 1. pdWrite 에서 a 태그 get 방식으로 도착함
2. pdWrite_ok에서 등록 성공하면 sendRedirect 메서드를 통해 get 방식으로 도착함
- 여기서는 요청 파라미터 받아올 것 없음. selectAll() 이니까 ! => 바로 db연동부터 시작
- List 에는 중요한 부분이 많으니 설명 잘 봐라 !
<%
//db연동
PdDAO dao = new PdDAO();
List<PdDTO> list = dao.selectAll();
try{
list = dao.selectAll();
}catch(SQLException e){
e.printStackTrace();
}
DecimalFormat df = new DecimalFormat("#,###");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String s = df.format(12300);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>pdList.jsp</title>
</head>
<body>
<h1>글 목록</h1>
<table border="1" style="width: 500px">
<tr>
<th>번호</th>
<th>상품명</th>
<th>가격</th>
<th>등록일</th>
</tr>
<%
for(int i=0;i<list.size();i++){
PdDTO dto = list.get(i);%>
<tr>
<td><%=dto.getNo() %></td>
<td><a href="pdDetail.jsp?no=<%=dto.getNo() %>">
<%=dto.getPdName() %>
</a></td>
<td style = "text-align:right">
<%=df.format(dto.getPrice())%></td>
<td><%=sdf.format(dto.getRegdate())%></td>
</tr>
<% }//for%>
</table>
<br>
<a href="pdWrite.jsp">상품등록</a>
</body>
</html>

▷ DecimalFormat, SimpleDateFormat
- 숫자 format과 날짜 format 을 정해주는 메서드
메서드작성
DecimalFormat df = new DecimalFormat("#,###");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
메서드사용
df.format(dto.getPrice()) // 숫자
sdf.format(dto.getRegdate()) // 날짜
▷ tr for 문 돌려서 DB 에 값이 있는만큼 행 생성
- for문은 자바코드를 사용해야하므로 스크립트릿 사용 <% %>
- <%=%> 표현식을 이용해서 dto에 있는 값을 테이블에 뿌려줌. (표현식 : 브라우저에 출력할 부분을 표현하기 위함)
<%
for(int i=0;i<list.size();i++){
PdDTO dto = list.get(i);%> // for문 스크립트릿으로 감싸주기
<tr>
<td><%=dto.getNo() %></td>
<td><a href="pdDetail.jsp?no=<%=dto.getNo() %>">
<%=dto.getPdName() %>
</a></td>
<td style = "text-align:right">
<%=df.format(dto.getPrice())%></td>
<td><%=sdf.format(dto.getRegdate())%></td>
</tr>
<% } %> // for
▷ get 방식 '?' 뒤에 경로 넣어주기
- 이거 굉장히굉장히 중요하다고 강조하셨음
<td><a href="pdDetail.jsp?no=<%=dto.getNo() %>"><%=dto.getPdName() %></a></td>
- a 태그 누르면 저 경로 따라서 움직일꺼고,
이동된 pdDetail 에서 getParameter 로 여기서 넣어준 dto.getno 값을 받아서 작업할꺼다
▶ pdDetail.jsp
- 상품정보상세보기 창
- pdList 에서 <a>로 감싸진 상품명을 클릭해서 get 방식으로 도착
<%
String no = request.getParameter("no");
PdDAO dao = new PdDAO();
PdDTO dto = null;
try{
dto = dao.selectByNo(Integer.parseInt(no));
}catch(SQLException e){
e.printStackTrace();
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>pdDetail.jsp</title>
<script type="text/javascript" src="../js/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(function(){
$('#del').click(function(){
if(confirm('삭제하시겠습니까?')){
location.href="pdDelete.jsp?no=<%=no%>";
}
});
});
</script>
</head>
<body>
<h1>상품상세보기</h1>
<p>번호 : <%=no %></p>
<p>상품명 : <%=dto.getPdName()%></p>
<p>가격 : <%=dto.getPrice()%></p>
<p>등록일 : <%=dto.getRegdate()%></p>
<br>
<a href = "pdList.jsp">목록</a>
<a href ="pdEdit.jsp?no=<%=no %>">수정</a>
<a href ="#" id="del">삭제</a>
</body>
</html>

▷ 요청파라미터읽어오기 : String no = request.getParameter("no");
- 바로 위에서 말했듯이 값을 받아오는 작업
▶ pdEdit.jsp
- 상품정보수정 창
- pdDeail.jsp에서 [수정]클릭하면 get방식으로 이동
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>pdEdit.jsp</title>
</head>
<body>
<%
String no = request.getParameter("no");
PdDAO dao = new PdDAO();
PdDTO dto = new PdDTO();
try{
dto = dao.selectByNo(Integer.parseInt(no));
}catch(SQLException e){
e.printStackTrace();
}
%>
<h1>상품수정</h1>
<form method = "post" action="pdEdit_ok.jsp">
<input type ="text" name = "no" value="<%=no %>">
상품명 : <input type = "text" name = "pdName" value ="<%=dto.getPdName() %>"><br>
가격 : <input type = "text" name = "price" value="<%=dto.getPrice()%>"><br><br>
<input type = "submit" value ="등록">
<input type = "reset" value ="취소">
</form>
<br>
<a href = "pdList.jsp">상품목록</a>
</body>
</html>

▷ value = no 들어가는 textbox hidden 처리
- 지금은 보이는데 나중에 hidden 으로 처리해줄꺼임
- 수정 처리시 필요한 no를 hidden field 필드에 넣어준다.
▶ pdEdit_ok.jsp
- dao 에서 update 메서드 가져와서 처리할 창
- pdEdit 에서 action서브밋을 통해 post방식으로 도착! => 인코딩을 먼저 해주자
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>pdEdit_ok.jsp</title>
</head>
<body>
<%
request.setCharacterEncoding("euc-kr");
String no = request.getParameter("no");
String pdName = request.getParameter("pdName");
String price = request.getParameter("price");
PdDAO dao = new PdDAO();
PdDTO dto = new PdDTO();
dto.setNo(Integer.parseInt(no));
dto.setPdName(pdName);
dto.setPrice(Integer.parseInt(price));
try{
int cnt =dao.updatePd(dto);
if(cnt>0){
response.sendRedirect("pdDetail.jsp?no="+no);
}else{
System.out.println("수정실패 !");
response.sendRedirect("pdDetail.jsp?no="+no);
}
}catch(SQLException e){
e.printStackTrace();
}
%>
</body>
</html>
- update 성공 > 상품정보 상세보기 창으로 이동
update 실패 > 상품정보 상세보기 창으로 이동
- 브라우저에 나오는 창이 아니라 db 작업창임
▶ pdDelete.jsp
- 삭제작업 처리하는 창
- pdDetail.jsp 에서 [삭제] 클릭하면 get방식으로 이동
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
String no = request.getParameter("no");
PdDAO dao = new PdDAO();
try{
int cnt = dao.deletePd(Integer.parseInt(no));
if(cnt>0){
response.sendRedirect("pdList.jsp");
}else{
System.out.println("삭제 실패");
response.sendRedirect("pdDetail.jsp?no="+no);
}
}catch(SQLException e){
e.printStackTrace();
}
%>
</body>
</html>
JDBC 프로그래밍 너무 재밌다 ㅠ ㅠ . .
개인프로젝트 DB연동 이해를 향상시키기 위한 JDBC 프로그래밍이었는데
시간가는줄 모르고했다
CSS HTML 하다가 다시 DB 로 오니까 너무 재밌다
기능들을 구현시키고 그걸 보는건 재밌는데
디자인은 너무 재미없다.
만들다가 항상 "예쁘게 보일필요가 있나 ? 기능만 제대로 작동하면 되는거아님? "
생각과 함께 노트북을 접게된다.
암튼 다시 백 수업으로 돌아왔으니 신나게 코딩해야징
'jsp' 카테고리의 다른 글
| [jsp] 답글형게시판 - 파일업로드 (0) | 2022.05.13 |
|---|---|
| [jsp] 게시판 - 답변형게시판 생성,삭제 / 페이징처리 / 조회수증가 (0) | 2022.05.13 |
| [jsp] 서블릿 Servlet (0) | 2022.05.07 |
| [jsp] 웹어플리케이션 / 내장객체 / HTTP 요청메서드 GET,POST (0) | 2022.05.02 |