metho='post' 를 코딩하ㅣ 않았을 때, 디폴트는 HTTP GET이다. 따라서 브라우저는 파라미터 정보를 몸체가 아니라 헤더에 보낸다는 것이다.

요청이 GET으로 들어온다는 것은 서블릿에 doGet()이 있어야 한다는 말인데, 폼 처리에 대해서 대부분 doPost()만 만들어놓기 때문에

문제가 발생한다.

 

서블릿에서 doGet()과 doPost() 둘 다 지원하려면?

둘다 지원해야하는 경우, 보통 데이터를 수정하는 것이 아니라

doGet()을 구현하고 doPost()는 요청을 doGet()으로 넘기는 방식으로 구현한다.

  1. public void doPost() throws ... {
  2. doGet(request, response);

  3. }

이 글은 스프링노트에서 작성되었습니다.

서블릿을 실행하려면 서블릿 소스의 작성과 컴파일, web.xml 파일의 수정과 같은 여러 작업이 이뤄져야한다.

 

1.서블릿 파일 작성

  1. package examples; // package로 지정
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class HelloWorldServlet extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
            response.setContentType("text/html; charset=euc-kr");
            PrintWriter out = response.getWriter();
            out.println("<html>");
            out.println("<head><title>안녕하세요, Hello</title></head>");
            out.println("<body>안녕하세요. <br>Hello!! world!!!</body>");
            out.println("</html>");
        }
    }

 

2.setEnv.com 파일 실행

setEnv.cmd(Path 설정할 경우 setenv 만 실행해도 됨)

 

3.서블릿 파일 컴파일

  1. javac -d ../classes HelloworldServlet.java

 

4.web.xml 수정

  1. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
        <servlet>
            <servlet-name>helloworld</servlet-name>
            <servlet-class>examples.HelloWorldServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>helloworld</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>

    </web-app>

 

5.서블릿 실행

<servlet-mapping 요소 안에 지정한 것처럼 http://localhost:7001/hello로 요쳥하면 된다.

HelloWorldServlet.JPG

... ㅡㅅ-);; Eclipse에서 서블릿 실행할 때보다 더 귀찮다.... 흠냠...

이 글은 스프링노트에서 작성되었습니다.

쿠키(Cookie)

사용자의 ID 혹은 암호까지 기억하는 경우를 보았을 것이다. 이것은 웹 브라우저가 ID 혹은 암호를 사용자의 컴퓨터에 저장하고 있기 때문에 가능하다. 이처럼 웹 서버가 전달한 정보를 웹 브라우저가 컴퓨터에 저장하는 것을 쿠키(Cookie)라고 한다. 쿠키는 다양하게 활용될 수 있는데, 대표적인 사용 예로 사용자 ID와 암호를 기억함으로써 사이트를 편리하게 사용할 수 있도록 하거나 혹은 사용자의 방문 횟수를 기억하돌고 함으로써 사용자의 웹 사이트 사용 유형을 파악하는 것이 있다. 쿠키는 넷스케이프사에서 처음 제안되었고, RFC 2109로 문서화 되었다.

● 관련정보 : http://en.wikipedia.org/wiki/HTTP_cookie (영문)

● 관련정보 : http://ko.wikipedia.org/wiki/HTTP_쿠키 (한글, 간략함. 영문 참조바람)

 

※ 쿠키 : 서버가 자신이 필요한 정보를 클라이언트에 심어놓는 것. 클라이언트가 접속시 자신(서버)이 심어놓은 쿠키 파일을 불러온다. 사용자 ID와 비밀번호, 방문횟수, 사용 패턴등을 분석 가능하다.

230px-Choco_chip_cookie.jpg

  • MS IE : Cookie 라는 폴더
  • 파폭 등은 cookie.txt
  • 쿠키 제한 : 모두 300개 까지만 사용가능
  • 쿠키 최대 크기 : 4KB

 

● 서블릿/JSP는 쿠키를 위해서 Cookie 클래스를 제공한다. 쿠키를 웹 브라우저에 전달하기 위해서는 HttpServletResponse의 addCookie() 메소드를 이용한다.

쿠키 설정하기 절차(심기)

[1]. Cookie 객체를 만든다.

[2]. 쿠키에 속성을 부여한다.

[3]. 쿠키를 전송한다.

Cookie c1 = new Cookie("id", "honeymon");

c1.setMaxAge(-1); // 브라우저가 끄면 사라진다.

res.addCookie(c1);

ex) Cookie(String name, String value) 쿠키의 이름, 값이 필요하다.

  • void setMaxAge(int expiry) 쿠키의 유효한 기간을 설정(단위 : 초)
  • void setValue(String newValue) 새로운 쿠키 값을 설정한다.

    • 정수로 변환시 Integer.parseInt(); 를 사용해준다.

 

Cookie c1 = new Cookie("id", "honeymon");

c1.setMaxAge(60 * 60 * 24 * 365); => 1년간 유지됨

c1.setMaxAge(-1); // 브라우저가 끄면 사라진다.

 

웹 브라우저에 쿠키 전송하기

