ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 만들기 전에 기초적인 내용들
    JSP, Servlet 2021. 12. 12. 22:31


    Server Application 조각 -> Server Application Let
    GET : list/reg/edit/del -> list/reg/edit/del 조각 전달 후 종료

    톰캣은 WAS, Web Server라고도 할 수 있음


    Servlet 프로그램 만들기
    service()

    public class Main extneds HttpServlet {
        public void service(HttpServletRequest request, HttpservletResponse response) throws IOException, ServletException {
            System.out.println("hello Servlet");
        }
    }


        : HttpServletRequest 입력도구, HttpservletResponse 출력도구

     



    <servlet-mapping>
        <servlet-name>na</servlet-name>
        <servlet-class>패키지명.Nana</servlet-class>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>na</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
        : Nana라는 클래스를 hello라는 이름으로 매핑하는 코드
            http://localhost/hello

     



    response를 이용한 출력방법

    public class Main extneds HttpServlet {
        public void service(HttpServletRequest request, HttpservletResponse response) throws IOException, ServletException {
           PrintWriter out = response.getWriter();
           out.println("Hello Servlet");
        }
    }



    홈 디렉토리는 webapp

     


    Annotation을 이용한 URL 매핑
    @WebServlet("/매핑명")

     



    한 줄 내려쓰려면 <br> 태그 사용
    브라우저에 컨텐츠 형식을 알려주지 않은 경우 자의적으로 해석함
    -> 어떠한 형식의 문서인지 밝혀줘야 함

     



    한글이 깨지지 않도록 인코딩 방식 지정

    response.setCharacterEncoding("utf-8"); (사용자가 보내는 방식)
    response.setContentType("text/html; charset="utf-8");  (받은 걸 해석하는 방식)



    기본적인 요청은 GET 요청
    httpL//localhost/hello?cnt=3
        : (?cnt=3)쿼리스트링으로 요청할 수 있음


    public void service(HttpServletRequest request, HttpservletResponse response) throw ServletException, IOException {
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html; charset=utf-8");
        PrintWriter out = response.getWriter();

        int cnt = Integer.parseInt(request.getParameter("cnt"));    //문자열이라서 int형으로 변환
        for(int i=0; i<cnt; i++) {
            out.println("안녕 Servlet<br />");
        }
    }

     


    사용자가 쿼리스트링으로 값을 전달해주지 않았을 경우에 기본 값 사용하는 방법
    http://.../hello?cnt=3  -> "3"
    http://.../hello?cnt=   -> ""
    http://.../hello?       -> null
    http://.../hello        -> null

    public void service(HttpServletRequest request, HttpservletResponse response) throw ServletException, IOException {
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html; charset=utf-8");
        PrintWriter out = response.getWriter();

        String cnt_ = request.getParameter("cnt");

        int cnt = 100;
        if(cnt_ != null && !cnt_.qeuals("")) {
            cnt = Integer.parseInt(cnt_);
        }

        for(int i=0; i<cnt; i++) {
            out.println("안녕 Servlet<br />");
        }
    }

     

     


    html 파일에서 바디 태그 안에
    <a href="hi">인사하기</a><br>
    <a href="hi?cnt=3">인사하기</a><br>
    이렇게 값을 전달해줄 수도 있음

     



    사용자 입력을 통한 GET 요청
    반복 횟수를 사용자로부터 입력받으려면 입력폼을 준비해야 함
    버튼을 클릭하면 GET 요청으로 전달
    <body>
        <div>
            <form action="hi">   //사용자 입력을 처리하기 위한 폼태그에 서블릿 매핑 이름 hi
            //http://.../hi
                <div>
                    <label>"안녕하세요"를 몇 번 듣고 싶으세요?</label>
                </div>
                <div>
                    <input type="text" name="cnt"/>     //입력태그
                                      //?cnt=3
                    <input type="submit" value="출력"/> //요청 전달 submit
                </div>
            </form>
        </div>
    </body>


    입력할 내용이 많은 경우는 POST 요청
    - html
    <body>
        <div>
            <form action="notive-reg" method="post">  //옵션을 지정하지 않으면 쿼리 값이 전달됨
                <div>
                    <label>제목: </label><input name="title" type="text">
                </div>
                <div>
                    <label>내용: </label>
                    <textarea name="content"></textarea>   //여러 줄 쓸 수 있는
                </div>
                <div>
                    <input type="submit" value="등록"/> 
                </div>
            </form>
        </div>
    </body>

    - class
    @WebServlet("/notice-reg")
    public class NotiveReg extends HttpServlet{
        public void service(HttpServletRequest request, HttpservletResponse response) throw ServletException, IOException {
            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html; charset=utf-8");
            request.setCharacterEncoding("utf-8");  //입력 값 인코딩 방식을 utf-8로 설정
            PrintWriter out = response.getWriter();

            String title = request.getParameter("title");   //요청에서 title 값 가져오기
            String content = request.getParameter("content");   //요청에서 content 값 가져오기

            out.println(title);
            out.println(content);
            
        }
    }


    Servlet filter
        - class
        @WebServlet("/notice-reg")
        public class NotiveReg extends HttpServlet{
            public void service(HttpServletRequest request, HttpservletResponse response) throw ServletException, IOException {
                response.setCharacterEncoding("utf-8");
                response.setContentType("text/html; charset=utf-8");
            
                
                PrintWriter out = response.getWriter();

                String title = request.getParameter("title");  
                String content = request.getParameter("content");   

                out.println(title);
                out.println(content);
                
            }
        }

        - 새로운 패키지에 class 만들면서 interfaces에서 servlet Filter 추가
        public class CharacterEncodingFilter implemets Filter {
            @Override
            public void doFilter(HttpServletRequest request, HttpservletResponse response, FilterChain chain) throw ServletException, IOException {
                
                request.setCharacterEncoding("utf-8"); 

                chain.doFilter(request, response);  //다음 실행을 관할하기 위한 것

            }
        }

        - web.xml에서 필터 설정 혹은 어노테이션으로 설정
        필터 설정
            <filter>
                <filter-name>characterEncodingFilter</filter-name>
                <filter-class>필터 패키지명.클래스명</filter-class>
            </filter>
            <filter-mapping>
                <filter-name>characterEncodingFilter</filter-name>
                <url-pattern>/*</url-pattern>
            </filter-mapping>

        어노테이션
            servlet filter에 @WebFilter("/*") 추가하기

    댓글