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

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

문제가 발생한다.

 

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

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

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

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

  3. }

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

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

실행가능한 .jar 실행하기  (0) 2010.02.20
JDBC 설치 및 적용하기  (0) 2010.01.23
System.out.println() - 오버로딩의 조건, 장점  (0) 2009.11.25
클래스메서드(static메서드)  (0) 2009.11.25
JVM의 메모리구조  (0) 2009.11.25

서블릿을 실행하려면 서블릿 소스의 작성과 컴파일, 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

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

+ Recent posts