전송 방식


get방식 URL에 파라미터를 붙여서 전송


post방식 데이터 영역을 이용




인코딩 디코딩 방법



POST


인코딩 : 페이지에 charset 을 따름


1
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
cs
페이지 디렉티브의 charset을 따른다 이번에 공부하면서 처음 알았다.





디코딩 : request.setCharEncoding("utf-8"); 사용


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta  charset="UTF-8">
<title>post</title>
</head>
<body>
<form action="post.jsp" method="post">
<input type="text" name="test">
<input type="submit" value="전송">
</form>
<%    request.setCharacterEncoding("utf-8");
    String a = request.getParameter("test"); %>
<%=%>
</body>
</html>
cs

13행 처럼 해주면 된다 간단하다. 

주의할 점은 파라미터 값을 사용하기 전에 선언해야한다. 그 뒤로 나오는 코드에만 적용이 되기 때문이다.




GET


인코딩


1. <a>태그 사용시 : 페이지 charset을 따름

1
<a href="http://localhost:8080/TestProject/trans/get.jsp?test=안녕">링크</a>
cs


2. <form>태그 사용시 : 페이지 charset을 따름

1
2
3
<form action="get.jsp" method="get">
<input type="text" name="test">
</form>
cs

1번 2번의 경우 post방식 처럼 모두
1
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
cs
페이지 디렉티브 charset으로 인코딩 된다


3. 직접 주소에 파라미터 입력시 : 웹 브라우저마다 다름

크롬 : UTF-8

익스플로러 : MS949 (설정으로 UTF-8 사용가능)




디코딩


1. 기본설정 charset은 WAS마다 다름

톰캣8 : UTF-8

톰캣7 : ISO-8859-1


그래서 크롬 브라우저와 톰캣8을 이용하면 별다른 설정 없이 한글 파라미터가 사용 가능했던 것이었다


2. server.xml 파일 변경하기

server.xml 파일을 보면  <Connector> 태그가 있다.

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>


2-1 URL인코딩 지정해주기

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

URIEncoding="" 에 원하는 캐릭터 셋을 넣어 URL인코딩 방식을 정할 수 있다.



2-2 post 방식 처럼 request 사용하기

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>

useBodyEncodingForURI="true" 를 넣어주면 post 디코딩 처럼 request.setCharacterEncoding("")을 사용 할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=euc-kr" %>
<!DOCTYPE html>
<html>
<head>
<meta  charset="UTF-8">
<title>get</title>
</head>
<body>
 
<form action="get.jsp" method="get">
<input type="text" name="test">
<input type="submit" value="전송">
</form>
 
