HTTP란
 - HTTP는  웹서버와 클라이언트(브라우저)간에 통 신하기 위한 프로토콜(규약)이다.
 - HTTP는 TCP/IP를 기반으로 한 지점에서 다른 지점으로 요청과 응답을 전송한다. 
 - HTTP구조는 요청/응답의 끊임 없는 주고 받음 이라고 할 수 있다.
 - 웹브라우저와 웹서버간의 통신은 웹브라우저의 요 청으로 부터 시 작되는데,
     브라우저는 HTTP프로 토콜에 맞게 요청을 웹 서버에 전송하고, 
 -웹서버는 이에 따라 응답을 HTTP프로토콜에 맞게 브라우저에 전송한다. 

요청 메시지 - 계속 요청할 수 없으니 브라우저가 이러한 일을 해주는 것이다.
GET /MyWeb/GetServlet?userid=as&pwd=123 HTTP/1.0
응답 메시지 - 

1xx : 정보 - 요청이 받아들여졌고 처리중
2xx : 성공
3xx : 경로변경 - 요청을 완전히 처리하기 위해 추가적인 액션 필요
4xx : 클라이언트 에러 - 요청 문법 오류 또는 요청이 처리될 수 없음
5xx : 서버 에러 - 클의 정당한 요청을 서버가 처리하지 못함

Get요청의 경우
사용자가 입력한 데이터를 요청 라인에 포함시켜 서버에 전송한다.
따라서 사용자가 입력한 데이터가 노출될 위험이 있으며, 전송할 데이터 용량도 가급적 작은 용량의 데이터만 전송 가능
Post요청일 경우
post방식은 사용자의 요청 데이터를 body에 포함시켜 보낸다. 따라서 데이터가 요청라인에 노출되지 않으며,
대용량의 데이터를 전송할 때 적합하다.
파일 업로드를 해야 할 때는 반드시 post방식으로 전송해야 한다.

post방식
post방식을 이용하면 url에 값이 들어가지 않는다.
http://localhost:9090/MyWeb/PostServlet

requset객체 (HttpServletRequest)
-서버에 요청을 보내는 객체
1.GET방식
-------------------------------------------
[1]요청 라인: URI부분에 데이터를 포함시켜 보낸다.
-------------------------------------------
[2]요청 헤더
-------------------------------------------
-------------------------------------------
2.POST방식
-------------------------------------------
[1]요청 라인: 
-------------------------------------------
[2]요청 헤더
-------------------------------------------
[2]요청 바디
이 부분에 데이터를 포함시켜 보낸다.
userid=hong&userPwd=123;
-------------------------------------------

HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>input.html</title>
</head>
<body>
 <h1>post방식으로 요청을 보내자</h1>
 <form name="f" action="PostServlet" method="POST">
 	아이디:<input type="text" name="userid"><p></p>
 	비밀번호:<input type="password" name="userPwd"><p></p>
 	<button>전송</button>
 </form>
</body>
</html>

Servlet

package my.com;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class PostServlet
 */
@WebServlet("/PostServlet")
public class PostServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest req, HttpServletResponse res) 
			throws ServletException, IOException {
		res.setContentType("text/html;charset=UTF-8");
		PrintWriter out =res.getWriter();
		
		//0.POST방식일 경우 한글 처리
		req.setCharacterEncoding("UTF-8");
		//1.사용자가 입력한 아이디, 비밀번호 받기
		String id = req.getParameter("userid");
		String pwd = req.getParameter("userPwd");
		//2.유효성 체크
		if(id==null||pwd==null||id.trim().isEmpty()||pwd.trim().isEmpty()) {
			out.println("<script>");
			out.println("alert('잘못 들어온 경로');");
			out.println("</script>");
			res.sendRedirect("input2.html");
			return;
		}
		//3.아이디,비밀번호 값 출력하기
		out.println("<h1>아이디: "+id+"</h1>");
		out.println("<h1>비밀번호: "+pwd+"</h1>");
		out.close();
	}

}

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
memo등록
html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>memo.html</title>
<style>
	body{
		font-family : sans-serif;
		font-size : 16px;
		color: navy;
	}
	#wrap{
		width:90%;
		margin:auto;
	}
	#wrap table{
		width:90%;
		margin:auto;
		border-collapse:collapse;
	}
	th{
		background-color:#bbccef;
	}
	td{
		padding:5px;
	}
	input{
		padding: 5px;
		border: 1px solid silver;
	}
	button{
		padding:5px;
		border: 1px solid silver;
		width: 200px;
		background-color:beige;
	}
	.writer{
		width:50%;
	}
	.msg{
		width:90%;
	}
