뉴렉처님의 servlet-jsp [1강~20강]

byeol·2022년 9월 22일
0
post-thumbnail

뉴렉처님의 2020 Servlet&JSP프로그래밍을 정리해보려고 한다.
동영상 강의이고
https://www.youtube.com/watch?v=drCj2k50j_k&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=1
자료가 따로 없기 때문에 정리를 해야 다음에 복습할 때 도움이 될거 같아 기록을 남겨본다.

제 1강


자바프로그램+ 서블릿 = 자바 웹 프로그램
서블릿만 가지고 API를 만들 수 없음 -> 좀 더 간결한 JSP라는 도구를 이용-> 하지만 스파케티 코드 문제가 발생-> 이를 해결하는 JSP MVC -> Spring MVC


제 2강

일반적인 업무용 프로그램은
사용자가 폼을 이용해서 입력을 하면 프로그램은 적절히 DB 쿼리를 해서 요청받은 내용을 입력받음 (같은 위치에 존재)

그러나 인터넷이라는 통신망으로 원격으로 가능하게 된다.
이로 인해 클라이언트 프로그램과 서버 프로그램이 생겨난다.

클라이언트 N : 서버 1
서버가 변경되면 N개의 클라이언트도 변경되어야 하는 불편함이 발생(자동 업데이트가 아닌 직접 재설치해야 했다)
데이터를 받을 때 위험성 검사 등 불편함이 존재
이를 해결하는 웹이라는 것을 이용
웹은 브라우저라는 것이 있어서 클라이언트의 요청을 받을 수 있고
웹 서버가 이 요청에 맞는 페이지를 전달해준다.
단순하며 이를 정적이라고 표현하는데 더 자세히 알아보자

웹서버는 정적인데 계속 같은 페이지를 캐싱하기 때문이다.

  1. 웹 서버에 저장된 그대로 사용자에게 전달되는 웹 페이지
    -> 모든 상황에서 모든 사용자에게 항상 동일한 정보를 표시함.

  2. HTML 문서이기도 하다.(그러나 .html로 끝난다고 무조건 정적이 페이지가 되는 것은 아님)

  3. 파일 시스쳄의 파일들로 저장됨

  4. 클라이언트가 요청했을 때 HTTP 프로토콜을 통해 웹서버에서 정적 페이지를 제공해준다.

  5. 업데이트를 전혀 하지 않거나, 거의 할 필요가 없는 내용에 적절함.
    EX) 홈페이지에서 회사소개, 음식메뉴, 포트폴리오 등 내용이 변하지 않고 고정적이 페이지

  6. 웹 서버는 파일 경로 이름을 받아 경로와 일치하는 파일 컨텐츠를 반환한다.

  7. img, html. css 와 같이 컴퓨터에 저장되어 있는 파일들

웹으로 오면서 클라이언에서 따로 무엇을 만들 필요가 없어짐
왜냐하면 그 역할을 브라우저라는 소프트웨어가 하기 때문에
과거에는 CS라고 해서 Client와 Server 나눠서 만들었다.


3강 웹 서버 프로그램과 Servlet

그러나 모든 페이지들이 정적일 수는 없다
과거 오늘 어제의 데이터가 계속 바뀔 수 있기 때문에 그에 대한 요청이 들어오면
우리는 바뀐 데이터에 대한 응답을 돌려줘야 한다.
이걸 가능하게 하는 코드들을 우리는 "Server Application"이라고 부른다.
또한 이 코드들이 실행될 수 있는 환경이 필요한데
즉 Server Application의 동적인 코드가 요청하는 데이터를 DB에서 찾아 알맞은 데이터를 돌려주는 것을 가능하는 환경을 의미하며 이것을 "WAS Web Application Server"라고 부른다.

여기서 동적이다 라는 것은
1. 인자의 내용에 맞게 동적인 컨텐츠를 반환함
EX) "인자=서울 종로구" 의 날씨
2. 웹 서버에 의해 실행되는 프로그램을 통해서 만들어진 결과물
=> Servlet
3. 개발자는 Servlet에 doGet()구현
4. 사용자는 상황, 시간, 요청 등에 따라 달라지는 웹페이지를 보게됨. 사용자와 상호작용 다시말해서 페이지의 내용이 그때 그때 달라짐.

Servlet = Server Application Let
조각나 있다.
웹서버가 서버 어플리케이션에서 응답에 맞는 코드를 찾아서 반환하는데
그 코드들은 서버 어플리케이션의 조각이다.


4강 톰캣 설치하기

톰캣이란 ? 아파치에서 개발된 WAS 또는 웹 문서를 제공해주는 웹서버의 기능도 한다.

