본문 바로가기

개발 회고

[솔데스크] 풀스택 과정 11주-5 총49회차 ‘회고’ | JSP(0216)

[서론]

○● 0216 새로웠던 것
1. JspQuest_19_to_33에서 jstl 쓰나봄. q27부터 실행하면 에러남-500번 에러(서버가 잘못됬을 때 나오는 에러라고 함)

jakarta.servlet파일이 충돌해서 에러가 나는 거였음

자카르타 파일 두개 삭제하고 4개의 설치파일이 있으면 원활히 실행됨

 

2. google.com 페이지에 get방식으로 사용자가 전달할 수 있는 값들

Google의 검색 페이지(www.google.com)의 경우, 대부분의 경우 GET 방식을 통해 쿼리 문자열을 사용하여 사용자가 전달할 수 있는 값들을 표시합니다. 주로 사용되는 매개변수는 다음과 같습니다

 

    1. safe: 이 매개변수는 검색 결과에서 안전한 콘텐츠만 보여줄지 여부를 나타냅니다. 'on' 또는 'off' 값을 가집니다.
    2. q: 이것은 검색어를 나타내는 매개변수입니다. 사용자가 입력한 검색어가 여기에 전달됩니다. 여기서 "query+terms"는 실제 검색어를 나타냅니다. 이 외에도 사용자 지정 매개변수 및 Google의 다양한 서비스에 따라 추가적인 매개변수들이 있을 수 있습니다. 
      이러한 매개변수들은 일반적으로 Google 검색 페이지의 URL에 추가됩니다. 예를 들어, 'q' 매개변수를 사용하여 검색어를 전달하는 경우, URL은 다음과 같이 보일 수 있습니다:
    3. https://www.google.com/search?q=query+terms
    4. hl: 이것은 언어 설정을 나타냅니다. 사용자가 원하는 언어를 지정할 수 있습니다.
    5. num: 검색 결과 페이지당 표시되는 항목의 수를 설정합니다.
    6. start: 검색 결과에서 시작할 항목의 인덱스를 설정합니다.
    7. gl: Google 검색 페이지에서 사용자가 GET 방식을 통해 전달할 수 있는 매개변수 중 하나입니다. 이 매개변수는 Google 검색 결과의 지역 설정을 나타냅니다. 사용자가 특정 국가 또는 지역에 대한 검색 결과를 얻기 위해 이 매개변수를 사용할 수 있습니다.

예를 들어, 사용자가 "gl=us"와 같은 매개변수를 URL에 추가하면 미국을 기준으로 한 검색 결과를 받을 수 있습니다.

 

3. 스프링 연동할 때 안되는 경우도 더러 있음. 

그럴때는 이클립스를 삭제했다가 다시 설치해보기

스프링 연동할 때는 new-> other project에서 spring legacy project 선택해서 생성하면 됨

 

[본론]
○● 0216 내용 정리
 
● JSP(서블릿)

 

○○○●●● JSTL

- JSTL 참고: [책:처음해보는 Servlet&JSP... ][p.486~525]중 간략 정리


--> JSTL은 Java Server Pages Standard Tag Library의 약자로JSP에서 사용하는 태그 라이브러리를 공통으로 사용하기 위해 정해진 표준이다.

--> JSTL에서 지원하는 taglib 지시자의 prefix와 url 속성값은 다음과 같다.

----> Core: <%@  taglib prefix="c" uri="http://java.sun.com/jsp/jtsl/core" %>

----> Formatting: <%@  taglib prefix="fmt" uri="http://java.sun.com/jsp/jtsl/fmt" %>

----> SQL: <%@  taglib prefix="sql" uri="http://java.sun.com/jsp/jtsl/sql" %>

----> XML:<%@  taglib prefix="x" uri="http://java.sun.com/jsp/jtsl/xml" %>
----> Functions:<%@  taglib prefix="fn" uri="http://java.sun.com/jsp/jtsl/functions" %>

--> <c:set>은 JSP 페이지에서 사용하는 변수를 설정하는 태그이다.

--> <c:out>은 현재 JSP 페이지에 데이터를 출력하기 위해 사용하는 태그이다.

--> <c:remove>은 <c:set>태그로 정의한 변수를 삭제하는 태그이다.

--> <c:catch>는 JSP 페이지내에서 발생한 오류를 처리하는 태그이다.

