jsp

[jsp] 인코딩 / 웹,JDBC 프로그래밍 예제 : pd테이블

sian han 2022. 5. 4. 22:35

※ 인코딩

  - 컴퓨터가 이해할 수 있는 코드 형태로 만들어 주는 작업

 

 ▶ 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 로 오니까 너무 재밌다

기능들을 구현시키고 그걸 보는건 재밌는데

디자인은 너무 재미없다.

만들다가 항상 "예쁘게 보일필요가 있나 ? 기능만 제대로 작동하면 되는거아님? "

생각과 함께 노트북을 접게된다. 

암튼 다시 백 수업으로 돌아왔으니 신나게 코딩해야징