</style>
	<script>
		function check(){
			if(!frm.name.value){
				alert("작성자를 입력하세요");
				frm.name.focus();
				return;
			}
			if(!frm.msg.value){
				alert("메모내용을 입력하세요");
				frm.msg.focus();
				return;
			}
			var len=frm.msg.value.length;
			if(len>100){
				alert("메모내용은 100자 이내여야 해요");
				frm.msg.select();
				return;
			}
			frm.submit();
		}
	</script>
</head>
<body>
	<div id="wrap">
	<form name="frm" action="../MemoInsert" method="POST">
		<table border="1">
			<tr>
				<th colspan="2"><h2>::한줄 메모장::</h2></th>		
			</tr>
			<tr>
				<td width="20%"><b>작성자</b></td>		
				<td width="80%">
				<input type="text" name="name" placeholder="Name" class="writer"></td>		
			</tr>
			<tr>
				<td width="20%"><b>메모내용</b></td>		
				<td width="80%">
				<input type="text" name="msg" placeholder="Message" class="msg"></td>		
			</tr>
			<tr>
				<td colspan="2" style="text-align:center">
				<button type="button" onclick="check()">글남기기</button>
				<button type="reset">다시쓰기</button>
				</td>
			</tr>
		</table>
	</form>
	</div>
</body>
</html>

Servlet

package my.memo;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class MemoInsertServlet
 */
@WebServlet("/MemoInsert")
public class MemoInsertServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		res.setContentType("text/html;charset=UTF-8");
		PrintWriter out = res.getWriter();
		//0.post방식일 경우 한글 처리
		req.setCharacterEncoding("UTF-8");
		//1.사용자가 입력한 값(name, msg)받기
		String name = req.getParameter("name");
		String msg = req.getParameter("msg");
		//2.유효성 체크(null,빈문자열)
		if(name==null||msg==null) {
			res.sendRedirect("Memo/memo.html");
			return;
		}
		if(msg.trim().isEmpty()||name.trim().isEmpty()) {
			out.println("<script>");
			out.println("alert('잘못 들어온 경로');");
			out.println("history.back();");
			out.println("</script>");
			return;
		}
		//3.MemoVO객체 생성해서 1번에서 받은 값 담아주기
		MemoVO memo = new MemoVO(0,name,msg,null);
		//4.MemoDAO생성해서 insertMemo()호출하기
		MemoDAO md = new MemoDAO();
		try {
			//5.그 실행 결과값(int) 받아서 브라우저에 출력
			int n =md.insertMemo(memo);
			String result = (n>0) ? "메모 등록 성공" : "메모 등록 실패";
			String loc=(n>0) ? "MemoList" : "Memo/memo.html";
			out.println("<script>");
			out.println("alert('"+result+"')");
			out.println("location.href='"+loc+"'");
			out.println("</script>");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
		out.close();
	}
}

MemoDAO

package my.memo;

import java.sql.*;
import java.util.*;
import jdbc.util.*;

public class MemoDAO {
	Connection con;
	PreparedStatement ps;
	ResultSet rs;
	
	public int insertMemo(MemoVO memo) throws SQLException{
		try {
			con=DBUtil.getCon();
			//시퀀스명 : memo_seq
			String sql ="INSERT INTO memo(idx,name,msg,wdate)"
					+" VALUES(memo_seq.nextval, ?,?,sysdate)";
			ps = con.prepareStatement(sql);
			String name=memo.getName();
			String msg=memo.getMsg();
			ps.setString(1, name);
			ps.setString(2, msg);
			int n = ps.executeUpdate();
			return n;
		} finally {
			close();
		}
	}
	
	public void close() {
		try {
			if(rs!=null) rs.close();
			if(ps!=null) ps.close();
			if(con!=null) con.close();
		}catch(Exception e){
			System.out.println(e);
		}
	}
}

MemoVO

package my.memo;

import java.io.*;
import java.sql.Date;

public class MemoVO implements Serializable{
	
	private int idx;
	private String name;
	private String msg;
	private Date wdate;
	
	public MemoVO() {
		
	}
	
	public MemoVO(int idx, String name, String msg, Date wdate) {
		super();
		this.idx = idx;
		this.name = name;
		this.msg = msg;
		this.wdate = wdate;
	}

	public int getIdx() {
		return idx;
	}
	public void setIdx(int idx) {
		this.idx = idx;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public Date getWdate() {
		return wdate;
	}
	public void setWdate(Date wdate) {
		this.wdate = wdate;
	}
	
	
}

 

 

 

 

+ Recent posts