--> <c:remove>은 태그로 정의한 변수를 삭제하는 태그이다.

--> <c:if>는 if 문장을 처리하기 위한 태그이다.

--> <c:choose>는 여러 개의 조건식을 사용항 처리하과 할 때 사용하는 태그이다.

--> <c:forEach>는 지정된 횟수만큼 명령문을 반복 실행하는 태그이다.

--> <c:forTokens>는 문자열을 특정 문자로 분리한 후 분리된 개수만큼 반복 수행하는 태그이다.

--> <c:import>는 외부 페이지를 현재 페이지에 삽입하거나 변수에 저장하는 태그이다.

--> <c:url>은 URL 정보를 생성해주는 태그이다.

--> <c:redirect>는 현재 실행 중인 페이지에서 다른 페이지로 이동할 때 사용하는 태그이다.(sendredirect처럼 씀)

--> Properties파일은 name =value 형태로 구성된 텍스트 파일이다.

--> <fmt:setLocale>은 로케일(locale)을 지정하는 태그이다.

--> <fmt:setBundle>는 <fmt:bundle>는 프로퍼터 파일의 값에 접근할 때 사용하는 태그이다.

--> <fmt:message>는 프로퍼터 파일의 값에 접근할 때 사용하는 태그이다.

--> <fmt:requestEncoding>은 요청정보의 인코딩 타입을 지정하는 태그이다.

--> <fmt:formatNumber>는 숫자, 퍼센트, 현재 통화를 표시하기 위해 사용하는 태그이다.

--> <fmt:parseNumber>는 숫자를 파싱하거나 퍼센트 통화를 표시하기 위해 사용하는 태그이다.

--> <fmt:formatDate>는 날짜를  표시하는 다양한 형식을 정의하기 위해 사용하는 태그이다.

--> <fmt:parseDate>는 다양한 방법의 날짜를 표시하기 위해 사용하는 태그이다.

--> <fmt:timeZone>은 태그의 몸체에 있는 모든 태그의 타임존을 지정하는 태그이다.

--> <fmt:setTimeZone>은 각각의 개별 범위에 타임존을 지정하는 태그이다.

--> <sql:setDataSource>는 DataSource를 생성하는 태그이다.

--> <sql:query>는 select문을 수행하기 위해 사용하는 태그이다.

--> <sql:update>은 select문이 아닌 SQL문을 사용할 때 사용하는 태그이다.

--> <sql:transaction>는 트랜잭션 구현할 때 사용하는 태그이다.

--> <sql:param>은 SQL 질의문에 사용할 파라미터를 지정하는 태그이다.

--> <sql:dateParam>은 SQL 질의문에 사용할 날짜 파라미터를 지정하는 태그이다.

 


 

약어 Jsp Standard Tag Library 역사
장점 기존 Jsp 코드를 간결하게 작성하는데 도움을 줌.  참고. 단점
( 프로그래밍 로직을 태그 형태로 작성하는 형태로 바꿈으로써 퍼블리셔분들이 작업하기 쉽게 돕는 측면도 있음 )

 


설치 *주의* 톰캣 버전 별로 다른 파일을 받아서 적용해야함 ( 서로 다른 두 버전을 같이 둬도 인식 문제가 생기므로
적용 안되는 다른 버전은 지울 것. )
톰캣 9 버전 환경일 때는 아래 버전을 설치해야 함 기준일 2024.02.07
. 이동 아파치 재단 공홈
. 클릭 좌측메뉴 - Download - Taglibs https://tomcat.apache.org/download-taglibs.cgi
. 클릭 중앙화면 - Standard-1.2.5
-  하단 jar Files -  아래 각각 링크 클릭해서 다운받기
taglibs-standard-compat-1.2.5.jar
taglibs-standard-jstlel-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
taglibs-standard-impl-1.2.5.jar

위 4개 파일을 WEB-INF/lib/ 에 복붙하면 끝.

톰캣 10 버전 환경일 때는 아래 버전을 설치해야 함
>> 현재 버전 이슈 있어서 이 내용 참고해서 새 라이브러리를 다운 받아서 처리하기
체크: 현 자바11, 톰캣10.0.x 기준
스택오버플로어 글 >> 글 중간에 아래 파일 링크가 있음(누르면 바로 다운됨)
jakarta.servlet.jsp.jstl-api-2.0.0.jar 메이븐 사이트의 다운로드 링크 << 이거 1
jakarta.servlet.jsp.jstl-2.0.0.jar 메이븐 사이트의 다운로드 링크 << 이거 2 << 둘다 다운받고
>> 이 두파일 받아서  WEB-INF/lib/ 에 복붙하면 끝.

