<한글 실습 1 : 오늘 하루종일 한글>
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                                                        throws ServletException, IOException {
     String name = req.getParameter("name");
     PrintWriter pw = resp.getWriter();
     pw.write(name);
}

request : user가 입력시에 받는 Parameter가 name이다.
* url-pattern: /han/ * => /han/a
 1) " * " 의 의미 : 모든 문자열.
 2) " ? " 의 의미 : 파라미터를 의미
            (클라이언트[webbrowser]에서 server로)

*get 방식으로 보내는 것
 ex) http://localhost:8080/PP/han/a?name=진형은
 : parameter=value

*get방식으로 보내는 것을 받아들이는 것이
  <request.getParameter("pr name");>
 ex) req.getParameter("파라미터 이름") : return String

기본 default charset : ISO-8859-1(라틴어)로 들어온다
그래서 euc-kr(조합형) charset으로 바꿔줘야한다.

바꾸는 방법 :
 String.getBytes(String charsetName) : return byte[]
 new String(Byte[],charset name)
* iso-8859-1로 들어온 char을 byte로 쪼개서 읽어들인 후

  ex)

  //요청에 대한 한글처리
  String name = req.getParameter("name");
  byte[] b=name.getBytes("ISO-8859-1");
  name=new String(b,"EUC-KR");
  System.out.println("수정후 : "+name);
  pw = resp.getWriter();
  pw.write("수정후 : "+name);

 //웹상에서의 한글처리
 //Response(응답)을 통해서 쓰는 문자를 한글로 인코딩.
  response.setCharacterEncoding("euc-kr");
 
 //<web브라우져가 멍청해서 일일히 웹에서 처리해줘야>
 //웹브라우져에게 html문서이고 charset은 euc-kr로 정의해줘야함
  response.setContentType("text/html; charset=euc-kr");


get방식은 보안상 좋지 않고, 128byte까지만 파라미터값이 한계
but Post방식은 파라미터값 한계가 없고, 보안상 값을 숨기는 것이 가능하고
 암튼 보안측면이 좋다.so post방식을 추천한다.
하지만 즐겨찾기, 뒤로가기 같은 경우 get방식이 지원하는 기능이고,
 post방식은 지원안함.
그리고 좋은 어플리케이션은 뒤로가기, 즐겨찾기도 막음.
get방식을 사용하지 않는것이 좋음.(보안상)
웹 해킹에 대비하기위해 post방식을 추천.

*웹에서 글자가 깨질 경우 db에 올릴때에도 깨짐.

<request>
 header + body
 get방식은 parameter값이 header에 있음.
 post방식은 parameter값이 body에 있음

 get방식은 header에 있기때문에 가지고 왔을때
 하나씩하나씩 끼워서 처리해줘야한다.

 setCharacterEncoding() : 이 메소드는 body부에 character를 encoding
 그래서 get방식 과 post방식의 한글처리가 달라지는 것이다.

------------------------------------------------
Header 부분에 대해서 알아보자!!!!
------------------------------------------------

request.getHeaderNames(); : return Enumeration
e.hasMoreElements(); : return boolean
e.nextElement(); : return Object
request.getHeader(String headername); : return String
ex)
 Enumeration e = req.getHeaderNames();
 while(e.hasMoreElements()){
   Object o = e.nextElement();
   String s = req.getHeader((String)o);
   System.out.println(o+" : "+s);
 }


host : localhost:8080
user-agent : Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/ *;q=0.8
accept-language : ko-kr,ko;q=0.8,en-us;q=0.5,en;q=0.3
accept-encoding : gzip,deflate
accept-charset : EUC-KR,utf-8;q=0.7,*;q=0.7
keep-alive : 300
connection : keep-alive
referer : http://localhost:8080/PP/han.jsp
cookie : JSESSIONID=6A2C85D31FB0F5B397AE09BF51DB3F85
content-type : application/x-www-form-urlencoded
content-length : 23

//여기까지 Header 정보.

----------------------------------------------------
점심시간 api 문서 찾기.
----------------------------------------------------
1. <doGet>
 protected void doGet(HttpServletRequest  req,
         HttpServletResponse  resp)
      throws ServletException , java.io.IOException


2. <doPost>
 protected void doPost(HttpServletRequest  req,
                     HttpServletResponse  resp)
               throws ServletException , java.io.IOException

----------------------------------------------------

javax.servlet.http
 interface  HttpServletRequest
  all super interface: ServletRequest
----------------------------------------------------

Database에서 table만들기
insert into guestbook(no,writer,content,pass)
values(
(select NVL(MAX(no),0)+1 from guestbook),
'손님',
'초딩즐',
'1111'
);


-------------------------------------------------
Servlet 의 발전된 개념  : jsp
-------------------------------------------------
과거 servlet사용시 모든것을 servlet안에서 사용하기대문에 문제가 많았다.
so 분업화

 1. forwarding : 넘겨주기
 2. redirect : 방향을 재지정

---------------------------------------------------
실습 2 : move.Servlet : jsp사용.
---------------------------------------------------

1. redirect : 외부 URI나 어느곳으로든 보낼 수 있다.
 resp.sendRedirect(arg0); :
 ex)
 resp.sendRedirect("http://www.naver.com/");

2. getContextPath()
 :Project name이 바뀌는 등 , 향후 대비용으로 사용
 String cp = req.getContextPath();
 getContextPath(); : return String
 ex) /PP : 현재 내꺼 contextpath

* redirect : 2번 request , response가 이뤄짐.
    : 외부자원으로도 보낼수 있다.
    : sendRedirect 되면서 주소도 바뀌게 된다.


3. forward 방식:
 RequestDispatchcer rd =
  req.getRequestDispatcher("/han.jsp");

 rd.forward(req,resp)

// forward방식은 내부에서만 접근이 가능.
// 외부자원은 불가능.
// 요청한 사용자의 주소는 바뀌지 않는다.
 request와 response가 딱 한번일어난다.

sendRedirect / getRequestDispatcher

숙제
지금까지 할것 복습

방명록을 입력한 뒤 다시 방명록으로 오게끔.
<GbListServlet>를 jsp로 forwarding
내일 배울 jsp속성 이 조금 보여줄거에요~

<%
 안쪽 속성에는 자바를 넣을수있다.
%>


그냥 숙제
: redirect와 forward예제 한번씩 만들어보기.

옵션 수정
입력하는 화면을 하나 만드시고
<form tag를 사용할것><getparameter로 값을 가져와서>
<jdbc로 인설트> 값이 끝나면 다시 리스트로
입력이 끝난뒤 다시 방명록 목록으로 가도록


response.sendRedirect(cp+"/gb/list.do");
리다이렉트 방식으로 가시면 굳이 servlet에서 다시 리스트를
보여줄 필요가 없겠죠??

다른 카테고리의 글 목록

웹 개발/Servlet 기초 카테고리의 포스트를 톺아봅니다