쿠키의 속성값이 설정되면, 서블릿/JSP는 HttpServletResponse 클래스를 이용해서 웹 브라우저에 쿠키를 설정한다. 이 때 HttpServletResponse으 addCookie() 메소드를 사용한다.

  1. response.addCookie(cookie); --> res.addCookie(c1);

 

쿠키 정보 얻기(뽑기!)

클라이언트에 설정된 쿠키 정보는 웹 브라우저가 다시 웹 사이트를 방문할 때 웹 브라우저에 의해 자동적으로 웹 서버에 전달한다. 쿠키로부터 정보를 얻어 오려면 다음과 같은 절차를 따른다.

[1] 사용자의 요청에서 모든 쿠키를 얻는다.

[2]. 원하는 쿠키를 이름을 통해서 얻는다.

 

 

[3]. 찾은 쿠키로부터 값을 얻는다.

  1. Cookie[] cookies =  request(=req).getCookies();
  2. for ( Cookie mycookie : cookie ) {
       String n = mycookie.getName();
  3. }
    String value = mycookie.getValue();

 

ex) 서블릿/JSP 에서 쿠키 얻기
  1. Cookie[] cookies =  request(=req).getCookies();

 

ex) 쿠키의 이름을 이용해서 원하는 쿠키 찾기
  1. for ( Cookie mycookie : cookie ) {
       String n = mycookie.getName();
    }

 

ex) 쿠키의 값 추출하기
  1. String value = mycookie.getValue();

 

CookieTest.java

  1. import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class CookieTest extends HttpServlet {
        PrintWriter out;

        protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
            out = res.getWriter();
            res.setContentType("text/html; charset=euc-kr");

            Cookie[] cookies = req.getCookies();

            if ( cookies != null ) {
                for ( Cookie cookie : cookies ) {
                    String name = cookie.getName();
                    String value = cookie.getValue();
                    out.println("Cookie name : "+name+"<br>");
                    out.println("Cookie value : "+value+"<hr>");
                }
                out.println("<a href=CookieTest>다시방문하기</a>");
            } else {
                out.println("No cookies..");
                setCookies(res);
            }
        }

        public void setCookies(HttpServletResponse res){
            Cookie logCookie = new Cookie("login", "honeymon");
            logCookie.setMaxAge(-1);

            Cookie passCookie = new Cookie("pass", "wow");
            passCookie.setMaxAge(-1);

            res.addCookie(logCookie);
            res.addCookie(passCookie);

            out.println("<hr>cookie가 setting 되었습니다.<hr><br>");
            out.println("<a href=CookieTest>돌아가기</a>");
        }

    }

 

CookieTest.java(수정판 : 읽을 때마다 Count를 증가시킴)

  1. import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class CookieTest extends HttpServlet {
        PrintWriter out;

        protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
            out = res.getWriter();
            res.setContentType("text/html; charset=euc-kr");

            Cookie[] cookies = req.getCookies();

            if ( cookies != null ) {
                for ( Cookie cookie : cookies ) {
                    String name = cookie.getName();
                    String value = cookie.getValue();
                    out.println("Cookie name : "+name+"<br>");
                    out.println("Cookie value : "+value+"<hr>");

                    if ( cookie.getName().equals("count") ) {
                        //value에 1을 더하고 새로운 value를 세팅
                        value = Integer.toString(Integer.parseInt(cookie.getValue()) + 1);
                        //새값이 설정된 쿠키를 브라우저로 전송
                        Cookie countCookie = new Cookie("count",value);
                        res.addCookie(countCookie);

                        //cookie.setValue(value);
                        //res.addCookie(cookie);  이녀석도 된다. ㅡㅅ-)>
                    }
                }
                out.println("<a href=CookieTest>다시방문하기</a>");
            } else {
                out.println("No cookies..");
                setCookies(res);
            }
        }

        public void setCookies(HttpServletResponse res){
            Cookie logCookie = new Cookie("login", "honeymon");
            logCookie.setMaxAge(-1);

            Cookie passCookie = new Cookie("pass", "wow");
            passCookie.setMaxAge(-1);

            Cookie countCookie = new Cookie("count","0");
            countCookie.setMaxAge(-1);

            res.addCookie(logCookie);
            res.addCookie(passCookie);
            res.addCookie(countCookie);

            out.println("<hr>cookie가 setting 되었습니다.<hr><br>");
            out.println("<a href=CookieTest>돌아가기</a>");
        }

    }

CookieTestRun.JPG CookieTest.JPG

이 글은 스프링노트에서 작성되었습니다.

'Java > Language' 카테고리의 다른 글

EL과 JSTL  (0) 2009.06.01
JSP - Bean을 이용하여 스크립트렛 줄이기  (0) 2009.05.27
09/05/22 쿠키  (0) 2009.05.25
허니몬, JavaFX 예제 만들기  (0) 2009.05.24
허니몬, DTFE, JavaFX 세미나에 다녀오다. ^^  (0) 2009.05.24
Java IDE, NetBeans를 설치하다.  (0) 2009.05.24

+ Recent posts