세팅 1. 압축풀고 PJ / src / main / webapp / WEB-INF / lib /  폴더 밑에 위 두 파일 복붙하면 됨.

jstl.jar standard.jar 두 파일을 챙겨서
2. 이클립스 PJ에서 WEB-INF/lib/ jstl.jar 여기로 복사 standard.jar 여기로 복사

>>> (설치~세팅을 spring 에서는 maven 방식으로 진행) 나 todo : 스프링에서도 버전 변경해야 할 듯

선언 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Test 1.jsp 파일 하나에
2.이거 선언하고 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.변수 하나 만들고 <% String str1 = "고양이"; %>
4. 코드 넣고 <c:out value="<%=str1 %>" default="야옹이" /><br>
5. 실행. 끝.

태그 5종 분류
1. Core 태그 이 선언을 해야 쓸 수 있음 >> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c: out > <%= .. %> 처럼 출력 ex.
<c: set > 4개 영역의 JSP 저장소에 변수를 선언하는 태그 ex. <c:set var="str3" value="개" scope="page" />
<c: remove > // 값 삭제 변수 제거하는 태그 ex.
조건문:
<c: if > if 문 ex. index.html jstl.jsp
* if - else , if - elseif 를 쓰려면 * https://ssamdu.tistory.com/14
if - else 는 아래껄로 써야함(불편)
<c: choose > switch 같은거 ex. index.html jstl.jsp
<c: when > 위 switch 에꺼에 서브로 쓰이는 거 case 처럼
<c: otherwise > 위 switch 에꺼에 서브로 쓰이는 거 default 처럼
반복문:
<c: forEach > foreach 문 ex. 단순 반복 코드만
.속성 ex. 향상된 for문 ( 배열 데이터 순회 ) 코드만
var 사용할 변수명
items Collection 객체(List, Map)
begin 반복 시작 index. 미정의 시 0 기본값.
end 반복 종료
step 건너뛸 index 수

중첩 for문은 ? ex.

<c: forTokens > 자바 StringTokenizer 같은거
<c: import > 지시자 include 같은거. 지시자의 import 같은게 아님.
<c: url > 지정한 url에 링크의 기능을 제공하는 태그 참고:
ex. <c:url var="myURL" value="/myPage.jsp">
<c:param name="param1" value="value1" />
<c:param name="param2" value="value2" />
</c:url>

<a href="${myURL}">Go to My Page</a>

🐈🐈 이렇게 써먹으면 좋음 🐈🐈
응용: 기존에 생성한 URL에 새로운 파라미터를 추가

ex. <c:url var="myURL" value="/myPage.jsp">
<c:param name="param1" value="value1" />
<c:param name="param2" value="value2" />
</c:url>

<!-- 새로운 파라미터를 추가 -->
<c:param name="newParam" value="newValue" />

<!-- 기존 URL에 새로운 파라미터를 추가한 결과 URL을 사용 -->
<a href="${myURL}&${newParam}">Go to My Page with New Param</a>


<c: param > import url 에 매개변수를 선언하는 태그

<c: redirect > 지정한 url로 웹페이지 전환하는 태그 🐈🐈 이렇게 써먹으면 좋음 🐈🐈
<c:redirect url="http://daum.net" />
주의: c: redirect 처럼 c: 다음에 공백 있으면 500에러 남
<c: catch > try catch 같이 예외처리를 위한 태그

2. Formatting 국제화 된 웹 사이트에 대한 날짜, 시간 및 숫자 텍스트를 포맷하고 표시하는데 사용되는 기능 제공
>> 날짜, 시간, 숫자, 텍스트 등 포맷 처리 도와주는거
이 선언을 해야 쓸 수 있음 >> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

