컨텍스트 패스명(Context Path Name)
- 웹 애플리케이션의 루트경로를 나타낸다
즉, 웹 애플리케이션이 서버에서 실행될 때 해당 애플리케이션의 루트 경로가 되는 것이다
예를 들어 /myapp과 같이 설정된 경우, 모든 요청은 해당 경로 아래에서 처리된다
✅ 컨텍스트 패스를 알아야 하는 이유
=> 웹 애플리케이션을 개발하고 배포할 때 애플리케이션의 경로를 알아야 다른 리소스에 대한 경로를 올바르게 설정할 수 있기 때문이다
특히 JSP에서 다른 JSP 파일을 포함할 때나 서블릿을 호출할 때, 컨텍스트 패스를 이용하여 올바른 경로를 설정해야 한다
이렇게 함으로써 애플리케이션이 올바르게 동작하고 다른 리소스에 접근할 수 있다
request.getContextPath();
➡️이 자체가 context path name을 알아오는 것이다
<%
String ctxPath = request.getContextPath();
%>
➡️이 것이 return type: string으로 나온다
// System.out.println("ctxPath => " + ctxPath);
// ctxPath => /JSPservletBegin 콘솔에 이렇게 값이 떠오른다
//ctxPath => /JSPservletBegin <= WAS(톰캣서버) path 설정의 기본값임
// JSPservletBegin/01_getMethod.do? url에 이렇게 나온다
//ctxPath => /gclass --> 경로를 바꾸면 이렇게 나옴
//ctxPath => /gclass <= WAS(톰캣서버) path 설정을 /gclass로 변경한 경우임
// context name을 공백을 하면 http://localhost:9090/chap02/01_getMethod.jsp 이렇게 나옴
// ctxPath => <= WAS(톰캣서버) path 설정을 / 또는 아무것도 없는 것으로 변경한 경우임
<form action="<%= ctxPath %>/ .do" method="get">
==>
현재 <%= ctxPath%> 이 /JSPServletBegin 이므로 <%= ctxPath%>/" ".do 의 뜻은
http://localhost:주소 /JSPServletBegin/" ".do 이라는 말이다.
http://localhost:9090 ==> 생략 되었음
데이터방식은 method = get 방식, method = post 방식
GET, POST
➡️ HTTP 프로토콜을 사용하여 웹 서버에 데이터를 전송하는 방식이다
GET 방식: 데이터를 URL의 일부로 전송한다. 데이터는 URL에 쿼리 문자열(QUERY string)형태로 포함되어 전송된다
사용자가 웹페이지를 요청할 때 url 뒤에 ?를 붙이고 그 뒤에 데이터를 붙여서 전송
get 방식은 주로 데이터를 전송하는데 사용함
URL에 데이터가 노출되기 때문에 보안에 취약하다
POST 방식: 데이터를 HTTP 요청 메시지의 본문(body)에 담아서 전송한다
사용자가 웹 페이지를 요청할 때 데이터가 URL에 노출되지 않고 안전하게 전송된다
POST 방식은 데이터를 서버에 제출하는데 사용되며, 데이터의 길이나 형태에 제한이 없다
⭐⭐⭐
확장자가 .jsp 또는 .html인 파일에서 URL 경로를 나타낼 때 맨 앞에 / 가 오면 그 앞에는 http://ip주소 : 포트번호가 자동으로 붙게 된다
<%-- form 태그에서 submit(전송)을 하면
http://localhost: /JSPServletBegin/" ".do 으로 데이터를 전송시킨다.
만약에 ⭐ method 를 생략하면 method="get"⭐ 으로 되어진다.
GET방식은 웹브라우저 주소창에 http://URL주소?전송되어질데이터 와 같이 나타내주는 것이며 ,
? 를 중심으로 왼쪽은 사이트 URL 주소이며, 오른쪽은 전송되어질데이터를 나타낸다.
전송되어질 데이터는 예를 들어 name=이순신&school=대졸 와 같이 나오는데 & 는 데이터구분자 역할을 해준다.
GET방식은 웹브라우저 주소창에 데이터를 공개하므로 보안성이 떨어지지만 속도는 POST 방식보다 빠르다.
그래서 일반적으로 보안과 관계없는 데이터조회(예: 물품정보 조회)와 같은 select 절에서 주로 사용된다.
submit 을 하면 <%= ctxPath%>/" ".do 로 보내어서 처리를 요청한다.
/JSPServletBegin/" ".do 은 누가 처리를 해주는지는 배치서술자인 web.xml 에 기술되어져 있어야 한다.
web.xml 에 가보면 <servlet-mapping>에 URL 패턴으로 /" ".do 가 기술되어져 있고,
이어서 실제로 처리를 해주는 <servlet-class>에 클래스명이 기술되어져 있다.
바로 이렇게 기술되어진 <servlet-class>클래스명이 action 일처리를 해주게 된다.
!!! 아주 중요한 것은 web.xml은 언제 읽어들이는냐? 하면
WAS가 구동(start)되어질때 web.xml 파일에 기술된 내용을 딱 1번만 읽어들여서 web.xml 파일에 기술된 내용대로 WAS가 작동하도록 되어진다.
그러므로 web.xml 파일에 내용을 추가하거나 삭제하는 등 변경되어지면 변경된 내용대로 작동하기 위해서는 반드시 WAS를 껐다가 켜야만 변경되어진 내용이 적용된다. !!!
현재 이 값이 ctxPath가 된다
chap 02가 나오고" ".do 여기로 보내는 것이다 브라우저에서 쓰고 그냥 전송은 맨 위에 url이 바뀐다 이것이 상대경로
JSP에서 사용하는 두가지 주요 기술
* 코드의 가독성과 유지보수를 위해 스크립틀릿의 사용을 최소화하고 표준 액션 또는 JSP 태그 라이브러리를 선호하는 추세다
1) JSP 표준 액션 방식
JSP 표준 액션은 '<jsp:action>' 형태의 태그를 사용하여 객체의 생성, 속성 설정, 메소드 호출 등을 수행한다
이 방식은 HTML 코드와 자바 코드를 분리하여 보다 선언적인 접근을 가능하게 한다
JSP 표준 액션에는 다음과 같은 것들이 있다
<jsp:useBean>: 객체를 찾거나 생성합니다.
<jsp:setProperty>: 객체의 프로퍼티를 설정합니다.
<jsp:getProperty>: 객체의 프로퍼티 값을 가져와 표시합니다.
<jsp:useBean id="user" class="com.example.User" />
<jsp:setProperty name="user" property="name" value="홍길동" />
<p>사용자 이름: <jsp:getProperty name="user" property="name" /></p>
➡️JSP 페이지에서 사용할 수 있는 태그 라이브러리를 이용하여 보다 선언적인 방식으로 코드를 작성한다
JSP 표준 액션을 사용하면 코드의 가독성과 유지보수성이 향상 되며 모델(Model)과 뷰(View)를 분리할 수 있어 MVC(Model-View-Controller) 패턴을 적용하기 용이하다
Include
include directive(지시어)인 <%@ include %> 사용한 것은 ➡️ 소스파일을 끼워넣어주는 것이다
==> '정적포함'을 수행한다 --> 포함되는 JSP 파일('01_include.jsp')의 전체 내용이 컴파일 시 현재 JSP 파일에 직접 삽입된다는 의
<%
int price = 500;
%>
<div>
<%@ include file="01_include.jsp" %>
<!--오류가 발생함 지역변수 price가 중복되었으므로
Duplicate local variable price
price 변수가 중복되었다 2개중 한개가 바뀌어야 함 -->
</div>
만약 포함되는 파일(01_include.jsp) 내부에 int price = 100;과 같은 코드가 있다면, 이 변수 선언은 현재 파일의 코드와 직접 합쳐집니다.
현재 파일에 이미 int price = 500; 이라는 지역 변수 선언이 있으므로, 01_include.jsp에서 또 다시 price 변수를 선언하게 되면 같은 범위 내에서 동일한 이름의 지역 변수가 중복으로 선언되는 것이 됩니다. 이것이 로 "Duplicate local variable price" 오류의 원인입니다.
<%-- JSP 표준액션(standard action)중 include 액션을 사용한것은 실행결과물을 끼워넣어주는 것이다. --%>
<div>
<jsp:include page="01_include.jsp" />
<%-- 오류가 발생하지 않는다. 실행결과물만 끼워 넣어주므로 --%>
</div>
useBean
<jsp:useBean id=" " class=" . DTO"/>
➡️ ----.---DTO -- = new --.--DTO(); => 기본 생성자
.DTO클래스의 기본생성자로 새로 객체(ID에 적음)를 생성하는 것이다
▪️ JSP 표준 액션 중 useBean을 사용하려면 반드시 기본생성자가 존재해야한다
<jsp:setProperty property="name" name="fd" value="김자바"/>
<%--
fd.setName("김자바"); 와 같은 뜻이다.
--%>
<jsp:setProperty property="jubun" name="fd" value="8909102345678"/>
<%--
fd.setJubun("8909102234567"); 와 같은 뜻이다.
--%>
<!-- values가 13글자를 넘으면 null이 되니 주의 -->
* useBean의 Bean은 객체다
* 이 첫글자는 memberDTO에 나온 get 다음 ~~ 인데 여기서 property = 'name'은 꼭 소문자로 해야 한다
<li> 성명 : <jsp:getProperty property="name" name="mbr3"/></li>
<%--
mbr3.getName(); 와 같은 뜻이다.
--%>
2) JSP 표준 액션 방식
스크립틀릿은 JSP 페이지 내에서 직접 JAVA 코드를 작성할 수 있게 해주는 방식이다. 이 코드는 '<% %>' 태그 안에 작성되며 JSP 페이지가 서블릿으로 변환될 때 실행된다
스크립틀릿을 사용하는 예시
<%
// Java 코드를 사용하여 데이터 생성
String username = "홍길동";
int age = 30;
%>
<p>사용자 이름: <%= username %></p>
<p>나이: <%= age %></p>
* 스크립틀릿의주요 단점은 코드와 HTML이 섞이게 되어 유지보수가 어려워지며, 코드의 재사용성이 낮다
'Full-Stack > JSP' 카테고리의 다른 글
JSP(3) (0) | 2024.05.06 |
---|---|
WAS (0) | 2024.05.06 |
JSP(1) (0) | 2024.05.05 |