apache-tomcat-9.0.65\bin의 startup.bat 실행 후

주소창에 localhost:8o8o 이라고 검색한 후 고양이가 나오면 성공!


5강 웹 문서 추가하기

  1. apache-tomcat-9.0.65\webapps\ROOT 에

    nana.txt라는 파일을 저장한다.

웹서버는 예약되어있는 특정 폴더가 있고 여기에 문서를 저장하고
그리고 다른 원격의 컴퓨터 브라우저를 통해서 서버의 주소+리소스 이름
이걸 돌려준다
일단 컴퓨터 아이피를 휴대폰으로 하면 같은 공유기 사용한 경우 내가 만든 웹이 나온다.
공유 아이피이면 전세계 배포 가능하다

  1. apache-tomcat-9.0.65\bin의 startup.bat 실행하여 톰캣 서버 실행

  2. http://localhost:8080/nana.txt 주소창에 검색하면 저장한 내용이 나온다.


6강 Context 사이트 추가

http://IP(or hostname):Post/context/리소스들

localhost:8080/admin/indext
                 /dealer/
                 /comumunity/..
                 /academy/...

사이트를 만들면 규모가 커지면 파일수가 많아지고 디렉토리수도 많아짐
따라서 커다란 문맥(Naver)을 유지하면서 다른 팀들이 각각의 사이트(메일, 카페, 블로그, 지식iN 등)를 만들 수 있도록 하는 것

물리적으로 다른 사이트 인데 두개, 합쳐서 마치 이쪽 사이트의 디렉토리에서 사용하는 것처럼 =>context사이트
별개이지만 문맥으로써 이어지게
홈디렉토리 2개이지만 돌아가는 건 1개

이제 실제 실습을 해보자

"localhost:8080/it/itnew.txt"로 주소창에 검색하면 itnew.txt의 내용이 나온다.

하지만 이렇게 하위 폴더의 하위폴더를 만들지 않고
다른 팀이 되어 각자 운영하기 위해서 우리는 Context 사이트를 만들어보기로 한다.

앞 서 만들었던 it폴더를 삭제하자.
그리고 ITWeb폴더를 만들자.

그리고 나서

apache-tomcat-9.0.65\conf의 server.xml에 이 두개의 파일이 연결되어 있다는 것을 말해준다.

it라는 가상 디렉토리와 연결해서 서비스가 있도록 해라
"localhost:8080/it/itnew.txt"이렇게 검색하면 나온다.
이처럼 ROOT 폴더에 it라는 폴더가 없지만 마치 연결된 것처럼 결과가 나온다는 것을 알 수 있다.
하지만 이 방법은 지양
이거 고치면 서버 껐다가 켜야함
그래서 그냥 어플리케이션마다 메타인포라는 곳에 따로 컨텍스트를 마련


8강 Servlet 프로그램 만들기

서브릿 만들기
= 코드 만들기
서버 어플리케션은 기능별로 나누어져 있다. 필요에 따라 선택되도록 나누어져 있고 이 나눠진 것을 우리는 Servlet이라고 부른다.

그러면 어떻게 만들까?

자바는 main()으로
서블릿은 service()로 만들며 클래스 이름은 별로 중요하지 않다.
우리가 만드는 서블릿은 WAS에 의해서 로드 되고 실행되며 결과를 돌려줌
WAS가 관심이 있는 것은 extends HttpSevlet이라는 부분이다.

하지만 이렇게 하고 코드를 컴파일하면

위와 같이 오류가 발생하는데 Servlet을 이해할 수 없다고 한다. 왜냐하면 jdk에 존재하지 않은 라이브러리이기 때문이다.
그렇다면 어떻게 해야하는지 cmd에 javac을 검색해보자.

라이브러리가 존재하는 경로를 같이 써줘야 한다.
서브릿 라이브러리는 어디에 있을까? 톰캣에 있다.

이 라이브러리를 이용하도록 하자.
아까 라이브러리가 존재하는 경로를 어떻게 써야하는지 문법을 보았으니 적용해보자.

이렇게 하면 컴파일이 되어 .class 파일이 만들어지게 된다.


9강 Servlet 객체 생성과 실행

8강에서 만들었던 .class Servlet 객체를 사용자가 어떻게 호출하고 실행하게 할 것인지 방법을 배워보자

만들었던 Nana.class 파일을 어디에 두어야 할까?
예약된 곳이 있다.

하지만 우리가 이 페이지를 요청할 수 있을까?

위와 같은 결과가 나온다.
왜냐하면 클라이언트는 WEB-INF에 안에 있는 파일에 접근할 수 없다.

