ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 순서

    1. Tomcat에서 ***.jsp.java

    2. ***.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>

     

    댓글

Designed by Tistory.