-
Wed/Jan/22 [Java] day17. 실습_방명록Study/2020 국비교육_Java 2020. 1. 22. 10:06
Wed/Jan/22
[Java] day17.
실습_방명록
서버 server 개념별 분류
- SW : Tomcat..
- HW : Xenom...
주소는 원래 서버의 고정 IP 주소인데, Domain 부여
일반적으로는 변동 ip 주소 사용 - 한정된 자원, broadband 업체에서 보유한 ip list 중 하나를 사용할 때 마다 할당하는 것
어제 실습한 내용 정리
Web Brower - Web Application - Web Serber - JDBC - mySQL DB
이 구조를 반드시 명확하게 알고 넘어가야, 추후에 Spring 이 편하다
Web Application
-
Board
-
Web Content : index.html, list.jsp, write_form, write, detail_form, modify, modify_form, hit.jsp 등
-
Java : DBClass ( selectAll, update, insert 등 method), ChangeEncodeClass
-
mySQL DB : board_db > board_table > idx, hit contents, write,...
Web Browser
-
HTTP hyper text transper protocol
-
HTTPS hyper text transper protocol secret ; 보안 설정된 protocol
-
HTML hyper text markup language
-
FTP file transfer protocol
Web 주소 구성
http : // localhost:8080/board/index.html
-
http - internet
-
localhost:8080 : 서버 주소 : 포트
-
board : project
-
index.html.. : 요청파일
-
엔터를 누르면 요청
※ ERROR MESSAGE
-
404
-
서버가 구동하지 않는 경우 : Tomcat
-
파일 경로가 잘못된 경우 ; 대소문자도 구별
-
파일이 없는 경우
-
-
500 : 내부 코드 오류
null pointer error는 반드시 웹 주소가 어떻게 되어있는지 자세히 확인! 특히 공백 여부 확인
브라우저는 <!DOCTYPE HTML> ~~~ </HTML>까지 BufferedReader 방식으로 읽어서 compiling
HTML5.0 방식, 그 이전 방식의 file type은 동일, compiler는 별도 → browser가 코드를 읽으면서 어떤 compiler를 구동할 건지 결정, 특히 <!DOCTYPE HTML 뒤에 5.0 이전 스타일인지 확인>
HTML / CSS / JavaScript 모두 Brower compile
JSP 는 Tomcat server 에서 compile! compiling 순서
-
Tomcat에서 ***.jsp.java
-
***.jsp.class > object 생성 ; 이때 오류가 나면 browser로 error msg 전송
Data Flow
순서 program file 1 HTML index.html <a href = "write_form.jsp"> 글쓰기 </a> href = link로 이동/요청 2 JSP write_form.jsp
<%@ page *** %> <%에 빨간 줄 가는 경우 == servlet에서 인식 못해서, 작동만 잘되면 상관 없음 <form action = "write.jsp" method = "get"> </form> form tag 중요 <input type = "text" name = "***"> 여기서 name은 server로 전송되는 parameter <input type = "submit" value = "***"> submit
form tag 안의 모든 value들을 action에 지정한 파일로 전송
<input type = "reset" value = "***"> reset
form tag 안의 모든 입력값을 초기화
따라서 submit과 reset은 반드시 form tag 안에 위치해야 함 3 Tomcat
server
write_form.jsp → write_form.jsp.java
→ write_form.jsp.class → object 생성
HTML 형태로 compiling
4 HTML
write_form.jsp
화면 출력
http://~~~~/write.jsp?write=***&title=***&contents=***
submit으로 입력된 values 전송 5 JSP
write.jsp
data가 "writer", "title", "contents" parameter로 전송됨
→ getParameter("writer")
이걸 요청request 하기 때문에
→ request.getParameter("writer")
이 value의 type은 String
→ String w = request.getParameter("writer")
6 JDBC
입력값 전송 → mySQL
Class.forName(driver_manager)
connection = DriverManager.getConnection(db_url, db_id, db_pw)
DBClass.dataInsert(writer, title, contents) method 호출해서 입력
7 JAVA
DBWriteClass
dataInsert(writer, title, contents) method
int n = conn.createStatemet.executeUpdate("insert into board_table (writer, title, contents) values ('writer','title','contents'")
status = (n>0) true : false ;
* writer/title/content 모두 require를 안걸어놓았을때, null 값이 입력되지 않게 하려면
if(w==null&&t==null&&c==null) out.print("err")
8 JSP Write.jsp
위에서 true 값이 나왔는지 확인,
이에 대해 반응/응답 response 해서 Redirect
if (status==true) response.sendRedirect(list.jsp);
실습_
입력/수정/삭제 가능한 방명록 만들기
1. 구조
main.jsp main page
버튼 : list로 이동 (onclick = "location.href = 'vlist.jsp'")
vlist.jsp 방명록 : 번호 no / 내용(if(context.length>20) 20글자 substring (0,20) +...// else ) / 작성자 writer
버튼 : 방명록 쓰기, 방명록 삭제
write_form.jsp 방명록 쓰기 : 비밀번호pw, 작성자writer, 내용context, 저장, 취소
write.jsp mySQL table에 values 입력
성공 시 vlist.jsp로 이동 : if(status==true) response.sendRedirect("vlist.jsp")
mySQL no int not null auto_increment // writer varchar(30) not null // content text not null// pw varchar(20) not null 2. mySQL table 생성
mysql> create table list ( -> no int primary key not null auto_increment, -> writer varchar(30) not null, -> content text not null, -> pw varchar(20) not null); mysql> desc list; +---------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+----------------+ | no | int(11) | NO | PRI | NULL | auto_increment | | writer | varchar(30) | NO | | NULL | | | content | text | NO | | NULL | | | pw | varchar(20) | NO | | NULL | | +---------+-------------+------+-----+---------+----------------+
3. ChangeEcode.class 생성
4. DB.class 생성
package com.wjh.guest; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; public class DB { public DB(){ } static Connection conn = null; public static void dbCon(){ String driver_name = "com.mysql.jdbc.Driver"; String db_url = "jdbc:mysql://localhost:3306/vlist"; try { Class.forName(driver_name); System.out.println("SUCCESS_Driver Loading"); conn = DriverManager.getConnection(db_url, "root", "1234"); System.out.println("SUCCESS_DB_Connection"); } catch (ClassNotFoundException e) { System.out.println("ERR_Driver_Loading : "+e.getMessage()); } catch (SQLException e) { System.out.println("ERR_DB_Connection : "+e.getMessage()); } } // dbCon() public static boolean dataInsert(String w, String t, String p) { dbCon(); boolean status = false; try { int n = conn.createStatement().executeUpdate("insert into list (writer, content, pw) values('"+ChangeEncode.toLatin(w)+"','"+ChangeEncode.toLatin(t)+"','"+ChangeEncode.toLatin(p)+"')"); // insert into list (writer, content, pw) values('w','t','p'); status =(n>0)? true : false; } catch (SQLException e) { System.out.println("ERR_dataInsert : "+e.getMessage()); } finally{ try { conn.close(); } catch (SQLException e) { System.out.println("ERR_dataInsert_finally : "+e.getMessage()); } } return status; } // dataInsert() public static ResultSet showAll(){ dbCon(); ResultSet rs=null; try { rs = conn.createStatement().executeQuery("select * from list order by no desc"); return rs; } catch (SQLException e) { System.out.println("ERR_dataInsert : "+e.getMessage()); return null; } } // showAll public static ResultSet showOne(String num){ dbCon(); ResultSet rs = null; try { rs = conn.createStatement().executeQuery("select * from list where no = "+num); return rs; } catch (SQLException e) { System.out.println("ERR_showOne : "+e.getMessage()); return null; } } public static boolean delOne(String num) { dbCon(); boolean status = false; try { int n = conn.createStatement().executeUpdate("delete from list where no = "+num); status =(n>0) ? true : false; } catch (SQLException e) { System.out.println("ERR_delOne : "+e.getMessage()); } finally{ try { conn.close(); } catch (SQLException e) { System.out.println("ERR_delOne_finally : "+e.getMessage()); } } return status; } // delOne public static boolean updateOne(String num, String writer, String content){ dbCon(); boolean status = false; try { int n = conn.createStatement().executeUpdate("update list set writer = '"+ChangeEncode.toLatin(writer)+"', content = '"+ChangeEncode.toLatin(content)+"' where no = "+num); status = (n>0)? true : false; } catch (SQLException e) { System.out.println("ERR_updateOne : "+e.getMessage()); } finally{ try { conn.close(); } catch (SQLException e) { System.out.println("ERR_updateOne_finally : "+e.getMessage()); } } return status; } // updateOne } // DB Class
jsp 페이지 구성
main.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Main</title> </head> <body bgcolor = #fffeb3> <h1><font color = #fb2e01>Hello, World!</font></h1> 어서오세여~ <p> <input type = "button" value = "방명록" onclick = "location.href='vlist.jsp'" /> 쓰러가기! </body> </html>
vlist.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.wjh.guest.DB, com.wjh.guest.ChangeEncode, java.sql.SQLException, java.sql.ResultSet" %> <% String no = null; String writer = null; String text = null; ResultSet rs = DB.showAll(); rs.beforeFirst(); %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Visitor List</title> </head> <body bgcolor = #fffeb3> <h2><font color = #fb2e01>방명록입니다!</font></h2> <table border = 5 > <tr> <th >몇 번째</th> <th>누가</th> <th>무슨 말을 남겼나</th> </tr> <% while(rs.next()) { no = rs.getString("no"); writer = rs.getString("writer"); if(writer.length()>10) writer = writer.substring(0,10) + "..."; text = rs.getString("content"); if(text.length()>20) text = text.substring(0,19)+"..."; %> <tr> <td><%=no%></td> <td><%=ChangeEncode.toUnicode(writer)%></td> <td><a href="detail.jsp?no=<%=no%>"><%=ChangeEncode.toUnicode(text)%></a></td> </tr> <%} %> </table> <p> <input type = "button" value = "나도 쓸래" onclick = "location.href='write_form.jsp?'"><p> <input type = 'button' value = "MAIN" onclick="location.href='main.jsp'"> </body> </html>
write_form.jsp write_form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.wjh.guest.DB, java.sql.SQLException, java.sql.ResultSet, com.wjh.guest.ChangeEncode" %> <% %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Write</title> </head> <body bgcolor = #fffeb3> <h2><font color = #fb2e01>방명록을 남겨주세요~</font></h2> <form action="write.jsp" method = get> <table> <tr> <td>작성자</td><td><input type = text size = 47 name = "writer" placeholder = "이름을 적어주세요" required = "required" /></td> </tr> <tr> <td>내용</td><td><textarea cols = 50 rows = 15 name = "content" required = "required" placeholder = "바르고 고운말로 써주세여" ></textarea></td> </tr> <tr> <td>비밀번호</td><td><input type = "password" name = pw size = 20 required = "required" /> </td> </tr> </table> 20byte 이내로 작성해주세요 <p> <input type = 'reset' value = "다시쓰기"> <input type = "button" value = "글목록 돌아가기" onclick="location.href='main.jsp'"> <input type = "submit" value = "작성완료!" onclick="location.href='write.jsp'"> </form> </body> </html>
write.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.wjh.guest.DB, java.sql.SQLException, java.sql.ResultSet, com.wjh.guest.ChangeEncode" %> <% String writer = request.getParameter("writer"); String text = request.getParameter("content"); String pw = request.getParameter("pw"); boolean status = DB.dataInsert(writer, text, pw); //(writer, content, pw) if(status==true) { response.sendRedirect("vlist.jsp"); } %>
detail.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import = "com.wjh.guest.DB, com.wjh.guest.ChangeEncode, java.sql.ResultSet, java.sql.SQLException" %> <% ResultSet rs = DB.showOne(request.getParameter("no")); String no = null; String writer = null; String text = null; String pw = null; rs.beforeFirst(); while(rs.next()) { no =rs.getString("no"); writer = rs.getString("writer"); text = rs.getString("content"); pw = rs.getString("pw"); } String type = ""; %> <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Detail</title> </head> <body bgcolor = #fffeb3> <h1><font color = #fb2e01><%=no%>번 글의 디테일을 보여줍니다</font></h1> <table border = 1> <tr><td>누가</td><td><%=ChangeEncode.toUnicode(writer)%></td></tr> <tr><td>뭐라고했게요</td><td><%=ChangeEncode.toUnicode(text)%></td></tr> </table> <p> <form action = "pw_check.jsp" method = "get" > <table border = 1> <tr> <td>비밀번호 입력</td> <td> <input type = "hidden" size = 20 readonly = "readonly" name = "no" value = <%=no%>> <input type = "password" name = "pw"><p> <input type = 'radio' value = 'renew' name = "type" checked> 다시쓰기 <input type = 'radio' value = 'delete' name = "type" checked> 글삭제<p> <input type = "submit" value = "가즈아" onclick = "location.href = 'pw_check.jsp"> </td> </tr> </table> </form> <p> <input type = "button" value = "잘봤습니다" onclick = "location.href = 'vlist.jsp'"/> <input type = "button" value = "MAIN으로" onclick = "location.href = 'main.jsp'"/> </body> </html>
rewrite_form.jsp rewrite_form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.wjh.guest.ChangeEncode, com.wjh.guest.DB, java.sql.SQLException, java.sql.ResultSet" %> <% String no = request.getParameter("no"); String writer = null; String text = null; ResultSet rs = DB.showOne(no); rs.beforeFirst(); while(rs.next()){ writer = ChangeEncode.toUnicode(rs.getString("writer")); text = ChangeEncode.toUnicode(rs.getString("content")); } %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Renew</title> </head> <body bgcolor = #fffeb3> <h1><font color = #fb2e01><%=no%>번 글을 다시 써봅시다</font></h1> <form action = rewrite_check.jsp method = 'get'> <table> <tr> <td>누가</td> <td><input type = hidden name = no value = <%=no%>> <input type = text size = 20 name = "writer" placeholder = "<%=writer%>" required = "required" /></td> </tr> <tr> <td>다른<br>말로</td> <td><textarea cols = 21 rows = 10 name = content placeholder = "내용을 다시 써봐용" required = "required" /><%=text%></textarea></td> </tr> <tr> <td>다쓰셨으면..</td> <td><input type = "submit" value = "작성완료!" onclick="location.href='rewrite_check.jsp'"> </td> </tr> <tr> <td>다시쓰고 싶으면..</td> <td><input type = 'reset' value = "초기화!!"></td> </tr> <tr> <td>귀찮으면..</td> <td><input type = 'button' value = "백투더 리스트!" onclick="location.href='vlist.jsp'"></td> </tr> </table> </form> </body> </html>
pw_check.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import = "com.wjh.guest.DB, com.wjh.guest.ChangeEncode, java.sql.SQLException, java.sql.ResultSet" %> <% String pw = request.getParameter("pw"); String no = request.getParameter("no"); String type = request.getParameter("type"); ResultSet rs = DB.showOne(no); rs.first(); String real_pw = rs.getString("pw"); if((type!=null)&&(no!=null)&&(pw!=null)&&real_pw.equals(pw)) { if(type.equals("delete")) response.sendRedirect("delete_check.jsp?no="+no); else response.sendRedirect("rewrite_form.jsp?no="+no); } else response.sendRedirect("error.jsp"); %>
rewrite_check.jsp rewrite_check.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.wjh.guest.DB, java.sql.SQLException, java.sql.ResultSet, com.wjh.guest.ChangeEncode" %> <% String num = request.getParameter("no"); String writer = request.getParameter("writer"); String text = request.getParameter("content"); if( (num==null) || (writer==null) || (text==null)) response.sendRedirect("error.jsp"); %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Write Check</title> </head> <body bgcolor = #fffeb3> <h2><font color = #fb2e01><%=num%>번 글 다시 작성한 내용을 확인합니다</font></h2> <table border = 1> <tr><td>누가</td> <td><%=request.getParameter("writer")%></td></tr> <tr><td>뭐라썼나</td> <td><%=request.getParameter("content")%></td></tr> </table> <p> <form action = "rewrite_order.jsp" method = "get"> <input type="hidden" name = "no" value = <%=num%>> <input type="hidden" name = "writer" value = <%=writer%>> <input type="hidden" name = "content" value = <%=text%>> <input type = "submit" value = "최종확인완료!" onclick="location.href = 'rewrite_order.jsp'"> <input type = "button" value = "취소하고 목록으로..." onclick="location.href = 'vlist.jsp'"> </form> </body> </html>
error.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ERROR</title> </head> <body> <h1>ERROR</h1><p> 뭔가 잘못 입력했어요...;; <p> <input type = "button" value = "MAIN" onclick = "location.href = 'main.jsp'"/> <input type = "button" value = "LIST" onclick = "location.href = 'vlist.jsp'"/> </body> </html>
delete.jsp delete.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String no = request.getParameter("no"); %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>DELETE</title> </head> <body bgcolor = #fffeb3> <h1><font color = #fb2e01>진짜 지울까여?</font></h1> <% out.print(request.getParameter("no")+"번 글을 지웁니다!"); %> <p> <input type = "submit" value = "지운다!" onclick = "location.href='delete.jsp?no=<%=no%>'"/> <p> <input type = "button" value = "글목록 돌아가기" onclick = "location.href='vlist.jsp'"/> </body> </html>
delete_check.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import = "com.wjh.guest.DB, com.wjh.guest.ChangeEncode, java.sql.SQLException, java.sql.ResultSet" %> <% String pw = request.getParameter("pw"); String no = request.getParameter("no"); String type = request.getParameter("type"); ResultSet rs = DB.showOne(no); rs.first(); String real_pw = rs.getString("pw"); if((type!=null)&&(no!=null)&&(pw!=null)&&real_pw.equals(pw)) { if(type.equals("delete")) response.sendRedirect("delete_check.jsp?no="+no); else response.sendRedirect("rewrite_form.jsp?no="+no); } else response.sendRedirect("error.jsp"); %>
<end>
'Study > 2020 국비교육_Java' 카테고리의 다른 글
Tue/Jan/28[Java] day19. Interface, Abstract Class, Thread(+Runnable) (0) 2020.01.28 Thu/Jan/23 [Java] day18. 게시판 한번 더 실습 + 날짜/ip주소 추가 (0) 2020.01.23 Tue/Jan/21 [Java] day16. 게시판 만들기 (0) 2020.01.21 Mon/Jan/20 [Java] day15. EXCEL /Web Server/HTML - Java (0) 2020.01.20 Sat/Jan/18 [Java] Java-SQL-HTML 주말 과제 (0) 2020.01.19 -