그렇다면 어떻게 요청해야할까?

매핑을 하는 것이다.
사용자가 4를 준다면 Servlet 코드 중에서 4라는 것과 연결된 코드를 돌려주는 것이다.
그러면 우리는 저장한 class 파일에 매핑이 될 수 있도록 4와 같은 이름을 지어주어야 한다.


이렇게 말이다.
web.xml파일에 문장을 추가해야 한다.
여기서는 na라는 연결고리를 통해서 Nana.class 파일이 '/hello'라는 url과 매핑했다는 것을 알 수 있다.

하지만 주소창에 localhost:8080/hello를 검색하면
아무것도 나오지 않는다 왜? 우리는 클라이언트에게 보여줄 내용을 코드에 작성하지 않았기 때문이다.
우리가 작성한 것은 서버 쪽 콘솔창에 출력한다.


10강 Servlet 문자열 출력

클라이언트에게 인사말을 전하는 방법

원격인 클라이언트에게 입력을 받고 그에 대한 응답을 원격에 있는 클라이언트에게 돌려주는 것이 웹이다.
이 웹은 UI이며 UI는 콘솔과 원도우가 있다.


콘솔이 아닌 원격의 클라이언트에게 보내기.
근데 내가 메모장에 저장하면 꼭 오류가 뜨는 경우가 있었는데
따옴표 종류가 자동으로 바껴서 저장되는 경우가 있었다.
따라서 다시 들어가서 따옴표를 수정해서 저장하니 오류 없이 컴파일 되었었다.

메모장 저장-> 다시 컴파일로 .class 파일 만들기->복사해서 톰캣의 Web-inf의 classes에 옮기기 -> 톰캣 끄고 다시 startup.bat-> 주소창에 localhost:8080/hello 검색하면 아래와 같은 결과가 나온다.

더 간편히 아래와 같이 표현한다.


11강 웹 개발을 위한 이클립스 IDE 준비하기.

이클립스가 없이 나는

메모장 저장➡️cmd에 javac로 .class 파일 만들기➡️복사해서 톰캣의 web-inf의 classes에 .class파일 옮기기 ➡️ 톰캣 끄고 다시 startup.bat으로 톰캣 서버 열기
➡️ 주소창에 검색하여 브라우저에 요청

이 과정을 거쳤다. 하지만 이클립스는 이 과정을 ctrl+f11 두 개의 키보드만 누르면 한번에 해준다.

나는 Java를 배우면서 이클립스를 사용했기 때문에 따로 설치하지는 않았고
영상과 다르게 "Dynamic Web Project"가 없어서 직접 설치해야 했다
그 방법은 아래와 같다.


Help>Install New Software 클릭

work with를 저렇게 날짜가 적힌거를 선택하고 맨 아래 Web,XML, JAVA EE.... 를 선택해서 설치한다.

그러면

이렇게 Dynamic Web Project가 생긴다.
저걸 누르고 프로젝트 이름을 지정하는 창이 뜨는데

Target runtime을 지정해야 한다.

New runtime 클릭하여 톰캣을 선택한다

아래에 installing이 끝나면 모든 환경이 만들어졌다.

✔️ 프로젝트명이 루트가 되도록 하는 법
프로젝트명 오른쪽 마스우스>properties>Web Project Setting의 Context root: /

localhost:8080/프로젝트명/파일이름 에서 아래와 같이 바뀜

✔️ 서블릿 만들기