<% request.setCharacterEncoding("euc-kr"); %>
<%= request.getParameter("test"%>
</body>
</html>
cs


1행에 charset에 euc-kr 로 인코딩 하고 (form태그 get방식이니까)

15행에 request메소드로 디코딩 해주었다.



아직 방법 정도 밖에 몰라 아쉽다.





'JSP' 카테고리의 다른 글

[JSP] out.println 줄바꿈  (0) 2018.08.07
[JSP] Get방식 Post방식 차이점  (1) 2018.07.26

out 기본객체를 공부하면서 out.print() 와 out.println() 이 눈에 들어왔다.

조건문을 사용할 경우 스크립트릿 이랑 표현식이랑 복잡하게 열고 닫고 하는 짓을 해야하는데 out.println을 사용해서 간단히 만들 수 있다.



1
2
3
4
5
6
<%if(grade>90){ %>
    <%=gradeA%>
<%}%>
<%else if(grade>80){%>
    <%=gradeB%>
<%}%>
cs

복잡하다..



1
2
3
4
5
6
<%if(grade>90){ 
    out.println(gradeA);
}
else if(grade>80){
    out.println(gradeB);
}%>
cs
깔끔하다 ^*^


자바를 공부하면 알 수 있듯이 개행문자를 넣어주느냐 아니냐에 차이기 때문에 println을 쓰면 줄바꿈이 되겠거니 생각했다.




하 지 만 

줄바꿈이 되지 않았다..


1
2
3
4
5
6
7
<%
    for(int i=0;i<3;i++){
        out.print(i+" = ");
        out.println(i+"입니다.");
    }
 
%>
cs

0 = 0입니다. 1 = 1입니다. 2 = 2입니다.




당연히 될 줄 알았는데 .. 그럼 줄바꿈을 해줄려면 결국 <br>을 넣어야하고 그러면 어차피 스크립트릿을 열고 닫아야 하는거 아닌가.. 라는 생각이 들었다.



일단 저기 println의 개행은 사라진게 아니다.

이렇게 html 소스코드 안에서 개행이 이루어 진 것이다.. 

하지만 원한건 이 개행이 아니었는데..


는 중에 방법을 찾았다.


1
2
3
4
5
6
7
<%
    for(int i=0;i<3;i++){
        out.print(i+" = ");
        out.println(i+"입니다.<br>");
    }
%>
 
cs

이렇게 print("<br>") 을 해주면 된다. 저기 안에 html태그를 넣으면 먹힌다는걸 처음 알았다. 이것 때문에

out.print 들은 웹브라우저 에게 그저 데이터를 넘겨 주는 것이구나 라고 이해가 되었다.


서블릿은 아직 모르지만 jsp도 결국 서블릿으로 변환한 후 실행 된다고 아는데

서블릿은 html태그들을 

out.println("<HTML>");
out.println("<BODY>");
out.println("Hello World!!");
out.println("</BODY>");

out.println("</HTML>");

이렇게 쓴다고 보았다

음 뭔가 이어지는 것 같다. 

'JSP' 카테고리의 다른 글

[JSP] GET방식 POST방식 인코딩 디코딩 방법  (0) 2018.08.09
[JSP] Get방식 Post방식 차이점  (1) 2018.07.26

html과 jsp를 배우면서 사용자 입력 정보가 필요할 때 쓰는 get과 post를 많이 사용해보았지만 그저 url에 보내는 방식과 패킷 body 안에다가 보내는 방식 이다 정도 밖에 몰랐었다.




다들 기본적인 get과 post에 알거라 생각하고 기본적인 get post에 대한 내용은 생략하고 바로 본론으로 넘어가겠다.


결국 get과 post에 차이는 내가 원래 알고 있었던 url에 보내는가 패킷 body안에 보내는가의 차이에서 다 온다고 생각한다.



 1. 데이터의 크기 

get은 url에 보내므로 url은 길이제한이 있기 때문에 짧은 데이터

post는 길이제한이 없으므로 긴 데이터의 적합


음.. IE에 경우 2083자 제한이 있고 나머지 브라우저는 없다 그래서 이 차이점은 중요하지 않는듯..



 2. 보안

get방식은 url에 키와 값이 모두 노출 되므로 보안에 취약하고

post는 직접 노출이 되지 않아 보안에 유리하다.


이 내용도 썩.. 와닿지 않는다 post는 그처 최~~소한의 보안을 하는 수준인 듯 하다. 어차피 암호화 되지 않는건 마찬가지기 때문에..



 이 다음 부터가 중요하다고 생각한다.

 get은 단어 뜻 그대로 받다,얻어오다 post는 게시하다 

 즉 get은 파라미터로 특정한 정보를 요청하는데 쓰이고 ( 이러한 짓을 해도 다른곳에 영향을 주지않음 예를들어 검색하기 조회하기등등... )
 post는 내가 전달한 키와 값이 다른 곳에 영향을 끼친다 ( 회원정보를 제공해 회원등록이 되고 게시판에 글을 작성하고 ..)



 이렇게 검색창은 get방식을 사용한다. 

 내가 어떤 내용을 검색하고 그것을 공유하고 싶으면 그저 url을 공유하면된다. 남이 같은 url을 입력하면 같은 페이지를 볼 수 있다.  만약 post방식으로 검색을 구현했다면 남에게 공유하려면 어떤 검색어를 쳐서 어떤 경로로 가는걸 다 말해주어야 할 것이다.

 또 내가 어떤 내용을 검색한다고 검색된 내용이 바뀐다던가 같은 영향을 끼치지 않는다. (조회기록은 남겠지만) 





 회원가입 같은 경우는 post방식을 사용한다

 내 개인정보를 입력해서 회원가입을 하는데 이러한 내용을 공유할 필요가 있는가?

 또 회원가입을 하면 내 정보가 db에 올라가고 나는 네이버에 회원이 된다. 이렇게 post방식은 영향을 끼친다.

 만약 get방식 이라면 그url이 남아 중복으로 회원가입이 요청되는 등 에 문제가 생길 것이다.



 내 생각대로 정리하자면 일회성이 필요한 정보들은 post로 남들과 공유하고 반복이 필요한경우 get을 써야 할 것같다.

 아까 말한대로 get은 영향을 끼치지 않으니 반복하고 남이해도 상관이 없지만 post는 영향을 끼치니 말이다.







참고


https://blog.outsider.ne.kr/312

http://uiandwe.tistory.com/1133

'JSP' 카테고리의 다른 글

[JSP] GET방식 POST방식 인코딩 디코딩 방법  (0) 2018.08.09
[JSP] out.println 줄바꿈  (0) 2018.08.07

+ Recent posts