<?xml version="1.0"?>
<rss version="2.0">
   <channel>
      <title>웹자바 by 강다영</title>
      <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu</link>
      <description></description>
      <language>en-us</language>
      <pubDate>2024-09-11 05:57:12 UTC</pubDate>
      <lastBuildDate>2025-08-05 04:47:08 UTC</lastBuildDate>
      <webMaster>hello@padlet.com</webMaster>
      <image>
         <url></url>
      </image>
      <item>
         <title>용어 정리</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113653580</link>
         <description><![CDATA[<blockquote><p><strong>JSP (JavaServer Pages )</strong></p></blockquote><p>HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구</p><p><br/></p><p>JSP 가 실행되면 자바 서블릿(Servlet) 으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고 그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다</p><p><br/></p><p>/* 웹 작동방식 및 용어 정리 깔끔히 되어 있는 버튼 경로 설정해둠  */</p><p><br/></p><blockquote><p><strong>서블릿(Servlet)</strong></p></blockquote><ul><li><p>자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램(클래스)</p></li><li><p>웹용 자바</p></li></ul><p><br/></p><p>서블릿를 쓰려면 JSP 또한 알고 넘어가야하는데,</p><p>JSP는 서블릿을 쓰기 좋게 포장한 것이라 볼 수 있다.</p><p>JSP는 HTML 안의 Java, <mark>Servlet은 Java 안의 HTML</mark> 이라고 알아두자!!(일단은) &lt;- 설명 인터넷 참조</p><p><br/></p><blockquote><p><strong>MVC</strong></p></blockquote><p><strong>M(model)</strong> : Oracle DB</p><p><strong>V(view)</strong> : HTML/CSS/JSP</p><p><strong>C(controll)</strong> : Servlet = 웹자바를 위해 나중에 나온 패키지</p><p><br/></p><blockquote><p><strong>Request 객체</strong></p></blockquote><p>=클라이언트가 보내는 데이터</p><p><br/></p><p>setParameter() -&gt; 사용못함</p><p>getParameter() -&gt; 사용가능</p><p>setAttribute() -&gt; 사용가능</p><p><br/></p><blockquote><p><strong>Response 객체</strong></p></blockquote><p>=객체에 바인딩하거나 읽어올 때 사용됨</p><p>HTTP 응답을 클라이언트에게 전송하는 데 사용되는 객체이기에 아래와 같은 메서드를 지원하지 않는다</p><p><br/></p><p>getParameter() -&gt; 사용못함</p><p>setAttribute() -&gt; 사용못함</p><p><br/></p><p><br/></p><blockquote><p><strong>Scope 범위</strong></p></blockquote><p>객체가 특정 범위 내에서 얼마나 오래 유지되고, 어디서 접근할 수 있는지를 결정하는 개념</p><p><br/></p><p>page &lt; request &lt; session &lt; application</p><p><br/></p><ol><li><p><strong>page(JSP 페이지 범위)</strong></p><ul><li><p><strong>설명</strong>: 객체가 현재 JSP 페이지에서만 유효하며, 다른 페이지로 전달되지 않음</p></li><li><p><strong>생명주기</strong>: JSP 페이지가 처리되는 동안에만 객체 존재</p></li><li><p><strong>사용 예시</strong>: JSP 내에서 일시적 데이터 처리할 때 사용</p></li></ul><p><br/></p></li></ol><ol start="2"><li><p><strong>request(요청 범위)</strong></p><ul><li><p><strong>설명</strong>: 객체가 하나의 HTTP 요청 동안 유효, 요청이 처리되는 동안 여러 JSP 페이지 간에 공유될 수 있음</p></li><li><p><strong>생명주기</strong>: 클라이언트의 HTTP 요청이 서버에서 처리되는 동안 유지</p></li><li><p><strong>사용예시</strong>: 여러 JSP 페이지에서 공통된 데이터 사용할 때, ex) 폼 데이터 처리하거나 forward 또는 include 태그로 다른 JSP 페이지에 데이터 전달할 때 사용</p></li></ul></li><li><p><strong>session(세션 범위)</strong></p><ul><li><p><strong>설명</strong>: 객체가 클라이언트와 서버 간의 세션 동안 유효, 세션이 유지되는 동안 같은 클라이언트로부터 오는 여러 요청에서 공유</p></li><li><p><strong>생명주기</strong>: 사용자의 세션이 유지되는 동안, 사용자가 웹 애플리케이션에 접속해 있는 동안</p></li><li><p><strong>사용예시</strong>: 사용자의 로그인 상태 유지하거나, 장바구니 같은 지속적인 데이터 유지할 때 사용</p></li></ul></li><li><p><strong>application(애플리케이션 범위 = 다이나믹 프로젝트 폴더)</strong></p><ul><li><p><strong>설명</strong>: 객체가 웹 애플리케이션 전역에서 공유되며, 모든 사용자와 모든 세션에서 공통적 접근 가능</p></li><li><p><strong>생명주기</strong>: 웹 애플리케이션이 실행되는 동안 계속 유지</p></li><li><p><strong>사용예시</strong>: 웹 애플리케이션 전체에서 공통된 데이터를 유지하고 공유할 때 사용. 예를 들어, 데이터베이스 연결 풀과 같은 리소스 관리시 유용</p><p><br/></p></li></ul></li></ol><p><br/></p><blockquote><p><strong>자바빈</strong></p></blockquote><p>=재사용 가능한 자바 <mark>객체</mark></p><p>주로, JSP와 같은 서버 측 애플리케이션에서 데이터를 처리하고 전달하는 데 사용</p><p><br/></p><p>ex) // 사용할 자바빈 생성</p><p>	MemberBean <mark>mbean</mark> = new MemberBean("gimssam","1111","홍길동","<a rel="noopener noreferrer nofollow" href="mailto:indopop@naver.com">indopop@naver.com</a>");</p><p><br/></p><p><strong>자바빈 특징</strong></p><ol><li><p><strong>캡슐화</strong></p><p>객체의 멤버 변수(속성)를 접근제어자 private로 선언하여 외국에서 접근하지 못하며,  getter와 setter 메서드를 통해 접근</p></li><li><p><strong>기본 생성자</strong></p><p>기본 생성자(매개변수가 없는 생성자)를 반드시 가져야 함</p><p>-&gt; JSP에서 자바빈을 사용할 때 객체를 자동으로 초기화하기 위함</p></li><li><p><strong>직렬화 기능</strong></p><p>직렬화가 가능해야 하며, 객체를 파일이나 네트워크를 통해 전달하거나 세션에 저장할 때 필요한 기능</p></li></ol><p><br/></p><p><strong>자바빈 규칙</strong></p><ol><li><p>모든 속성은 private 선언</p></li><li><p>getter/setter 메서드를 통해 속성에 접근</p></li><li><p>기본 생성자 반드시 필요</p></li><li><p>Seicalizable(직렬화) 인터페이스 구현</p></li></ol><p><br/></p><p><strong>표현식</strong></p><p><br/></p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/8200e3b503a9a88c3528aada062d6b7e/______2024_09_23_142436.png" />
         <pubDate>2024-09-11 06:01:04 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113653580</guid>
      </item>
      <item>
         <title>웹 작동방식</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113654246</link>
         <description><![CDATA[<p><strong>기본원리 :</strong></p><p>클라이언트(브라우저)가 요청하면 server가 응답</p><p><br></p><p><strong>응답과정:</strong></p><p>클라이언트(브라우저에서)의 요청 REQ(Request) &gt; 서버에서 기계어로 응답 RES(Response) &gt; 써블릿 언어로 자동 변환 &gt; 톰캣을 이용해 써블릿 언어 해석 &gt; 브라우저로 전송</p><p><br></p><ol><li><p><strong>브라우저 -&gt; 요청</strong></p></li></ol><p>	GET/hello?username=world HTTP/1.1</p><p>	Host:<a rel="noopener noreferrer nofollow" href="http://localhost">localhost</a>8090</p><p>	request객체 = 요청 <a rel="noopener noreferrer nofollow" href="http://localhost">localhost</a>8090/hello</p><p><br></p><p><br></p><ol start="2"><li><p><strong>서버 -&gt; 응답</strong></p></li></ol><p>	HTTP 응답 메세지</p><p>	HTTP/1.1 200 OK</p><p>	Content-Type:text/plain;charset=utf-8</p><p>	Content-Length: 11(문자열수) = 웹애플리케이션 서버가 자동으로 생성</p><p>	response 객체 = 응답 hello world</p><p><br></p><p>브라우저가 (db와 연결되어 있는 서버)에 요청하는 것을 http 요청(GET)방식의/(hello?)사용할 문서명 문서명 뒤에 물음표는 형식 (username=world)키밸류 인풋태그안에 속성명 쓰는거(HTTP/1.1)버전 (Host:<a rel="noopener noreferrer nofollow" href="http://localhost:8090">localhost:8090</a>) 서버명이라고 한다</p><p><br></p><p><strong>주소:</strong></p><p><a rel="noopener noreferrer nofollow" href="http://localhost:8090/JChap01/index.html"><strong>ex) http://localhost:8090/JChap01/index.html</strong></a></p><p>= <a rel="noopener noreferrer nofollow" href="http://%EC%84%9C%EB%B2%84%EA%B2%BD%EB%A1%9C/%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98(%ED%8F%B4%EB%8D%94%EB%AA%85)/html%EB%AA%85">http://서버경로/어플리케이션(폴더명)/html명</a></p><p><br></p><p><strong>/* 아파치 톰캣 */</strong></p><p>= servlet만 해석할 수 있는 서버</p><p><br></p><ul><li><p>메서드 작성시 select 문만 리턴타입을 가질 수 있음</p></li><li><p>브라우저가 요청을 하게 되면 톰캣에 request와 response 객체 자동 생성</p></li><li><p>이후, request 객체에 요청 내용이 들어가고, 코딩된 써블릿 내용 중 request와 관련된 내용이 response 객체에 들어가 브라우저로 응답</p></li></ul><p><br></p><blockquote><p><strong>get 방식</strong></p></blockquote><ol><li><p>데이터를 URL의 쿼리스트링(query string)에 붙여서 서버로 전송 -&gt; 보안에 취약</p></li><li><p>URL에 쿼리스트링을 통해 데이터를 포함하기 때문에 브라우저에서 <strong>캐시</strong>될 수 있음</p></li><li><p>데이터를 URL에 직접 포함하므로 <strong>길이 제한 </strong>있음</p><p><br></p></li></ol><p><strong>get 방식 사용 목적</strong></p><p>주로 데이터를 요청하거나 검색할 때 사용</p><p><br></p><blockquote><p><strong>post 방식 </strong></p></blockquote><ol><li><p>데이터를 HTTP 요청의 본문(body)에 담아 전송</p></li><li><p>URL에는 데이터가 표시되지 않음 -&gt; 보안성 높음</p></li><li><p>데이터를 본문에 담아 보내므로 데이터 길이에 제한 없음</p></li><li><p>URL에는 데이터가 보이지 않기 때문에, <strong>캐시되지 않음</strong></p></li></ol><p><br></p><p><strong>post 방식 사용 목적</strong></p><p>데이터를 서버로 전송하거나 데이터베이스에 저장하는 등 <strong>변경</strong>이 필요한 작업에서 주로 사용</p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/d6a7ea03dee3b3049f2724553ec5c238/______2024_09_12_155549.png" />
         <pubDate>2024-09-11 06:01:31 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113654246</guid>
      </item>
      <item>
         <title>폴더 및 파일 설명 정리</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113659849</link>
         <description><![CDATA[<p><strong>Framework란?</strong></p><p>= 틀, 액자</p><ul><li><p>daynamic work도 framework에 포함됨</p></li></ul><p><br/></p><p><strong>src/main/java 폴더</strong></p><p>= 동적 관련 자바 언어 들어가는 곳</p><p><br/></p><p><strong>src&gt;main&gt;webapp 폴더</strong></p><p>= 작업 뷰 폴더, 가장 중요한 폴더, 정적인 것 들어가는 곳 (ex. html, css)</p><p><br/></p><p><strong>WEB-INF 폴더</strong></p><p>= xml 파일 들어가는 곳</p><p><br/></p><p><strong>WEB-INF &gt; lib 폴더</strong></p><p>= 플러그인들 들어가는 곳</p>]]></description>
         <enclosure url="" />
         <pubDate>2024-09-11 06:05:14 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113659849</guid>
      </item>
      <item>
         <title>기타</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113662510</link>
         <description><![CDATA[<p><strong>html 버전 설정하는 영역</strong></p><p>= dtd(Doctype)</p><p><br></p><p><strong>web</strong></p><p>= stand alone(홀로서기)</p><p>-&gt; 각 탭마다 탭끼리 간의 데이터를 공유하지 못함</p><p>-&gt; 그래서 get 방식으로 데이터를 넘겨주고는 했었더라~</p>]]></description>
         <enclosure url="" />
         <pubDate>2024-09-11 06:07:00 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113662510</guid>
      </item>
      <item>
         <title>이클립스 플러그인 emmet 설치하기</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113684922</link>
         <description><![CDATA[<p><strong>설치 이유</strong></p><p>이클립스에서 HTML 확장자 파일을 사용할때 VSCode처럼 Tab버튼으로 자동완성 할 수 있게 만들기 위해 설치</p><p><br/></p><p><br/></p><p>/* emmet 설치법 경로 걸어둠 */</p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/e2a182ac8bbcadbd1a63afa68df899d8/______2024_09_11_152126.png" />
         <pubDate>2024-09-11 06:19:45 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113684922</guid>
      </item>
      <item>
         <title></title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113771077</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/8d5b12a46bb3d8d3a96e56c9a8960897/______________.pdf" />
         <pubDate>2024-09-11 07:09:01 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113771077</guid>
      </item>
      <item>
         <title>로그인 연동하기 1</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113779755</link>
         <description><![CDATA[<p>그림과 같이 html 작성 후 Run 버튼 눌러 크롬에 띄운 결과</p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/134825c4f0cfb3b908650e87ff8a8b6f/______2024_09_11_161119.png" />
         <pubDate>2024-09-11 07:14:09 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113779755</guid>
      </item>
      <item>
         <title>로그인 연동하기2 - get 방식</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113784241</link>
         <description><![CDATA[<p>생성한 서블릿에 값 입력</p><p><br></p><p>/* 해당 사진은 get 방식으로 작성된 코드 */</p><p><br></p><ol><li><p>클라이언트(브라우저)에서 로그인 버튼을 누름을 통해 서버에 아이디, 비밀번호 정보 <mark>요청</mark></p></li><li><p>이때, 자동으로 서블릿 언어를 해석해주는 톰캣에 HttpServletRequest와 HttpServletResponse 객체 생성</p><p><br></p><p>사진 속, HttpServletRequest 옆 request는 HttpServletRequest 객체의 인스턴스와도 같다고 볼 수 있음</p><pre><code>ex)
HttpServletRequest request = new HttpServletRequest</code></pre><p>이와 같은 과정을 톰캣에서 자동처리하며 생략 후 HttpServletRequest request 라고만 뜨는 것!</p><p>-&gt; HttpServletResponse도 같은 원리</p><p>-&gt;따라서, request이든 req든 인스턴스명은 변경되어도 상관없음</p></li><li><p>한글이 깨지지 않게 인코딩 메소드 활용해 utf-8 설정</p><pre><code>request.setCharacterEncoding("utf-8");</code></pre><p>-&gt;요청받은 데이터가 깨지지 않게끔 하기 위해 인스턴스명 request에 할당</p></li><li><p>로그인 연동하기1 페이지에서 input name 명이었던 user_id와 user_pw에 각각 getParmeter() 메서드로 속성값 받아옴</p><p>-&gt; 브라우저에서 사용자가 아이디와 비밀번호를 입력하면 해당 메서드에 전송됨</p></li><li><p>input type="text"와 type="password"는 기본적으로 String 타입이기에 해당 사진 속 서블릿에서도 String 타입으로 변수명 user_id(변수명이기에 꼭 user_id라고 쓰지 않아도 됨)를 지정한 모습이다</p><p>-&gt; 그 예시로 변수명 user_id와 user_pw를 그냥 id와 pw로 변경했을때도 똑같이 적용되는 모습을 확인할 수 있었다</p></li></ol>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/264a1b134c3033606383827a738cc804/______2024_09_11_161455.png" />
         <pubDate>2024-09-11 07:16:45 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113784241</guid>
      </item>
      <item>
         <title>어노테이션</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113822084</link>
         <description><![CDATA[<p>노션에도 적어뒀지만</p><p><br/></p><p>로그인 연동하기2의 사진 속</p><p>@WebServlet("/Hohoho")는 어노테이션이라고 부르며, 서블릿과 html을 연동시키는 역할을 한다</p><p><br/></p><p><strong>연동하는 법:</strong></p><p>html의 action 명 = 서블릿의 어노테이션 명</p><p><br/></p><p>참고예시)</p><p>로그인 연동하기1의 form action명과 로그인 연동하기2의 어노테이션명 일치</p><p><br/></p><p><strong>어노테이션 없는 ver. :</strong></p><p>어노테이션을 사용하지 않는다면 직접</p><p>다이나믹 워크 프로젝트 &gt; src &gt; main &gt; webapp &gt; WEB-INF &gt; lib 우클릭 &gt; new &gt; other.. &gt; XML &gt; XML file을 생성해 해당 사진과 같이 세팅 해야하는 번거로움이 있음</p><p><br/></p><p>사진처럼 오류났다고 뜨면 그냥 오류났다는 부분 ctrl x 한 다음 다시 붙여넣기 해주면 되고, 굳이 안해도 지장은 없음</p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/7fb779beabf8bcb13f849d2a6a15c7da/______2024_09_11_164351.png" />
         <pubDate>2024-09-11 07:38:39 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113822084</guid>
      </item>
      <item>
         <title>한글 깨짐 방지</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113892187</link>
         <description><![CDATA[<p><strong>// 두줄 쓰기</strong></p><p>적용하고자하는 객체의 인스턴스.setContentType("text/html");</p><p>적용하고자하는 객체의 인스턴스.setCharacterEncoding("utf-8");</p><p><br/></p><p><strong>// 한줄 쓰기</strong></p><p>response.setContentType("text/html;charset=utf-8");</p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/9dc9529ef07fcacff1a13160ad90941a/______2024_09_11_172311.png" />
         <pubDate>2024-09-11 08:22:58 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113892187</guid>
      </item>
      <item>
         <title>HttpServletResponse 객체 response</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113896065</link>
         <description><![CDATA[<p><strong>ex) public class A01HelloWorld extends HttpServlet {}</strong></p><p>예시처럼 서블릿 파일은 항상 HttpServlet 을 상속받아야 함</p><p><br/></p><p>해당 사진은 서블릿의 response를 이용해 마치 html과 같은 효과를 보여준 모습이다</p><p><br/></p><p><strong>PrintWriter</strong></p><p>=자바(Java)에서 <strong>문자 출력 스트림</strong>을 다루기 위한 클래스</p><p>=텍스트 데이터를 파일, 콘솔 또는 다른 출력 대상에 출력하는 데 사용</p><p><br/></p><p><strong>getWriter() 메소드</strong></p><p>=Java Servlet에서 <strong>HTTP 응답 객체</strong>인 HttpServletResponse에서 사용되는 메서드로, 클라이언트로 데이터를 출력하는 데 사용</p><p>=서블릿이 응답을 작성할 때, 텍스트 형식의 데이터를 클라이언트(예: 웹 브라우저)로 전송할 수 있는 <strong>PrintWriter 객체</strong>를 반환</p><p>=주로 텍스트 데이터를 클라이언트에게 전달할 때 사용</p><p><br/></p><p><strong>print()</strong></p><p>데이터를 출력하지만 개행(줄바꿈)은 하지 않음.</p><p><br/></p><p><strong>println()</strong></p><p>데이터를 출력하고 줄바꿈을 추가.</p><p><br/></p><p>prinln메서드로 html 태그를 하나하나씩 써야 한다는 게 단점이며, 값을 다 입력했으면 가장 마지막에 .close()메소드로 (굳이 막지 않더라도 작동은 되지만)더미값이 혹시라도 생기지 않게 막아준다</p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/ae685a4fc9006849fe3932561e8a2457/______2024_09_11_172908.png" />
         <pubDate>2024-09-11 08:25:30 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3113896065</guid>
      </item>
      <item>
         <title>데이터 HTML 출력</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3115684674</link>
         <description><![CDATA[<p>데이터를 브라우저로 출력하는 방법 중 하나는 println()메서드로 출력하는 것과, 사진처럼 데이터를 HTML 형식으로 만들어 출력하는 방법 등이 있다</p><p><br/></p><p>해당 사진에서는 문자열 값이 들어갈 수 있는 data라는 변수에 증감연산자 +=를 활용하여 HTML의 태그를 하나하나 입력해나가는 방식이다</p><p><br/></p><p>그러나 브라우저 출력시 핵심은 <mark>PrintWriter 클래스</mark>와 <mark>getWriter() 메서드</mark>로, 증감연산자를 활용해 입력한 HTML 데이터를 브라우저에 보여주는 역할을 하기 때문이다</p><p><br/></p><p>한마디로, 증감연산자 활용한 건 그저 브라우저에 노출할 HTML형식 생성한 것 뿐 !</p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/013b56386896bdba5b53b83abd47fc12/image.png" />
         <pubDate>2024-09-12 03:18:48 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3115684674</guid>
      </item>
      <item>
         <title>로그인 연동하기 3 - post 방식</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3115962813</link>
         <description><![CDATA[<p><strong>post 방식이란?</strong></p><p>브라우저에서 입력한 동적 데이터 값이 get 방식은 주소창에 노출 되어 보안이 우려될 가능성이 있다면 post 방식은 데이터 값을 숨겨 주소창에 데이터 값이 뜨지 않음</p><p><br></p><p><strong>get 방식과 post 방식의 차이점</strong></p><p>간단하게도 get 방식은 doGet() 메서드 안에 코드 작성했다면 post 방식은 doPost() 메서드 안에 작성한다는 정도의 차이 점이 있다</p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/105057b1c3fa5939f78c6852a6aa6161/______2024_09_12_150529.png" />
         <pubDate>2024-09-12 06:02:15 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3115962813</guid>
      </item>
      <item>
         <title>로그인 연동하기 4 - 3 예시 스크립트 해석</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3115973552</link>
         <description><![CDATA[<p><strong>validate() 메서드</strong></p><ul><li><p>여러 프로그래밍 언어에서 데이터의 유효성을 검사하기 위해 사용</p></li><li><p>웹 애플리케이션이나 데이터 입력 시 사용자가 제공한 데이터가 형식이나 조건에 맞는지 확인하는 데 자주 사용</p><p><br/></p></li></ul><p><strong>|| 논리 연산자</strong></p><p>or의 의미를 가지며 A || B 일때 둘 중 하나의 값이라도 참이면 true</p><p><br/></p><p>***</p><p><br/></p><p><strong>해석</strong></p><p>if문 -&gt; ID나 비밀번호의 데이터 갯수가 하나도 없거나, 값이 없다면 '아이디와 비밀번호를 입력해주세요' 경고창을 띄운다</p><p><br/></p><p>만일 값이 둘 다 있다면 formLogin의 method(전송방식)은 post방식으로 하고 action 이름도 loginPost로 지정하며, formLogin을 submi() 제출 하겠다는 뜻</p><p><br/></p><p>***</p><p><br/></p><p><strong>헷갈렸던 점</strong></p><p><strong>Q.</strong> 이미 html 창에 폼의 method와 action 명 등이 이미 지정되어 있는데 왜 굳이 script 에 또 다시 작성해줘야 했을까? else{}칸이 비어있어도 괜찮지 않았을까?</p><p><br/></p><p><strong>A. </strong>validate() 메서드로 유효성 검사를 하고 있는 지금 else{} 칸을 비워두게 되면 유효성 검사를 통과해도 아무런 작업을 하지 않게 됨</p><p>서버로 데이터값이 전송되더라도 action과 method는 기본 설정된 값(method같은 경우 기본 방식이 get방식)으로 전송되기에 정확한 명시성을 위해 작성</p><p><br/></p><p>그러나 해당 사진에서는 이미 html에 method 방식과 action명을 지정해두었기 때문에 당장은 else{}칸을 비워도 작동하기는 하겠지만, 추후 변경 사항이 생겼을 경우 HTML 자체를 수정해야 할 수도 있음</p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/1cb729c97995f496d6aa8ee4c935673f/______2024_09_12_150810.png" />
         <pubDate>2024-09-12 06:07:49 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3115973552</guid>
      </item>
      <item>
         <title>로그인 연동하기 5 - getPost 방식</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3116045076</link>
         <description><![CDATA[<p>인터넷에 찾아도 잘 안나오기는 한데(챗gpt도 못알려줌).. 사용방법은 get방식이 doGet() 메서드를 사용하고, post 방식이 doPost() 방식을 사용했던 것처럼 doGetPost() 메서드 사용한다</p><p><br/></p><p>get방식과 post방식을 구분하기 귀찮아서 쓰는 야매 방식이라고 일단 이해함</p><p><br/></p><p>get 방식으로 데이터가 들어오든 post 방식으로 데이터가 들어오든 다 doGetPost() 메서드로 전송되게끔 각각의 doGet() 과 doPost()에 아래 코드를 작성한다</p><pre><code>doGetPost(request, response);</code></pre><p><br/></p><p>내용은 doGet()에 쓰는 것대로 doPost()에 썼던 것처럼 방식만 다른거고 쓰는 거는 같음</p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/1508dff299354f62b23464b0fcc91139/______2024_09_12_150810.png" />
         <pubDate>2024-09-12 06:46:15 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3116045076</guid>
      </item>
      <item>
         <title>다양한 폼 데이터 받기</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3116077835</link>
         <description><![CDATA[<p><strong>multiple 속성</strong></p><ul><li><p>사용자가 여러 개의 값을 선택할 수 있게끔 하는 속성</p></li><li><p>주로 select 태그와 input 태그에서 사용됨</p></li><li><p>여러 값을 동시에 선택(ctrl, shift)하거나 업로드 할 수 있게 함</p></li></ul><pre><code>&lt;select name="five" multiple size="7"&gt;
  &lt;option value=""&gt;선택해주세요&lt;/option&gt;
  &lt;option value="두산"&gt;두산&lt;/option&gt;
  &lt;option value="Samsung"&gt;Samsung&lt;/option&gt;				&lt;/select&gt;</code></pre><p>해당 사진에서 인기구단은 같은 select 태그로 작성된 폼임에도 불구하고 위에거는 단독으로만 선택이 가능하고 아래거는 ctrl을 활용하여 다중 선택이 된 모습이다</p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/9488f84945bd122e00bfccf90adf7699/______2024_09_12_160838.png" />
         <pubDate>2024-09-12 07:03:54 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3116077835</guid>
      </item>
      <item>
         <title>포워드(Forward)와 리다리이렉트(Redirect)</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3117972482</link>
         <description><![CDATA[<blockquote><p><strong>포워드와 리다이렉트란?</strong></p></blockquote><p><br></p><p><strong>포워드</strong></p><ul><li><p>클라이언트(브라우저)의 요청을 다른 서블릿이나 JSP 페이지로 전달하는 기능</p></li><li><p>데이터를 추가하는 것도 가능</p></li><li><p>클라이언트로써는 한 자원에서 다른 자원으로 요청이 전달되었음을 알 수 없으며 주소창도 변경되지 않음</p></li><li><p>서버 내부에서 처리가 이루어지기에 속도가 빠름</p></li><li><p>클라이언트와 서버 간 요청은 한 번만 이루어짐</p></li></ul><p><br></p><p><strong>리다이렉트</strong></p><ul><li><p>서버는 클라이언트에게 다른 URL로 이동하라는 응답을 보내고, 클라이언트가 다시 그 URL로 새로운 요청을 보냄</p></li><li><p>클라이언트와 서버 간 요청이 두 번 발생하며, URL 주소 변경됨</p></li><li><p>통신이 두 번이나 이루어지므로 포워드보다 느릴 수 있음</p></li></ul><p><br></p><p>***</p><blockquote><p><strong>어떨때 사용하는가?</strong></p></blockquote><p><br></p><p><strong>포워드를 사용하는 경우</strong></p><ul><li><p><strong>데이터 유지하면서 페이지 전환 </strong>-&gt; 후속 작업 진행에 용이</p></li><li><p><strong>로그인 처리 후</strong> -&gt; 사용자의 정보를 특정페이지로 전달해 사용자 환영 메시지나 계정 정보 보여주기 가능</p></li><li><p><strong>에러 처리</strong> -&gt; 요청 처리 중 오류 발생시 에러 페이지로 포워딩하여 사용자에게 적절한 에러 메시지 표시 가능</p><p><br></p></li></ul><p><strong>리다이렉트를 사용하는 경우</strong></p><ul><li><p><strong>로그인 처리 후</strong> -&gt; 사용자가 로그인 처리를 완료한 후, 홈 페이지나 대시보드와 같은 다른 페이지로 이동시키는 경우</p></li><li><p><strong>다른 웹 애플리케이션 또는 외부 사이트로의 이동 </strong>-&gt; ex) 결제 시스템 이용하기 위해 외부 결제 페이지로 이동시키는 경우</p></li></ul>]]></description>
         <enclosure url="" />
         <pubDate>2024-09-13 05:06:11 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3117972482</guid>
      </item>
      <item>
         <title>포워드 방법 01_RequestDispatcher </title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3118008090</link>
         <description><![CDATA[<p><strong>RequestDispatcher를 이용한 포워딩</strong></p><ul><li><p><strong>RequestDispatcher 객체 생성</strong>:</p><ul><li><p>request.getRequestDispatcher(String path) 메서드를 사용하여 자원에 대한 RequestDispatcher 객체를 생성</p></li></ul></li><li><p><strong>forward() 메서드</strong> :</p><ul><li><p>dis.forward(request, response)를 호출하면 클라이언트의 요청을 지정한 다른 자원(서블릿이나 JSP)으로 전달</p></li><li><p>원래 요청 객체 req와 res가 그대로 전달되기 때문에, 새로 요청을 생성할 필요 x</p></li></ul><pre><code>RequestDispatcher dis = request.getRequestDispatcher("dispatcher2?name=ezen");

dis.forward(request, response); </code></pre></li></ul>]]></description>
         <enclosure url="" />
         <pubDate>2024-09-13 05:30:41 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3118008090</guid>
      </item>
      <item>
         <title></title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3118272966</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/4a09873aa779242f269df5d61695d130/___.txt" />
         <pubDate>2024-09-13 08:31:02 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3118272966</guid>
      </item>
      <item>
         <title>세션(Session)</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3127048491</link>
         <description><![CDATA[<blockquote><p><strong>세션이란?</strong></p></blockquote><p>웹 자바에서의 세션은 주로 HTTP 세션(HttpSettion 객체 사용)을 의미하며, 서버와 브라우저간 상태를 유지하기 위한 메커니즘이다.</p><p><br></p><p>HTTP는 본래 상태를 유지하지 않는 프로토콜이기 때문에, 세션을 통해 사용자가 사이트를 방문하는 동안 발생하는 여러 요청들이 동일 사용자로부터 온 것임을 식별 가능</p><p><br></p><blockquote><p><strong>세션을 사용하는 이유</strong></p></blockquote><ol><li><p><strong>상태유지</strong></p><ul><li><p>HTTP는 비상태적인 프로토콜이기에, 세션을 사용하지 않으면 서버는 각 요청이 동일 사용자로부터 왔는지 알 수가 없다</p></li><li><p>로그인 정보, 장바구니 상태 등을 유지</p></li></ul></li><li><p><strong>보안</strong></p><ul><li><p>민감한 사용자 데이터를 서버에 저장 후 쿨러아온트에 보내지 않으므로 보다 안전하게 데이터 처리 가능</p></li></ul></li></ol><p><br></p><blockquote><p><strong>세션 주요 특징</strong></p></blockquote><ul><li><p>브라우저당 한개씩 생성(=사용자가 한개 생성)</p></li><li><p>브라우저 종료시 세션 해제)</p></li></ul><p><br></p><blockquote><p><strong>세션을 이용한 웹 페이지 연동</strong></p></blockquote><p>웹 페이지들간의 공유 정보를 서버에 저장 -&gt; 웹 페이지들 매개해 주는 방법</p><ul><li><p>서버의 메모리에 생성되어 정보 저장</p></li><li><p>로그인처럼 보안이 요구되는 정보는 대부분 세션 사용</p></li></ul><p><br></p><blockquote><p><strong>세션 API(Application Programming Interface - 응용 프로그램 간의 상호작용을 위한 인터페이스)</strong></p></blockquote><ol><li><p>HttpSession 객체</p></li><li><p>HttpServletRequest의 getSession() 메서드 호출</p><ul><li><p>getSession() 메서드:</p><p>기본 세션 객체가 존재하면 반환, 없으면 새로 생성</p></li></ul></li></ol><p><br></p><blockquote><p><strong>세션 실행 과정</strong></p></blockquote><p><strong>A. 클라이언트 브라우저 =&gt; 서버에 최초 접속</strong></p><p>      a. 서버의 서블릿은 세션 객체를 생성</p><p>      b. 세션 객체에 대한 세션 id를 브라우저에 전송</p><p>      c. 브라우저는 서버로부터 받은 세션 id를 브라우저가 사용하는 (세션쿠키)에 저장</p><p>        =&gt; 서버로부터 전송된 세션 id도 일종의 쿠키임</p><p>    <strong>B. 클라이언트 브라우저 =&gt; 재접속시</strong></p><p>      a. 세션 쿠키에 저장된 세션 id를 다시 서버로 전송</p><p>      b. 서버에서는 전송된 세션 id를 이용</p><p>      c. 브라우저 세션 객체에 접근하여, 브라우저에 대한 작업수행(예.로그인성공!! 로그인실패!!)</p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/f9848ac9df7fc1cbd26d421c58b4fc5b/908da660_9db6_4e08_8d6f_fcbb56f1242a________.pdf" />
         <pubDate>2024-09-19 05:13:14 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3127048491</guid>
      </item>
      <item>
         <title>액션 태그(Action Tag)</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3132439084</link>
         <description><![CDATA[<blockquote><p><strong>액션 태그란?</strong></p></blockquote><p>JSP(Java Server Pages)에서 사용되는 태그로, <mark>특정 작업을 수행</mark>하거나 <mark>자바 객체를 JSP 페이지에 전달</mark>하는 등의 기능 제공</p><p><br></p><blockquote><p><strong>목적</strong></p></blockquote><p>자바코드를 JSP파일에서 없애는 것</p><p>: 화면이 점차 복잡해짐에 따라 프론트엔드 개발자(=퍼블리셔)들도 자바코드를 써야하는 문제로 이슈 발생</p><p><br></p><p>그래서 JSP는 스크립틀릿(&lt;% %&gt;)의 자바 코드 제거, 더 쉽고 편리하게 작업할 수 있는 태그 형태로 기능 제공</p><p>= 액션 태그</p><p><br></p><blockquote><p><strong>종류</strong></p></blockquote><ul><li><p>인클루드 액션태그</p><pre><code>jsp:include page="인클루드할 페이지.jsp"</code></pre></li><li><p>포워드 액션태그(서블릿 RequestDispatcher 클래스의 포워딩 기능을 대신하는 태그)</p><pre><code>jsp:forward</code></pre></li><li><p>유즈빈 액션태그(객체 생성용 태그)</p><pre><code>jsp:useBean</code></pre></li><li><p>셋프로퍼티 액션태그(setter를 대신하는 태그)</p><pre><code>jsp:setProperty</code></pre></li><li><p>겟프로퍼티 액션태그(getter를 대신하는 태그)</p><pre><code>jsp:getProperty</code></pre></li></ul><p><br></p><blockquote><p><strong>기능</strong></p></blockquote><ul><li><p>자바빈(JavaBean)관리</p></li><li><p>페이지 간의 제어 흐름 관리</p></li><li><p>XML 및 HTML과 함께 표현</p></li></ul>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/4ef7b064981ff3863bd1cf01420354c2/bde0b18d_ccc9_49ee_9ede_ab2a20be5ea2_______Action_Tag_.pdf" />
         <pubDate>2024-09-23 04:52:46 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3132439084</guid>
      </item>
      <item>
         <title>표현언어(Expression Language)</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3134849522</link>
         <description><![CDATA[<p>자바 코드가 들어가는 표현식을 좀 더 편안하게 사용하기 위해 표현언어 등장</p><p><br></p><p>페이지 디렉티브에 isELIgnored false로 설정해 주는 것이 기본이나 JSP 2.0 버전 이상부터는 기본적으로 내장되어 있어서 따로 지정해주지는 않아도 됨</p><p><br></p><p><strong>특징</strong></p><ul><li><p>기존 표현식보다 편리하게 데이터 출력 가능</p></li><li><p>변수와 여러가지 연산자 포함 가능</p></li><li><p>JSP 내장 객체에 저장된 속성 및 자바의 빈 속성도 출력가능</p><pre><code>ex)
${id }
${member.id }
${param.id }</code></pre></li><li><p>표현언어 자체의 내장객체도 제공</p></li><li><p>JSP 기본 설정시 표현언어를 사용할 수 없으므로 페이지 디렉티브에 저장</p></li></ul>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/81f88a0de57803b82cb5b0ce823fe160/2da2471f_c219_4874_8834_dd1da6c68d3c_EL_Expression_Language______.pdf" />
         <pubDate>2024-09-24 05:08:46 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3134849522</guid>
      </item>
      <item>
         <title>액션 태그 &amp; 표현 언어 활용</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3134929133</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/cdb8a6677025fa69ca46f9339bdbacdd/93cfa310_1440_44fa_96fb_bd9ae46810c6________EL___.pdf" />
         <pubDate>2024-09-24 05:55:45 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3134929133</guid>
      </item>
      <item>
         <title>표현 언어 &amp; 배열 활용</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3134964648</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/16d93226136e2d9aae60ad447c62b502/e42399a0_9f0a_4e23_941d_a45548ff907d_EL__Arraylist___.pdf" />
         <pubDate>2024-09-24 06:17:17 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3134964648</guid>
      </item>
      <item>
         <title>바인딩(Binding)</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3135023701</link>
         <description><![CDATA[<p><strong>바인딩이란?</strong></p><p>객체를 특정 범위(request, session, application)에 저장하는 것을 의미</p><p><br/></p><p>JSP나 서블릿에서 자바 객체를 클라이언트 요청 또는 세션 같은 범위에 저장할 때, 이를 바인딩한다고 한다</p><p><br/></p><p><strong>request에 바인딩한 모습</strong></p><pre><code>request.setAttribute("name", "홍길동");</code></pre><p>=홍길동이라는 속성값을 가진 name 객체(속성)을 request 범위에 저장</p><p><br/></p><p><strong>session에 바인딩한 모습</strong></p><pre><code>session.setAttribute("address", "서울시 성동구");</code></pre><p><br/></p><p><strong>application에 바인딩한 모습</strong></p><pre><code>application.setAttribute("email", "ezen@ezen.com");</code></pre><p><br/></p><p>***</p><p><br/></p><p><strong>주의해야할 점</strong></p><p>각 범위(Scope)에 따라 우선순위가 달라진다</p><p><br/></p><p>범위는</p><p>page &lt; request &lt; session &lt; application</p><p>이지만 <mark>우선순위</mark>는 좁은 것이 먼저 우선되므로</p><p><mark>1순위 page, 2순위 request, 3순위 session, 4순위가 application</mark>이다</p><p><br/></p><p>사진 속 address 속성은 session 범위에 하나, </p><p>request 범위 2개에 모두 각기 다른 속성값으로 총 세번 부여되었다</p><p><br/></p><p>이때, 아래 표현식과도 같이 작성하게 되면 범위가 지정되어 있으므로 session에 주어진 address값 "서울시 성동구"가 출력되고,</p><pre><code>&lt;%=session.getAttribute("address") %&gt;</code></pre><p><br/></p><p>아래 표현언어에 다음과 같이 작성되었을 경우에는 우선순위에 따라 session이 밀리고, 남은 request 둘 중 Top-down 형식에 의해 가장 마지막으로 쓰인 request에 부여된 address값 "제주도 제주시"가 출력된다</p><pre><code>${address }</code></pre><p><br/></p><p>***</p><p><br/></p><p>일반적으로 request 객체에 데이터를 바인딩 할때는 주로 <mark>setAttribute() 메서드를 사용</mark>하거나, JSP와 서블릿에서 request 객체에 데이터를 저장하거나 넘기기도 한다</p><p><br/></p><p>그러나 request 객체의 파라미터 자체가 클라이언트가 보내는 데이터를 의미하기에 거기에 수정하거나 추가하는 setParameter() 메서드는 사용할 수 없다</p><p><br/></p><p>대신 읽기 용으로 request.getParameter()로만 접근이 가능하다</p><p><br/></p><p>서버 측에서 파라미터 값 수정하거나 추가하는 기능은 제공하지 않음!!!</p>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/00072e9326111c2c80d872691b092bb8/______2024_09_24_153129.png" />
         <pubDate>2024-09-24 06:47:19 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3135023701</guid>
      </item>
      <item>
         <title>JSTL 태그(JSP Standard Tag Library)</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3136766706</link>
         <description><![CDATA[<blockquote><p><strong>JSTL 태그란?</strong></p></blockquote><p>JSP(Java Server Page)에서 자주 사용하는 기능들을 태그 형식으로 제공하는 라이브러리</p><p><br/></p><p>JSP 2.0 규약부터 추가되어 톰캣에서는 기본적으로 제공하지 않음</p><p>=&gt; 따라서, lib에 JSTL jar파일을 다운로드하여 사용해야 함</p><p><br/></p><ol><li><p><strong>Core태그(c 태그)</strong></p><p>: 조건문, 반복문, URL 조작 등 기본적 기능 제공</p><ul><li><p><strong>&lt;c:if&gt;</strong> : 조건문 작성시 사용</p></li><li><p><strong>&lt;c:forEach&gt;</strong> : 리스트나 배열같은 데이터 반복 처리시 사용</p></li><li><p><strong>&lt;c:set&gt;</strong> : 변수 설정시 사용</p></li><li><p><strong>&lt;c:choose&gt;</strong> : 여러 조건문 사용 가능</p></li><li><p><strong>&lt;c:param&gt;</strong> : &lt;import&gt;&lt;redirect&gt;&lt;url&gt;의 서브태그로, 매개변수 전송을 처리</p><p><strong>요청 파라미터 추가 하는 방식 2가지</strong></p><ol><li><p>URL에 직접 입력</p></li><li><p>&lt;c:param&gt;을 이용해서 입력</p></li></ol></li><li><p><strong>&lt;c:import&gt;</strong> : 말그대로 페이지 통째로 import하는 기능 액션태그의 include와 유사하며 include가 JSP 파일과 HTML에 파일의 내용을 포함할때 사용되지만 c:import는 JSP, HTML, 외부리소스까지 포함할 수 있는 조금 더 유연하다는 특징이 있다</p></li><li><p><strong>&lt;c:redirect&gt;</strong> : 쿼리 스트링 형태로 다른 페이지로 전송시킴</p></li><li><p><strong>&lt;c:url&gt;</strong> : 경로를 지정할 수 있지만 이동은 안됨. 따로 출력해서 이동시켜야 함</p></li><li><p><strong>&lt;c:out&gt; </strong>: JSP 페이지에서 변수를 출력할 때 사용, ${}와 비슷한 역할을 하며, HTML/XML 특수 문자가 포함된 데이터(&lt;h3&gt;&lt;/h3&gt;같은 태그 등)를 안정하게 출력하기 위해 이스케이프 처리(escapeXml) 지원</p></li></ul></li><li><p><strong>Format태그(fmt 태그)</strong></p><p>:</p><ul><li><p><strong>&lt;fmt:formatDate&gt;</strong> : 날짜를 지정할때 사용</p></li></ul></li></ol>]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/d47576250f3adc587f43b44db7ac8ef5/89abf8c2_e44a_45b5_bb22_76c9d3fbaca9_JSTL___.pdf" />
         <pubDate>2024-09-25 00:46:43 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3136766706</guid>
      </item>
      <item>
         <title>스코프 객체 &amp; 컨텍스트 객체</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3137216093</link>
         <description><![CDATA[<p><strong>JSP에 있는 4가지 스코프</strong></p><ul><li><p>Page Scope</p></li><li><p>Request Scope</p></li><li><p>Session Scope</p></li><li><p>Application Scope</p></li></ul><p><br/></p><p><strong>사용예시</strong></p><p>아래 코드처럼 표현언어 EL에 값을 출력할때 해당페이지의 변수 id를 출력하는 방법이다</p><p><br/></p><p>해당 코드에서는 scope의 기본 설정이 page이기에 pageScope를 생략하고 쓴 모습이다</p><pre><code>&lt;th&gt;${id }&lt;/th&gt;&lt;!-- ${pageScope.id} 앞에 스코프 영역 생략된거 --&gt;</code></pre><p><br/></p><p>조금 다르지만 자바에서 전역변수 선언하는 것과 비슷하다고도 볼 수 있다</p><p><br/></p><p><strong>컨텍스트(Context) 객체</strong></p><p>웹 애플리케이션에서 데이터를 관리하고, <mark>서로 다른 스코프에서 변수를 저장하거나 공유</mark>하는데 중요한 역할을 함</p><p>=스코프별 변수 저장 or 가져올 수 있음</p><p><br/></p><p>데이터의 유효범위(Scope)에 따라 다르게 설정하고, 각 스코프에서 변수를 관리할 수 있게 해줌</p><p><br/></p><ul><li><p>pageContext</p></li><li><p>requestContext</p></li><li><p>sessionContext</p></li><li><p>applicationContext</p><p><br/></p></li></ul><p><br/></p><p><strong>사용예시</strong></p><p><br/></p><p>예시)</p><pre><code>pageContext.setAttribute("data", data);</code></pre><p>pageScope에 data 객체 속성값을 가진 속성명 data 변수를 저장한 모습. 해당 data객체 속성값은 아래와 같이 데이터를 이어받았음</p><pre><code>ArrayList data = new ArrayList();
data.add("강백호");
data.add("채소연");
data.add("송태섭");</code></pre>]]></description>
         <enclosure url="" />
         <pubDate>2024-09-25 04:55:08 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3137216093</guid>
      </item>
      <item>
         <title>형변환</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3137571938</link>
         <description><![CDATA[]]></description>
         <enclosure url="" />
         <pubDate>2024-09-25 08:26:58 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3137571938</guid>
      </item>
      <item>
         <title>JSP에 자바스크립트 넣기</title>
         <author>a01049479039</author>
         <link>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3141925512</link>
         <description><![CDATA[]]></description>
         <enclosure url="https://padlet-uploads.storage.googleapis.com/104995356/c5f4e49aa6a7043e20ee9e87c2fe5be0/image.png" />
         <pubDate>2024-09-27 06:33:57 UTC</pubDate>
         <guid>https://padlet.com/a01049479039/khcj8nnoqsvmy5yu/wish/3141925512</guid>
      </item>
   </channel>
</rss>