package com.newlecture.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Nana extends HttpServlet{
@Override
protected void service(HttpServletRequest req,
    HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.println("Hello~~~ adsf");
}

} 
![](https://velog.velcdn.com/images/byeolhaha/post/fbb679fa-9661-4451-9a1c-29234c5b5ec3/image.png)


web.xml파일 만들기

<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">

  <servlet>
    <servlet-name>na</servlet-name>
    <servlet-class>com.newlecture.web.Nana</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>na</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>



  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>

</web-app>
![](https://velog.velcdn.com/images/byeolhaha/post/0499702e-1e4f-4599-acbb-102bd269b9b9/image.png)

패키지 안에 있으므로 'com.newlecture.web' 추가하기


12강 Annotaiton을 이용한 URL 매핑

사용자에게 이용할 수 있는 URL을 주고 이 URL과 Nana.java를 매핑해야 한다
그런 매핑 정보를 우리는 그 이전엔 web.xml를 이용해서 했다
하지만 이제 그릴 필요없이 Annotrion을 이용한다.

Annotrion이용 하는 과정

먼저 @WebServlet(“/hello”) 와 같이 매핑할 url명 설정

@WebServlet(/hello”)
package com.newlecture.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Nana extends HttpServlet{
@Override
protected void service(HttpServletRequest req,
    HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.println("Hello~~~ adsf");
}

} 

다음으로 web.xmml에 들어가서 metadata-comlete="false"로 고쳐준다.


13강 Servlet 출력 형식의 이해

출력이라는 것은 어떻게 출력되고 클라이언트는 어떻게 이해하는가
사실 클라이언트는 웹문서로 인식
웹 기반을 요청 클라이언트는 웹문서로 라인으로 내려쓰리개 했어도 웹기반으로 요청을 하고 받는다.
소스보기했을 때도 내려쓰기이지만 웹에서 다를지도 모를다.
브라우저는 절대로 내려쓰기로 인식해서는 안된다.

out.println((i+1)+":Hello Servlet!!");

out.println((i+1)+":Hello Servlet!!<br>");

브라우저는 실제 소스코드와 다른 결과
브라우저가 자의적으로 해석
어떤 내용을 클라이언트로 보낼때 어떤 형식인지 알려줘야 한다
엣지는 html로 해석하고 크롬은 text로 해석한다.
따라서 어떤 형식인지 알려줘야 한다 브라우저에


14강 한글과 콘텐츠 형식 출력하기

문서를 보낼 때 어떤 형식인지 알려주는 법
그리고 한글 깨지는거 해결하는 방법 알아보기
out.println((i+1)+":안녕<br>");

이렇게 깨진다 왜 깨지는가?

1. <웹서버> ISO-8859-1 방식은 1byte씩 보낸다 근데 한글은 2byte
2. <브라우저> 웹서버는 UTF-8로 2byte씩 보내지만 브라우저에서 다른 코드로 해석하는 경우


15강 GET 요청과 쿼리 스트링

사용자의 입력 = 나에게 무언가 요청할 때 입력이 이루어짐
그러면 요청할 때 나에게 전달한 값을 어떻게 전달받아 웹서버에 돌려줄까?
기본적으로는 문서 즉 어떤 페이지를 달라고 한다.
http://localhost/hello ➡️ http://localhost/hello?cnt=3
http://localhost/hello?cnt=3->get
여기서 cnt=3은 쿼리스트링이며 추가적인 옵션이다.
정적인 문서가 아닌 그 옵션에 맞는 문서를 만들어준다.

하지만 쿼리값이 없는데 무언갈 읽으려고 해서 오류가 발생한다. 왜냐하면 우리는 cnt에 대한 어떤 옵션도 주지 않았다.


기본값을 100으로 주는 것과 3의 값을 주는 두 예시가 있다.
하지만 사용자로부터 입력을 받지는 않았다


16강 기본 값 사용하기

15강에 쿼리스트링에 어떤 값도 주지 않아 오류가 발생했다.
이번 강의에서는 쿼리스트링이 없을 때 기본값을 사용하도록 하는 방법에 대해 알아본다.

일단 쿼리스트링의 기본형은 문자열이며 이를 숫자로 변환하는 과정을 거쳐야 한다.
총 3가지 경우가 존재한다.
1. 값이 있는 경우
2. 공백인 경우
3. null인 경우
따라서 2와 3의 경우는 기본값을 100으로 지정하는 경우는 아래와 같이
코드를 짤 수 있다.

String cnt_=request.getParameter("cnt");
int cnt=100;
if(cnt_ !=null && !cnt_.equals(""))
         cnt=Integer.parseInt(cnt_);
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 환영합니다.<br>
 <a href="hi">인사하기</a><br>
 <a href="hi?cnt=3">인사하기</a><br>
</body>
</html>

이렇게 링크를 누르면 이미 설정된 쿼리스트링 값의 결과로 연결되도록 만들었다.
하지만 사용자로부터 입력받는 방법은 없는 것일까?


17강 사용자 입력을 통한 GET 요청

값이 고정된 것이 아니라
사용자에게 그 값을 입력하게
반복횟수를 사용자로부터 입력 받으려면 입력폼을 준비해야 한다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 <div>
   <form action="hi">
     <div>
      <label>"안녕하세요"를 몇 번 듣고 싶으세요?</label>
     </div>
     <div>
        <input type="text" name="cnt">
        <input type="submit" value="출력">
     </div>
   </form>
 </div>
</body>
</html>

여기서 중요한 것은 <form action="hi">로 한것
왜냐하면 hi라는 webservlet의 이름을 가진 서블릿과 연결되는 html을 나타내기 위해서
또한 <input type="text" name="cnt">가 중요하다.
<input>태그에 이름을 지어줌으로써 hi라는 서블릿의 쿼리스트링 cnt를 설정함.


18강 입력할 내용이 많은 경우는 POST 요청

package com.newlecture.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/notice-reg")
public class NoticeReg extends HttpServlet{
	@Override
	protected void service(HttpServletRequest request,
			    HttpServletResponse response) throws 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);
		
	}
	
}


