정구리의 우주정복
[JAVA] form 태그 이용해 get,post 형식으로 정보 전송하기 , servlet 만들어보기 본문
우선 폴더의 구조는 이렇게 생겼다 webapp 에는 index.html 과 같은 정적 리소스들이 들어가게 된다
index.html 에 조작을 위한 form 태그를 만들어주자
<form action="servlet.do">
<label>
a : <input name="a" value="3" size="3">
</label>
<label>
b : <input name="b" value="33" size="3">
</label>
<label>
c : <input name="c" value="3333"size="3" >
</label>
<button>servlet.do Get 제출 (form submit)</button>
</form>
form 의 default 값은 get 이기 때문에 아무것도 적지 않으면 get 으로 동작하게 된다
<form action="servlet.do" method="post">
<label>
a : <input name="a" value="3" size="3">
</label>
<label>
b : <input name="b" value="33" size="3">
</label>
<label>
c : <input name="c" value="3333"size="3" >
</label>
<button>servlet.do Post 제출 (form submit)</button>
</form>
이녀석은 method 에 post 를 적어줬기 때문에 post 로 동작하게 된다
아래의 button 을 누르게 되면 form 태그의 action에 있는 .do 형태의 파일로 데이터가 전송되게 된다
여기선 servlet.do 로 정보가 전달 될 것이다
전달되는 정보들은 input 태그 안에있는 애들이 되게된다
name = a , value=3
name = b , value = 33
name = c , value = 333
이렇게 3 녀석이 전달되게 된다
이제 servlet.do 를 보자
파일명은 짓고싶은이름.java 형식의 클래스 파일을 만들어주면 된다 (파일명을 servlet.do 로 해야하는게 아님)
//@ 어노테이션 : 컴파일 될 때 동작
@WebServlet("/servlet.do") //동작 리소스의 주소를 지정하는 어노테이션
public class L01Servlet extends HttpServlet{
//브라우저가 url 로 요청하는 방식을 get 방식이라고 한다
//GET 방식의 요청을 처리하기 위해서는 HttpServlet.doGet(Req,resp) 를 재정의
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//한글 출력
resp.setContentType("text/html; charset=UTF-8");
int a = Integer.parseInt(req.getParameter("a"));
PrintWriter out = resp.getWriter();
out.write("<h1>Servlet.do.doPost()</h1>");
out.write("<h2>받은 피라미터 모음 </h2>");
out.write("<h3>post 방식의 통신은 파라미터를 path 에 포함하지 않는다. 요청 본문 헤더에 정보를 포함한다(페이로드) 그리고 데이터 길이 제한이 없다 </h3>");
out.write("<h3>post 방식의 통신은 data를 처리하기 위해 존재하기 때문에 파라미터가 많고 바뀌기 쉽다 </h3>");
out.write("<h3>post 방식의 통신은 처리방식이 바뀔 수 있기 때문에 양식 다시 제출 이거 뜬다 </h3>");
out.write("<ul>");
out.write("<li>a :" +a+"</li>");
out.write("</ul>");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// HttpServletRequest req : url 과 같은 요청정보들이 포함됨
//HttpServletResponse resp : 응답할 내용을 적어놓으면 tomcat 이 자동으로 응답해준다
System.out.println(req.getRequestURL());
resp.setContentType("text/html; charset=UTF-8");
//파라미터 : 동적 리소스(servlet) 의 내용을 바꾸기 위해 전달하는 데이터
//url : 서버주소 + path naver.com(서버주소)/shopping?page=1&cate=식품 (path ->서버에 있는 리소스의 위치)
//path(리소스의 위치) : 리소스 + 파라미터 shopping(리소스)?page=1&cate=식품(파라미터)
String a_Str = req.getParameter("a"); //key 값을 쓰면 받을 수 있다
String b_Str = req.getParameter("b");
String c_Str = req.getParameter("c");
int a= Integer.parseInt(a_Str);
int b= Integer.parseInt(b_Str);
int c= Integer.parseInt(c_Str);
resp.getWriter().append("<h1>Hello servlet.do.doGet()</h1>")
.append("<h2>입력받은 피라미터 목록 </h2>")
.append("<h3> get 방식 통신은 리소스를 요청하는 것으로 파라미터가 Path 에 포함되어있다(동적 리소스는 파라미터에 의해 내용이 바뀜)</h3>")
.append("<h4>url 길이에 제한이 있어서 파라미터의 길이나 양에 제한이 있다 .</h4>")
.append("<h4>파라미터가 포함 된 url 을 공유하면 같은 리소스를 참조할 수 있다</h4>")
.append("<ul>")
.append("<li>a :" +a_Str+"</li>")
.append("<li>b :" +b_Str+"</li>")
.append("<li>c :" +c_Str+"</li>")
.append("<li>a+b+c :" +(a+b+c)+"</li>")
.append("</ul>");
//DBServer 에 접속한 후에 그 내역을 table로 출력
}
}
크게 두가지로 나누어져 있는데 doGet 과 doPost 이다
get 방식으로 정보를 받게 되면 doGet 이 동작하고 post 방식으로 정보를 받게되면 doPost 가 동작한다.
우선 doGet 부터 보자
가장 큰 특징은 url 에 있다
get 방식으로 전달받은 것은 url 의 뒤에 어떤 정보들이 들어있는지 보이게 된다 이전에 내가 전달한 a,b,c 의 내용들이 모두 보여지는 것을 알 수 있다.
반면 post 형태는 딱 주소만 나오는 것을 볼 수 있다
만약 나의 아이디, 비밀번호를 GET 방식으로 전달하게 된다면 ? 보안에 아주 취약하게 될 것이다
그럼 보안이 약한 get을 사용할 이유가 없는것 아니냐 ??? 라고 할수있지만 전혀아니다
만약 내가 재미있는 유튜브 영상을 친구에게 공유하고 싶어서 url 을 복사해 전달했는데 post 형태로 받게된다면
이렇게만 출력되고 아무리 클릭해도 유튜브의 메인으로 연결될 것이다 하지만 get 방식을 쓴다면
https://www.youtube.com/watch?v=A_jpL4Kgrdk
어떤 영상인지 알 수 있게된다 ! 이러한 이유로 get 을 사용한다
클래스 파일의 맨 위를 보면 특이하게 생긴 친구들이 있다
//@ 어노테이션 : 컴파일 될 때 동작
@WebServlet("/servlet.do") //동작 리소스의 주소를 지정
public class 클래스명 extends HttpServlet {
}
@WebServlet 어노테이션을 지정해줘 이 클래스가 servlet 으로 사용될것이라고 전달해주고 어떠한 이름으로 사용될지를 인자값으로 넣어준다
여기서 주의할 점은 / 을 꼭 붙여줘야한다는 것 ! "servlet.do" -> 안됨 ! "/servlet.do" -> 됨 !
그리고 HttpServlet 을 extends 해줘야지 이용이 가능하게 된다
앞의 Index.html 에서 전달 받아온 파라미터를 사용하려면 req.getParameter(name); 을 사용해주면 된다
만약 아까 name 이 a 였던걸 쓰고싶으면 req.getParameter("a"); 이렇게 쓰면 된다
PrinterWriter 을 사용하면 화면에 출력도 가능하다
PrintWriter out = resp.getWriter();
이렇게 만들어준 후
out.write("<h2>받은 피라미터 모음 </h2>"); 안에 넣고싶은 내용들을 넣어주면 화면에 출력이 된다
Post 버튼 눌렀을때 실행 화면
Get 버튼 눌렀을때 실행화면
'STUDY > K-DIGITAL' 카테고리의 다른 글
[JavaScript] DOM 요소들에 접근하기 (2) | 2022.10.10 |
---|---|
[JSP] form 태그에서 화면에 보이지 않는 내용도 넘기는 법 (0) | 2022.10.10 |
[MySQL] join 정복하기 (2) | 2022.09.26 |
[MySQL] 다중 테이블 조인 (자그마치 4개나 !) (0) | 2022.09.22 |
[MySQL] mysql 명령어들 정리 (2) | 2022.09.22 |