본문 바로가기
Backend

08월 26일 월 | JSP 04 - JSP CRUD 게시판 생성, 목록, 상세페이지

by 구라미 2019. 8. 26.

내부객체

JSP 내부객체

<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html">
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>request 내부객체의 다양한 메소드 결과</h1>

<%
//1) 한글 인코딩
//-> UTF-8 조합형
//-> EUC-KR 완성형, MS949
request.setCharacterEncoding("UTF-8");

//2) 사용자가 입력한 정보 가져오기
out.println(request.getParameter("uid"));
out.println("<br>");

//3) 요청한 사용자의 다양한 정보
out.println(request.getRemoteAddr()); //요청PC의 IP받아오기
out.print("<hr>");

//basic폴더의 경로
out.print(request.getContextPath());
out.print("<hr>");
out.print(request.getRealPath("/basic"));
out.print("<hr>");
out.print(application.getRealPath("/basic"));


// 내부변수
/* 
request.setAttribute("user", "korea"); 
request.getAttribute("user"); 
 */
request.setAttribute("user", "korea");
//내부변수의 리턴형은 Object이므로
//형변환해서 사용한다.
 
Object obj = request.getAttribute("user");
String str = (String)obj;
out.println(str);

%>

</body>
</html>

 

 

 

톰캣 IPv4 지정

IP주소 6자리 -> 4자리변경

Run -> Run Configurations -> Tomcat Server -> (x)=Arguments -> VM arguemnts에 아래와 같이 추가
    -> 공백1칸 주고 -Djava.net.preferIPv4Stack=true
    -> Apply

 

 

 

 

 

성적프로그램 만들기

 

 

1) 폼형식