어떤 옵션을 보내는 것인지 이런 장문 내용을 쿼리스트링으로 보내는 것은 올바르지 않다. 주소를 보자 뭔가 이상하다.
따라서 우리는

이렇게 변경한다. <form>태그에 method 속성에 값 post를 넣는것이다.

주소창을 보자 훨씬 깔끔해졌다.

그렇다면 쿼리값으로 받은게 아니면 어디에 붙어서 가는가?

F12를 누르면 개발자 환경이 생긴다.

요청 바디에 붙어서 간다. 따라서 크기에 제한이 없다.


19강 한글 입력 문제

출력하는데는 문제가 없다
즉 앞서 배웠지만 웹서버에서 보내서 웹 브라우저에 출력하는데는 문제 없다. 우리가

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");

이렇게 설정을 했기 때문이다 그러나 아래를 보자

전달하다가 문제가 발생한다. 즉 웹서버에서 클라이언트 브라우저에 보내는데는 문제가 없었지만 이제 클라이언트로부터 받은 요청을 다시 웹서버가 받았는데 여기서 깨지고 이 깨진걸 다시 클라이언트에게 보여줬기 때문에 또 깨져서 보이는 것이다.

2바이트로 인식하는게 아니라 톰캣은 1바이트로 인식한다.
따라서 깨졌고 이걸 다시 브라우저가 받으면서 2연타로 깨진것이다.
따라서 우리는 읽어들이는 과정에서 UTF 파일로 읽어달라고 요청해야 한다!

2가지 방법이 있다.
첫번째, sever.xml에 입력하기

하지만 이 방법은 잘 이용되지 않는다.
왜냐하면 한 서버에 중국어, 한국어, 영어 등 다양한 언어를 사용하는데 한정지어 결정하는게 잘못되었기 때문에
따라서
두번째, 자바 파일에 입력문을 추가한다.


20강 서블릿 필터

WAS 톰캣을 사용
그 톰캣이라는 녀석이 사용자로부터 요청이 들어오면 적절한 소프트웨어를 사용해서 그 결과를 돌려줌
그 소프트웨어를 서블릿(Servlet)이라고 한다
그 서블릿을 실행하게 되면 메모리 사용이 존재
그 메모리가 존재하는 공간=서블릿 컨테이너
WAS는 그 서블릿을 실행해서 서블릿 컨테이너에 담아놓고 그 결과를 돌려줌 더 이상 사용되지 않으면 삭제
또다른 오브젝트가 서블릿 말고 존재 == 필터 (그것을 필터라고 한다.)
앞서 우리는 캐릭터 인코딩 설정했다. request.setCharacterEncoding("UTF-8");
.그러면 서블릿 만들 때마다 저 설정을 해야한다.
아예 톰캣의 설정방식을 UTF로 바꾸자->서버.xml로 그러나 부담
톰캣이라는 녀석은 여러 어플리케이션을 하는 컨테이너
따라서 모든 설정을 바꾸는 것은 부담
그래서 생각해본 옵션이 중간에 갈아끼울 수 있는 소프트웨어
다음 실행되고 말고도 결정
수문장 역할도 한다
인증과 권한 권한을 줄것인가 말것인가
한번에 설정하게 되면 다 영양을 줄 수 있도록
이녀석을 필터라 한다. 하나의 클래스이다.

자 이제 필터를 만들어보자

package com.newlecture.web.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterEncodingFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request
			, ServletResponse response
			, FilterChain chain)
			throws IOException, ServletException {
		
		System.out.println("hello filter");

	}

}

필터를 설정하는 방법은 web.xml과 annotaiton 2가지가 있다.

먼저 첫번째 web.xml 설정하는 방법


나오는게 아무것도 없다 하지만 필터가 동작하고 있기 때문에
새로고침할 때마다 콘솔창에 'hello filter'가 올라온다.

필터는 출력되는데 notice-reg는? 이는 chain이 결정한다.
chain.doFilter(request,responxe);
요청이 오면 흐름을 그냥 넘겨서 다음 필터 혹은 서블릿이 실행되도록 그 후 그 결과가 오면 그다음에 System.out.println 어떻게 보면 필터가 실행된 후에

두번째 annotation을 사용한다.

profile
꾸준하게 Ready, Set, Go!

0개의 댓글