일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 모조칼럼
- 부트스트랩
- github
- git
- JavaScript
- sql developer
- distinct
- ||
- Oracle SQL
- 이클립스
- 한글 인코딩
- oracle
- HTTP Status 404
- rownum
- HTTP Status 500
- JSP
- 성적프로그램
- Java
- alias
- Oracle DB
- HTML
- Bootstrap
- SQL
- CRUD
- jQuery
- 답변형 게시판
- 과정평가형
- group by
- tomcat
- 제약조건
초급의 끄적거림
[JSP] request내부객체 / 성적 프로그램 만들기1 / 한글인코딩 본문
[09_request내부객체.jsp]
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>09_request내부객체.jsp</title>
</head>
<body>
<h1>*request 내부객체의 다양한 메소드*</h1>
<form aciton="09_requestok.jsp">
아이디 : <input type="text" name="uid">
<br>
<input type="submit" value="request내부객체">
</form>
</body>
</html>
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>09_requestok.jsp</title>
</head>
<body>
<h1>*request 내부객체의 다양한 메소드 결과*</h1>
<%
//1) 한글인코딩
//→ UTF-8 조합형, EUC-KR(=MS949) 완성형
//→ 대소문자 구분 없음
request.setCharacterEncoding("UFT-8");
//2) 사용자가 입력한 정보 가져오기
out.print(request.getParameter("uid"));
out.print("<hr>");
//3) 요청한 사용자의 다양한 정보
out.print(request.getRemoteAddr()); //★가장 중요★ 요청PC의 IP확인
out.print("<hr>");
%>
⊙ IP버전 verison 4에 해당하는 것만 쓸 수 있도록 설정하는 것
⊙ IPv4와 IPv6의 주소 반환 문제는 톰캣 WAS 서버에서의 설정된 값으로 시스템의 특정 서버 환경에 따라 달라짐
⊙ 그렇기 때문에 만약 내 개발 서버의 환경에서 IPv6로 반환하고 있는데, IPv4로 반환받도록 하고 싶다면 톰캣 실행 시, 전달되는 JVM(Java Virtual Machine)의 환경 변수에 다음 설정 값을 추가함
⊙ '공백1칸 주고 -Djava.net.preferIPv4Stack=true' 넣기
⊙ 이 설정을 마친 경우, 서버를 멈췄다가 재실행 ('서버 우클릭' - 'stop' - 후 'start')
⊙ IP주소가 바뀐 것을 확인할 수 있음
⊙ 내 컴퓨터에서 submit 했기 때문에 자기를 나타내는 IP 주소가 나오게 됨
[다양한 정보를 확인할 수 있는 다른 메소드들 확인]
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>09_requestok.jsp</title>
</head>
<body>
<h1>*request 내부객체의 다양한 메소드 결과*</h1>
<%
//1) 한글인코딩
//→ UTF-8 조합형, EUC-KR(=MS949) 완성형
//→ 대소문자 구분 없음
request.setCharacterEncoding("UFT-8");
//2) 사용자가 입력한 정보 가져오기
out.print(request.getParameter("uid"));
out.print("<hr>");
//3) 요청한 사용자의 다양한 정보
out.print(request.getRemoteAddr()); //★ 가장 중요 ★ 요청PC의 IP확인
out.print("<hr>");
out.print(request.getRemoteHost());
out.print("<hr>");
out.print(request.getRemotePort());
out.print("<hr>");
//-------------------------------------------------------------------------------------------------------------------------------
// /basicWeb (가상의 디렉토리를 불러 올때 씀 )
out.print(request.getContextPath());
out.print("<hr>");
// /basicWeb/basic/09_requestok.jsp (사용자가 요청한 명령어만)
out.print(request.getRequestURI());
out.print("<hr>");
// http://localhost:8090/basicWeb/basic/09_requestok.jsp (사용자 요청한 명령어 전체)
out.print(request.getRequestURL());
out.print("<hr>");
//-------------------------------------------------------------------------------------------------------------------------------
// 내컴퓨터 입자에서 /basic폴더의 실제 물리적인 경로
// D:\java0514\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\basicWeb\basic
// 이클립스에서 톰캣서버를 실행했기 때문에 메타데이터가 있는것이고 다른 곳에서 만들면 생기지 않음
out.print(request.getRealPath("/basic"));
out.print("<hr>");
out.print(application.getRealPath("/basic"));
out.print("<hr>");
//--------------------------------------------------------------------------------------------------------------------------------
//내부변수
//request.setAttribute("변수명", 값);
//request.getAttribute("변수명");
request.setAttribute("user", "fullmoon");
//내부변수의 리턴형은 Object이므로 형변환을 해서 사용한다
Object obj=request.getAttribute("user");
String str=(String)obj;
out.println(str);
%>
</body>
</html>
[sungjuk.sql]
⊙ sungjuk.sql 파일 만들기
⊙ 이미 존재하는 sungjuk 테이블을 drop 하고 다시 create 할 것
[sungjukForm.jsp]
⊙ 'sungjukForm.jsp' 는 성적을 입력하는 메인 화면에 해당.
⊙ form 이 실행되면 sungjukIns.jsp를 움직이게 됨
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>sungjukForm.jsp</title>
</head>
<body>
<h1>*성적 입력 폼*</h1>
<p><a href="sungjukList.jsp>[성적목록]</a></p>
<form method="post" action="sungjukIns.jsp">
<table border="1">
<tr>
<th>이름</th>
<td>
<input type="text" name="uname" maxlength="20" required autofocus> <!-- autofocus 페이지 로드 시 자동으로 해당 입력창에 포커스가 가도록 한다. -->
</td>
</tr>
<tr>
<th>국어</th>
<td>
<input type="number" name="kor" size="5" min="0" max="100" placeholder="숫자입력"> <!-- autofocus 자동커서 -->
</td>
</tr>
<tr>
<th>영어</th>
<td>
<input type="number" name="eng" size="5" min="0" max="100" placeholder="숫자입력"> <!-- autofocus 자동커서 -->
</td>
</tr>
<tr>
<th>수학</th>
<td>
<input type="number" name="mat" size="5" min="0" max="100" placeholder="숫자입력"> <!-- autofocus 자동커서 -->
</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">
<input type="submit" value="전송">
<input type="reset" value="취소">
</td>
</tr>
</table>
</form>
</body>
</html>
[sungjukIns.jsp]
<%@ 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>
<title>sungjukIns.jsp</title>
</head>
<body>
<h1>*성적 결과*</h1>
<p><a href="sungjukForm.jsp">[성적쓰기]</a></p>
<%
//한글 인코딩
request.setCharacterEncoding("UTF-8");
//입력정보 가져와서 변수에 담기
String uname=request.getParameter("uname").trim();
int kor=Integer.parseInt(request.getParameter("kor").trim());
int eng=Integer.parseInt(request.getParameter("eng").trim());
int mat=Integer.parseInt(request.getParameter("mat").trim());
String addr=request.getParameter("addr").trim();
//평균 구하기
int aver=(kor+eng+mat)/3;
//출력
out.print("이름 : " + uname +"<hr>");
out.print("국어 : " + kor +"<hr>");
out.print("영어 : " + eng +"<hr>");
out.print("수학 : " + mat +"<hr>");
out.print("평균 : " + aver +"<hr>");
out.print("주소 : " + addr +"<hr>");
out.print("요청IP : " + request.getRemoteAddr() +"<hr>");
%>
</body>
</html>
[Oracle DB 저장]
⊙ DB 연결자체를 어떻게 해달라고 '2차평가문제'에 공개 되어 있음
⊙ 계속 에러가 발생하기 때문에 lib 폴더에 'ojdb6.jar'를 넣어줌
⊙ lib 폴더의 경로 : basicWeb/WebContent/WEB-INF/lib
⊙ 정보처리산업기사 평가문제 공개용을 바탕으로 Oracle DataBase Connection의 경로를 찾아서 넣어줌
<%
//<위의 코드에 연결>
//Oracle DB 저장 ---------------------------------------------------------------------------
try{
//1) oracle 드라이버 (ojdbc9.jar)
Class.forName("oracle.jdbc.OracleDriver");
//2) Oracle DB 연결
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/xe","java0514","1234");
PreparedStatement pstmt=null;
//3) SQL문 작성
StringBuilder sql=new StringBuilder();
sql.append(" INSERT INTO sno, uname, kor, eng, mat, aver, addr ");
sql.append(" VALUES((SELECT NVL(MAX(sno), 0)+1 FROM sungjuk) ");
sql.append(" , ?, ?, ?, ?, ?, ?, sysdate) ");
//4) SQL문 변혼
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);
//5) SQL문 실행
int cnt=pstmt.executeUpdate();
if(cnt==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>");
}//if end
}catch(Exception e){
out.println("ㅠ실패ㅠ" +e);
}//try end
%>
⊙ sungjukIns.jsp에서 3) 번을 작성할 때 성적칼럼을 mat 까지 밖에 쓰지 않아서 뒤에 더 나와야하는 'aver, addr, wdate' 없어서 값이 많아져서 나는 에러
⊙ HTTP Status 404 에러는 1. 실제 파일이 없거나 2. 오타가 있을 경우 발생하는 에러
⊙ 아직은 5) SQL문 실행 때 연결한 'out.println(" location.href='sungjukList.jsp';"); ' 가 존재 하지 않기 때문에 sungjukList.jsp 가 만들어지면 됨
⊙ 에러가 나서 제대로 내용이 들어갔는지 확인할 수 없기 때문에 'sqlplus' 창을 이용하여 확인 가능
[sungjukList.jsp]
1) 입력한 자료가 '성적 목록' 에 잘 들어갔는지 확인
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8> <!-- page의 utf-8과 meta의 utf-8 확인 해줄 것 -->
<title>sungjukList.jsp</title>
/head>
<body>
<h1>*성적 목록*</h1>
<p><a href="sungjukForm.jsp">[성적쓰기]</a></p>
<table>
<tr>
<th>이름</th>
<th>국어</th>
<th>영어</th>
<th>수학</th>
<th>등록일</th>
</tr>
<%
try{
Class.forName("oracle.jdbc.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/xe","java0514","1234");
StringBuilder sql=new StringBuilder();
sql.append(" SELECT sno, uname, kor, eng, mat, wdate ");
sql.append(" FROM sungjuk ");
sql.append(" ORDER BY wdate DESC");
PreparedStatement pstmt=con.prepareStatement(sql.toString());
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
do{
%>
<tr>
<!-- 1. 목록페이지에서 sno 를 넘기는 것, 아래의 sno도 변수에 해당 -->
<td><a href ='sungjukRead.jsp?sno=<%=rs.getInt("sno") %>'><%=rs.getString("uname") %></a></td> <!-- ?를 넣으면서 url에 다 나타나는 get방식으로 다 나타남. '이름'에 링크를 걸어서 '상세보기' 페이지를 만들 것, 이렇게 되면 이름에 링크가 발생함 -->
<td><%=rs.getInt("kor") %></td>
<td><%=rs.getInt("eng") %></td>
<td><%=rs.getInt("mat") %></td>
<td><%=rs.getString("wdate")%></td>
</tr>
<%
}while(rs.next());
}else{
out.println("<tr>"); //게시판의 목록에 글이 없다는걸 보여주기 위함
out.println(" <td colspan='5'>글 없음T.T</td>");
out.println("</tr>");
}//if end
}catch(Exception e){
out.println("실패 : "+e);
}//try end
%>
</table>
</body>
</html>
2) 자료가 없을 경우, 실패 메세지 확인
- 글이 없다는 알림을 확인하기 위해서 넣었던 행을 삭제
- 메인 화면 왼쪽에 [성적목록] 에서 '글 없음T.T' 메세지를 확인 할 수 있음
[성적테이블 CRUD]
Create - 행추가 insert
Read - 조회 select
Update - 수정 update
Delete - 삭제 delete
⊙ sungjukForm.jsp 성적쓰기 → sungjukIns.jsp
⊙ sno 를 넘기면서 서로 다른 페이지를 연결
sno sno
⊙ sungjukList.jsp 성적목록 -----→ sungjukRead.jsp 상세보기 -----→ 삭제 sungjukDel.jsp 콕 짚어서 누구를 지울지 알아야 하기 때문에 PK가 필요함) -----→ 수정 (sungjukUpdate.jsp)
⊙ sungjukList.jsp 성적목록 → sungjukRead.jsp 상세보기 → 수정 / 삭제 (수정삭제 페이지의 부모페이지 : sungjukRead)
+) 이름을 누르면 작성한 글목록이 뜨게 하기 위해서 '이름'에 링크를 걸어줌
⊙ sungjukForm.jsp 성적쓰기 → sungjukIns.jsp
⊙ sungjuk.sql로 가서 '상세보기' 적용해보기
⊙ <sungjukList>에서 url에 sno로 상세페이지 표시 ?가 들어가면서 get방식의 url이 나타남
⊙ sungjukList.jsp와 sungRead.jsp는 별개의 페이지로 서로 전달을 주고받는 식 (연결된 것으로 볼 수 있지만 서로 주고받고 전달하는 것)
⊙ sungRead.jsp (상세보기) 페이지는 sungjukList.jsp(목록) 페이지를 부모로 삼음
⊙ 목록페이지에서 sno 를 넘기는 것, 아래의 sno도 변수에 해당
⊙ url이 바뀐 것을 볼 수 있음→ '장만월' sno=1 이라는 표시가 나옴 / '구찬성' sno=2 / '고청명' sno=3 이 나타남
'JSP' 카테고리의 다른 글
[JSP] JAVA 빈즈 (id, 객체 등) 개요 / 예제 비교 (0) | 2019.08.28 |
---|---|
[JSP] 성적프로그램 2 (0) | 2019.08.27 |
[JSP] 내부객체 / Scope의 종류 / form의 기초 / request.getParameter("") / HTTP Status 404 (0) | 2019.08.23 |
[JSP] 성적프로그램 / 배열 / 메소드 / <%! %> (0) | 2019.08.22 |
[JSP] Eclipse에 Chrome 브라우저 등록 (0) | 2019.08.22 |