<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html">
<html>
<head>
<meta charset="UTF-8">
<title>sungjukForm.jsp</title>
<style>
body {font-family:"Noto Sans CJK KR";}
table {margin: 20px; border-collapse:collapse;}
tr,th,td {padding: 5px 10px; }
input,select {width: 150px; height: 30px; border-radius: 5px; border: 1px solid #bbb; padding: 5px;}
.bottom {padding-top: 20px;}
.submit, .reset {width: 100px; height: 32px; border-radius: 10px;  color: #fff; cursor:pointer; transition: all 0.5s}
.submit {background: #b5b5b5; border: 1px solid #b4b4b4; }
.submit:hover { background: #0050ff; border: #0050ff; }
.reset { background: #ff7878; border:#ff7878;}
.reset:hover { background: #e03f3f;}
</style>
</head>

<body>
	<h1>성적 입력 폼</h1>
	<a href="sungjukList.jsp">[성적목록]</a>	
	<form method="post" action="sungjukIns.jsp">
	<table>
	<tr>
		<th>이름</th>
		<td>
		  <input type="text" name="uname" maxlength="20" required autofocus>
		</td>
	</tr>
	
	<tr>
		<th>국어</th>
		<td>
		  <input type="number" name="kor" size="5" min="0" max="100" placeholder="점수를 입력하세요">
		</td>
	</tr>
	
	<tr>
		<th>영어</th>
		<td>
		  <input type="number" name="eng" size="5" min="0" max="100" placeholder="점수를 입력하세요">
		</td>
	</tr>
	
	
	<tr>
		<th>수학</th>
		<td>
		  <input type="number" name="mat" size="5" min="0" max="100" placeholder="점수를 입력하세요">
		</td>
	</tr>
	
	<tr>
		<th>주소</th>
		<td>
		  <select name="addr">
		  	<option value="Seoul">서울</option>
		  	<option value="Jeju">제주</option>
		  	<option value="Busan">부산</option>
		  	<option value="Suwon">수원</option>
		  </select>
		</td>
	</tr>
	
	<tr>
		<td colspan="2" align="center" class="bottom">
		<input type="submit" value="전송" class="submit">
		<input type="reset" value="취소" class="reset">
	</tr>
	
	</table>
	
	</form>
</body>
</html>

 

스타일을 좀 수정하였다.

 

 

 

2) 성적 데이터 삽입

성적테이블에 데이터를 삽입한다.

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>

<!DOCTYPE html">
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="../css/style.css">
<title>*성적 결과*</title>
</head>
<body>
<h1>성적 입력 폼</h1>
	<p><a href="sungjukList.jsp">[성적목록]</a></p>

<%
	//한글 인코딩
	request.setCharacterEncoding("UTF-8");	
	
	//입력정보 가져와서 변수에 담기	
	String uname = request.getParameter("uname").trim();
	int kor = Integer.parseInt(request.getParameter("kor"));
	int eng = Integer.parseInt(request.getParameter("eng"));
	int mat = Integer.parseInt(request.getParameter("mat"));
	String addr = request.getParameter("addr").trim();
		
	//평균구하기
	int aver=(kor+eng+mat)/3;
	
	//출력
	out.println("이름:" + uname + "<br>");
	out.println("국어:" + kor + "<br>");
	out.println("영어:" + eng + "<br>");
	out.println("수학:" + mat + "<br>");
	out.println("평균:" + aver + "<br>");
	out.println("주소:" + addr + "<br>");
	out.println("요청IP:" + request.getRemoteAddr() + "<br>");
	
	
	try{
		
		//Oracle DB 저장
		Class.forName("oracle.jdbc.OracleDriver");
		Connection con = DriverManager.getConnection
		("jdbc:oracle:thin:@//localhost:1521/xe","java0514","1234");
		
		
		StringBuilder sql = new StringBuilder();
		//SQL문 작성
		sql.append(" INSERT INTO SUNGJUK(SNO,UNAME,KOR,ENG,MAT,AVER,ADDR,WDATE) "); //칼럼의 순서는 이곳에서.
		sql.append(" VALUES((SELECT NVL(MAX(SNO),0)+1 FROM SUNGJUK) ");
		sql.append(",?,?,?,?,?,?,SYSDATE) "); //직접 쓰는 것은 절대상수 값이다. 
		
		// 4) SQL문 변환
		PreparedStatement pstmt = null;
		pstmt = con.prepareStatement(sql.toString());				
		// ?순서와 ?에 들어갈 자료형 주의
		pstmt.setString(1, uname);
		pstmt.setInt(2, kor);
		pstmt.setInt(3, eng);
		pstmt.setInt(4, mat);
		pstmt.setInt(5, aver);
		pstmt.setString(6, addr);
		
		//실행
		int result = pstmt.executeUpdate();
		if(result == 0){
			out.println("<p>성적입력이 실패했습니다.</p>");
			out.println("<p><a href='javascript:history.back()'>다시시도</a></p>");
		}else {
			out.println("<script>");
			out.println("alert('성적이 입력되었습니다.');");
			out.println("location.href='sungjukList.jsp';");
			out.println("</script>");
		}
		
	} catch (Exception e){
		out.print("실패!"+e);
	}

	
	
%>
	<button onclick="javascript:history.back()" >뒤로가기</button>


</body>
</html>

위 폼에 이렇게 작성하면 저 코드가 실행되며 데이터가 테이블에 삽입된다.

 

 

 

3) 성적 리스트

입력된 데이터를 조회하는 코드

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>

<!DOCTYPE html">
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="../css/style.css">
<style>
a{color: inherit; text-decoration:none;}
tr{cursor:pointer; opacity:.8;}
tr:hover {opacity: 1; color: #0050ff;}
tr:nth-child(even){background: #eee;}

</style>
<title>sungjukList</title>
</head>
<body>
	<h1>성적목록</h1>
	<a href="sungjukForm.jsp">[성적쓰기]</a>
	
	<table>
	<%
	try{
		
		//Oracle DB 저장
		Class.forName("oracle.jdbc.OracleDriver");
		Connection con = DriverManager.getConnection
		("jdbc:oracle:thin:@//localhost:1521/xe","java0514","1234");
		
		
		StringBuilder sql = new StringBuilder();
		//SQL문 작성
		sql.append(" SELECT	SNO, UNAME, KOR, ENG, MAT, AVER, ADDR, WDATE "); 
		sql.append(" FROM SUNGJUK "); 
		sql.append(" ORDER BY WDATE DESC ");
				
		PreparedStatement pstmt = null;
		ResultSet rs = null; //
		
		pstmt = con.prepareStatement(sql.toString());				
		rs=pstmt.executeQuery(); //SELECT문에서 사용한다. SELECT한 테이블이 담김.
		//cursor는 불러온 값 가장 처음것을 가리킴
		//cursor : 가리키는 값
		if(rs.next()){ //cursor가 존재하는지?
			
			out.println("<tr>");
			out.println("<th colspan='8'>============================ 성적표 ============================</th>");
			out.println("</tr>");
			out.println("<tr>");
			out.println("<th>번호</th>");
			out.println("<th>이름</th>");
			out.println("<th>국어</th>");
			out.println("<th>영어</th>");
			out.println("<th>수학</th>");
			out.println("<th>평균</th>");
			out.println("<th>주소</th>");
			out.println("<th>등록일</th>");
			out.println("</tr>");
				
			do{ //칼럼명으로 접근한다.
 				%>	
					 				
 				<tr>
 					<td><%=rs.getInt("sno")%></td>
 					<td><a href='sungjukRead.jsp?sno=<%=rs.getInt("sno")%>'><%=rs.getString("uname")%></a></td>
 					<td><%=rs.getInt("kor")%></td>
 					<td><%=rs.getInt("eng")%></td>
 					<td><%=rs.getInt("mat")%></td>
 					<td><%=rs.getInt("aver")%></td>
 					<td><%=rs.getString("addr")%></td>
 					<td><%=rs.getString("wdate")%></td> 					
 				</tr> 				
 				<%
				
			} while(rs.next());
			
		}else{
			out.println("<tr>");
			out.println("<td>자료없음</td>");
			out.println("</tr>");
		}
		
		
	} catch (Exception e){
		out.print("실패!"+e);
	}
	
	%>	
	</table>
</body>
</html>

 

성적테이블 CRUD

sungjukForm.jsp 성적쓰기 -> sungjukIns.jsp

sungjukList.jsp 성적목록 -> sungjukRead.jsp 상세보기 (수정, 삭제 기능이 있어야한다.)

 

수정,삭제의 부모는 상세보기

 

 

상세보기는 -> 하나만 보기 -> 유일성이 만족되는 칼럼

 

 

페이지이동

<a href=""></a>

location.href=""

 

 

 

 

 

 

 

 

 

 

댓글