p.553 표 태그 기능
<fmt: requestEncoding 요청된 문자 인코딩을 설정하는 태그
setLocale 사용하려는 로케일(지역, 국가) 및 언어를 설정하는 태그
formalNumber 숫자를 원하는 문자열 형식 변환 태그
parseNumber 문자열을 원하는 숫자 형식 변환 태그
formatDate 날짜 및 시간을 원하는 형식으로 출력하는 태그 현재 시간 표시하기: ex. 이 코드 작성 후 현재 시간: <fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss" />
책 오타>> formatDate > parseDate parseDate 문자열을 원하는 날짜 및 시간 형식으로 출력하는 태그
timeZone 원하는 시간대 설정 변수의 타임존 설정을 위한 태그 이건 태그를 열고 닫는 영역 안에서만 적용됨
setTimeZone 원하는 시간대 설정 변수의 타임존 설정을 위한 태그
bundle 태그 안에서 사용할 bundle 값을 지정
setBundle 사용할 bundle 값을 지정
message 지정된 bundle 값을 가져옴

3. SQL 디비와 상호 작용하는 태그 제공

4. XML XML 문서를 생성하고 조작하는 방법 제공

5. Functions 일반 문자열을 가공, 조작하기 위한 표준함수 제공
이 선언을 해야 쓸 수 있음 >> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
p.560 표 태그 기능
${fn: length (obj) obj가 문자열이면 길이를 리턴, List 나 Collection 이면 항목 수 리턴
substring (str, i, j) str 문자열의 i ~ j-1 까지 문자열 리턴
substring After (str1, st r2) str1 문자열에서 str2 문자열 이후의 문자열을 리턴
Before (str1, st r2) // 이전 //
toUpperCase (str) str 문자열을 대문자로 리턴
toLowerCase (str) // 소문자로 //
replace (str, src, dest) str 문자열에 있는 src 문자열을 dest 로 변경한 문자열 리턴
indexOf (str1, str2) str1 문자열에 str2 로 시작된 문자열을 리턴
startsWith (str1, str2) str1 문자열이 str2 로 시작되면 true 아니면 false 리턴
endsWith (str1, str2) // 끝나면 //
contains (str1, str2) str1 문자열에 str2 문자열이 포함되어 있으면 true 아니면 false
containsIgnoreCase (str1, str2) // 대소문자를 무시하고 비교함
trim (str) str1 문자열을 str2 문자열로 구분해서 배열로 리턴
join (arr, str2) arr 배열의 각 요소의 중간에 str2 문자열이 들어간 문자열을 리턴
escapeXml (str) XML 마크업으로서 해석 될 수 있는 문자를 이스케이프 리턴

ex. <body>
<%-- 문자열을 변수에 설정 --%>
<c:set var="myString" value="Hello, JSTL Functions" />

<%-- 문자열의 길이를 구하고 출력 --%>
문자열 길이: <c:out value="${fn:length(myString)}" />



- 주로 쓰는 조건 액션

(1) <c:if>
<c:if>는 if 문장을 처리하기 위한 태그입니다. 태그를 사용하는 방법은 다음과 같음
<c:if test="testCondition" var="varName" [scope="{page:request:session:application}"] />
--- test: 결과값이 true 또는 false가 되는 조건식을 지정합니다.
---var: test 속성의 결괏값을 저장하는 변수 이름을 지정합니다.
--- scope: var에 지정한 변수를 scope에 저장합니다.

(2) <c:choose>
<c:choose>는 여러 개의 조건식을 사용하여 처리하고자 할 때 사용하는 태그입니다. 하나의 <c:choose>에 여러 개의 조건들로 구성되어 있으며, 조건에 만족하는 문장 하나만 처리됩니다. 태그를 사용하는 방법은 다음과 같음
<c:choose>
몸체 내용 (<when>과 <otherwise>를 하위 태그로 구성)
</c:choose>

(3) <c:when>
<c:when>은 자바 문법에서 switch ~case 또는 if ~ else와 같은 기능을 하는 태그입니다.
태그를 사용하는 방법은 다음과 같습니다.
<c:when >
몸체 내용
</c: when >

(4) <c:otherwise>
<c:otherwise>는 자바 문법에서 default 또는 else와 같은 기능을 하는 태그입니다. 태그를 사용하는 방법은 다음과 같음
<c:otherwise>
몸체 내용
</c:otherwise>

JspQuest_19_to_33> src>main>webapp > jstl_q27.jsp

<%@ page import="java.util.*" %>
<%@ page import="java.util.*,java.sql.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% //String str1 = "고양이"; %>
<% String str1 = null; %>

<%
	if(str1!=null){
		out.println(str1);
	} else {
		out.println("야옹이");
	}
%>

<c:out value="<%=str1 %>" default="야옹이" /><br>
	
</body>
</html>

JspQuest_19_to_33> src>main>webapp > jstl_q28.jsp

<%@ page import="java.util.*" %>
<%@ page import="java.util.*,java.sql.*" %>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<% //String str1 = "고양이"; %>
<% String str1 = null; %>

<c:out value="<%=str1 %>" default="야옹이" /><br>


<c:set var="str3" value="개" scope="page" />
<c:out value="${str3}" /><br>
	
</body>
</html>

JspQuest_19_to_33> src>main>webapp > jstl_q29.jsp

<%@ page import="java.util.*" %>
<%@ page import="java.util.*,java.sql.*" %>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<% //String str1 = "고양이"; %>
<% String str1 = null; %>

<c:out value="<%=str1 %>" default="야옹이" /><br>


<c:set var="str3" value="개" scope="page" />
<c:out value="${str3}" /><br>

값 제거
<c:remove var="str3" /><br>
<c:out value="${str3}" /><br>
	
</body>
</html>

JspQuest_19_to_33> src>main>webapp > jstl_q30.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="jstl_q30.jsp" method="get">
	id<input name="id">
	색상:<select name="color">
		<option selected value="yellow">노랑</option>
		<option value="blue">파랑</option>
		<option value="orange">주황</option>
	</select>
	<input type="submit" value="jstl">
</form>
</body>
</html>

 

 

 

JspQuest_19_to_33> src>main>webapp > jstl_q30.jsp

<%@ page import="java.util.*" %>
<%@ page import="java.util.*,java.sql.*" %>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
	String id = request.getParameter("id");
	if(id!=null){
%>
<%=id %>

el:
${param.id}



<c:if test="${param.id != null}">
	id: <b>${param.id}</b>
</c:if>
<c:if test="${param.id == ''}">
	<b>손님</b>
</c:if>

<%
	}
// 	switch(x){
// 	case 1:
// 		String c = "노랑";
// 		break;
// 		default:
			
// 	}
%>

<c:choose>
	<c:when test="${param.color == 'yellow' }">
		<c:set var="c" value="노랑" />
	</c:when>
	<c:when test="${param.color == 'blue' }">
		<c:set var="c" value="파랑" />
	</c:when>
	<c:when test="${param.color == 'orange' }">
		<c:set var="c" value="주황" />
	</c:when>
	<c:otherwise>
		<c:set var="c" value="검정" />
	</c:otherwise>
</c:choose>
	
님이 좋아하는 색상은 ${c} 입니다.	
	
</body>
</html>

이 페이지에서 otherwise값을 선택할 수는 없어서 주소창에 컬러값을 지우면 검정이 보이긴 한다.


JspQuest_19_to_33> src>main>webapp > jstl_q31.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>




<%
// for(int i=0;i<3;i++){
	
// }
// for(String s:str1){
// 	sysout s....
// }

 	String str1[] = {"고양이","개","너굴맨"};

%>

<c:set var="arr" value="<%=str1 %>" />


<!-- 향상for문 식 반복 -->
<c:forEach var="i" items="${arr}" begin="0" end="1" step="1">
	${i}<br>
</c:forEach>
<hr>
<c:forEach var="i" items="${arr}">
	${i}<br>
</c:forEach>

<!-- 일반 반복 -->
<c:forEach var="x" begin="0" end="3">
	${x}<br>
</c:forEach>
	
</body>
</html>

JspQuest_19_to_33> src>main>webapp > jstl_q32.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<c:url var="url1" value="https://www.google.co.kr" >
<%-- 	<c:param name="q" value="고양이" /> --%>
	<c:param name="q" value="1234" />
	<c:param name="safe" value="off" />
</c:url>

<a href="${url1}"> 구글에서 고양이 검색 </a>

	
</body>
</html>

여기서 q는 쿼리 문자열(query string)의 매개변수 이름입니다. 일반적으로 웹 애플리케이션에서는 쿼리 문자열을 사용하여 HTTP 요청에 대한 추가 정보를 전달합니다

설정한 내용이 나온다!!

 


JspQuest_19_to_33> src>main>webapp > jstl_q33.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<c:redirect url="http://daum.net" />
	
</body>
</html>

 

 

[결론]
 
* JSP 기초 강의 수강

 

*작업파일


 0216
1) JSP 기초(서블릿)