본문 바로가기
Full-Stack/JSP

JSP(2)

by IT것저것 2024. 5. 5.

컨텍스트 패스명(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이 바뀐다 이것이 상대경로

 

GET 방식
POST 방식

 

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