JSTL, Maven변경

조성현·2023년 5월 9일
0

상태(값) 유지
값 보관 : HashMap

  • pageContext
  • request : model2
  • session : 로그인 검사, 장바구니(임시저장소), invalidate(세션파기)
    => cookie
  • application

setAttribute
getAttribute
removeAttribute

회원관리흐름(DFD - 기능)

로그인 전
		회원가입
        	아이디 중복검사
            회원가입 인증(sms, mail...)
	    로그인
        	자체 로그인
            	db에서 검사 후 로그인
                아이디/비밀번호 찾기
            소셜 로그인
            	구글/카카오...
로그인 후(session/cookie 정보조회)
		로그아웃
        회원정보
        	회원정보 수정
            비밀번호 변경
            	변경 주기 유도
        회원탈퇴
        
        관리자 기능(포트 변경)
        	특정 로그인 아이디/비밀번호

view page 변화
기본형태 : jsp + html
=> el + jstl + html

el(expression lang.)
expression -> <%= : out.println()
상태저장소 : pageContext / request / session
서버 상태 : param / header

jstl <- custom tag lib의 표준화

  1. 라이브러리
  2. taglib 디렉티브

JSTL의 여러가지 사용법

getter/setter를 이용하여 출력하기

BoardTO

package model1;

public class BoardTO {
	private String subject;
	private String writer;
	
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		System.out.println("setSubject() 호출");
		this.subject = subject;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		System.out.println("setWriter() 호출");
		this.writer = writer;
	}	
}

jstl

	<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="to" value="<%=new model1.BoardTO() %>" scope="page" />
<c:set target="${to }" property="subject" value="제목" />
<c:set target="${to }" property="writer" value="작성자" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

제목 : ${to.subject }<br>
작성자 : ${to.writer }<br>
</body>
</html>

if문

<%@ 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>

시작<br>
// false일 땐 출력하지 않는다.
<c:if test="false">
	무조건실행<br>
</c:if>

<c:set var="country" value="korea" scope="page" />
<c:if test="${country != null }">
	대한민국<br>
</c:if>

<c:if test="${country != null }">
	국가명 : <c:out value="${country }"/><br>
</c:if><br>

</body>
</html>

if else문

<%@ 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>

시작<br>

<c:set var="country" value="korea" scope="page" />
<!-- else if -->
<c:choose>
	<c:when test="${country == 'korea' }">
		<c:out value="${country }"/>는 춥다<br>
	</c:when>
	<c:when test="${country == 'canada' }">
		<c:out value="${country }"/>는 더 춥다<br>
	</c:when>
	<c:otherwise>
		안춥다<br>
	</c:otherwise>
</c:choose><br>

</body>
</html>

예제

<%@ 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:set var="num" value="${95 }"/>
점수 <c:out value="${num }"/><c:if test="${num>60 }">
합격입니다
</c:if>

<br>
점수 <c:out value="${num }"/><c:choose>
	<c:when test="${num>=90 }">A학점입니다</c:when>
	<c:when test="${num>=80 }">B학점입니다</c:when>
	<c:when test="${num>=70 }">C학점입니다</c:when>
	<c:when test="${num>=60 }">D학점입니다</c:when>
	<c:otherwise>F학점입니다</c:otherwise>	
</c:choose>
</body>
</html>

반복문

<%@ 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>

시작<br>
<!-- 조건에 의한 반복 -->
<c:forEach var="i" begin="1" end="10" step="2">
	Hello JSTL : ${i }<br>
</c:forEach>
<hr>
<!-- 이중반복 -->
<c:forEach var="i" begin="1" end="3">
	<c:forEach var="j" begin="1" end="3">
	${i } : ${j }<br>
	</c:forEach>
</c:forEach><br>

</body>
</html>

구구단 출력

<%@ 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>

<table border="1" width="800">
<c:forEach var="i" begin="0" end="9">
	<tr>
	<c:forEach var="j" begin="0" end="9">
		<c:choose>
			<c:when test="${i==0 && j==0 }">
				<td>&nbsp;</td>
			</c:when>
			<c:when test="${i==0 }">
				<td>X ${j }</td>
			</c:when>
			<c:when test="${j==0 }">x
				<td>${i }</td>
			</c:when>
			<c:otherwise>
				<td>${i } X ${j } = ${i*j }</td>
			</c:otherwise>
		</c:choose>
	</c:forEach>
	</tr>
</c:forEach>
</table>

</body>
</html>

배열

<%@ 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:set var="intArr" value="<%=new int[]{1, 2, 3, 4, 5} %>" />
<c:out value="${intArr[0] }"/><br>
<c:out value="${intArr[1] }"/><br>
<hr>
<c:forEach var="data" items="${intArr }" begin="2" end="4" varStatus="status">
	<!-- <c:out value="${data }"/>로 사용해도된다. -->
	${data } / ${status.index }<br>
</c:forEach>

<c:set var="strArr" value='<%=new String[]{"11", "22", "33", "44", "55"} %>' />
<c:forEach var="data" items="${strArr }">
	${data }<br>
</c:forEach>
<hr>

<c:set var="hm1" value="<%=new java.util.HashMap() %>" />
<c:set target="${hm1 }" property="name" value="가나다"/>
<c:set target="${hm1 }" property="today" value="<%=new java.util.Date() %>"/>
<c:forEach var="data" items="${hm1 }">
	${data.key } - ${data.value }<br>
</c:forEach>
</body>
</html>

token

<%@ 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:forTokens var="token" items="1,2,3,4,5" delims=",">
	${token}<br>
</c:forTokens>
<hr>
<c:forTokens var="token" items="김,나,박,이" delims=",">
	${token}<br>
</c:forTokens>
</body>
</html>

url 활용

검색결과창 보내기

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

<!--<c:redirect url="https://www.daum.net"/>-->
<c:redirect url="https://search.daum.net/search">
	<c:param name="w" value="tot"/>
	<c:param name="q" value="밥"/>
</c:redirect>

url 정보 가져오기

<%@ 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="./list.do"/>
${url1 }<br>
<hr>
<c:url var="url2" value="https://search.daum.net/search">
	<c:param name="w" value="tot"/>
	<c:param name="q" value="밥"/>
</c:url>
${url2 }<br>
<!-- url2의 주소로 이동함 -->
<%-- <c:redirect url="${url2 }"/> --%>

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

시작<br>
<c:import url="./jstl10.jsp"/><br>

url 구조 보기 편하게 변경

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

<%--<c:import var="htmlData" url="./jstl10.jsp" />--%>
<%--<c:import var="htmlData" url="https://m.daum.net" charEncoding="utf-8"/>--%>

<c:url var="url" value="http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchWeeklyBoxOfficeList.xml">
	<c:param name="key" value="f5eef3421c602c6cb7ea224104795888"/>
	<c:param name="targetDt" value="20230505"/>
</c:url>
<c:import var="htmlData" url="${url }" charEncoding="utf-8"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<textarea rows="50" cols="800">
	${htmlData }
</textarea>

</body>
</html>

DB와 연동

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

<s:setDataSource 
	var="ds"
	url="jdbc:mariadb://localhost:3306/sample"
	driver="org.mariadb.jdbc.Driver"
	user="root"
	password="123456"
	scope="page"/>
	
${ds }<br>
<%--<s:update var="result" dataSource="${ds }" sql="insert into dept2 values (10, '개발부', '서울')"/>--%>

<%--
<s:update var="result" dataSource="${ds }">
	insert into dept2 values (20, '개발부', '대전')
</s:update>
--%>

<%--
<s:update var="result" dataSource="${ds }">
	insert into dept2 values (?, ?, ?)
	<s:param value="30"/>
	<s:param value="생산부"/>
	<s:param value="경남"/>
</s:update>
--%>

<c:set var="deptno" value="40"/>
<c:set var="dname" value="홍보부"/>
<c:set var="loc" value="경기"/>
<s:update var="result" dataSource="${ds }">
	insert into dept2 values (?, ?, ?)
	<s:param value="${deptno }"/>
	<s:param value="${dname }"/>
	<s:param value="${loc }"/>
</s:update>

<!-- 생성,추가,삭제 해보기-->
<%--<s:update var="result" dataSource="${ds }" sql="create table dept3 as select * from dept where 1 != 1"/>--%>
<%--<s:update var="result" dataSource="${ds }" sql="insert into dept3 values (10, '개발부', '서울')"/>--%>
<%--<s:update var="result" dataSource="${ds }" sql="delete from dept3 where deptno = 10"/>--%>
<s:update var="result" dataSource="${ds }" sql="drop table dept3"/>
${result }<br>


-> DB를 통해 미리 생성해도된다.

DB내용 출력하기

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

<s:setDataSource 
	var="ds"
	url="jdbc:mariadb://localhost:3306/sample"
	driver="org.mariadb.jdbc.Driver"
	user="root"
	password="123456"
	scope="page"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:query var="rs" dataSource="${ds }">
	select deptno, dname, loc from dept2
</s:query>

<table width="600" border="1">
<tr>
	<c:forEach var="columnNames" items="${rs.columnNames }">
		<td>${columnNames }</td>
	</c:forEach>
</tr>
<!-- 방법1 -->
<c:forEach var="row" items="${rs.rows }">
<tr>
	<td>${row.deptno }</td>
	<td>${row.dname }</td>
	<td>${row.loc }</td>
</tr>
</c:forEach>
<!-- 방법2 -->
<c:forEach var="row" items="${rs.rows }">
<tr>
	<td>${row["deptno"] }</td>
	<td>${row["dname"] }</td>
	<td>${row["loc"] }</td>
</tr>
</c:forEach>
</table>
</body>
</html>

풀링

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="s" uri="http://java.sun.com/jsp/jstl/sql" %>
<!-- 풀링 -->
<!--
<s:setDataSource 
	var="ds"
	dataSource="jdbc/mariadb1"
	scope="page"/>
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 풀링 방식일 경우 -->
<s:query var="rs" dataSource="${ds }">
	select deptno, dname, loc from dept2
</s:query>
<!-- setDataSource를 지우고 쓸 경우 -->
<s:query var="rs" dataSource="jdbc/mariadb1">
	select deptno, dname, loc from dept2
</s:query>

<table width="600" border="1">
<tr>
	<c:forEach var="columnNames" items="${rs.columnNames }">
		<td>${columnNames }</td>
	</c:forEach>
</tr>
<c:forEach var="row" items="${rs.rows }">
<tr>
	<td>${row.deptno }</td>
	<td>${row.dname }</td>
	<td>${row.loc }</td>
</tr>
</c:forEach>

<c:forEach var="row" items="${rs.rows }">
<tr>
	<td>${row["deptno"] }</td>
	<td>${row["dname"] }</td>
	<td>${row["loc"] }</td>
</tr>
</c:forEach>

</table>

</body>
</html>

where절

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

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 
<s:query var="rs" dataSource="jdbc/mariadb1">
	select deptno, dname, loc from dept2 where deptno=?
	<s:param value="10"/>
</s:query>
-->
<s:query var="rs" dataSource="jdbc/mariadb1">
	select empno, ename, job, sal from emp where ename like?
	<s:param value="s%"/>
</s:query>

<table width="600" border="1">
<tr>
	<c:forEach var="columnNames" items="${rs.columnNames }">
		<td>${columnNames }</td>
	</c:forEach>
</tr>
<!-- 
<c:forEach var="row" items="${rs.rows }">
<tr>
	<td>${row.deptno }</td>
	<td>${row.dname }</td>
	<td>${row.loc }</td>
</tr>
</c:forEach>
-->
<c:forEach var="row" items="${rs.rows }">
<tr>
	<td>${row["empno"] }</td>
	<td>${row["ename"] }</td>
	<td>${row["job"] }</td>
	<td>${row["sal"] }</td>
</tr>
</c:forEach>
</table>

<body>
</html>

기타 문법

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="str1" value="     Hello JSTL, HI HI   "/>
문자열의 길이 : ${fn:length(str1) }<br>
문자열 추출 : ${fn:substring(str1, 3, 6) }<br>
여백 제거 : ${fn:length(fn:trim(str1)) }<br>
치환 : ${fn:replace(str1, " ", "-") }<br>
위치 검색 : ${fn:indexOf(str1, "JS") }<br>
검색 : ${fn:startsWith(str1, " ") }<br>
검색 : ${fn:startsWith(str1, "He") }<br>
대소문자 : ${fn:toUpperCase(str1) }<br>

</body>
</html>

el,jstl을 통해 우편번호 검색기

context.xml

<?xml version="1.0" encoding="utf-8" ?>
<Context>
	<Resource
		name="jdbc/mariadb2"
		auth="Container"
		type="javax.sql.DataSource"
		driverClassName="org.mariadb.jdbc.Driver"
		url="jdbc:mariadb://localhost:3306/project"
		username="project"
		password="1234" />
</Context>

zipcode.jsp

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

<%
	request.setCharacterEncoding( "utf-8" );
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="zipcode.jsp" method="post">
동 이름 : <input type="text" name="dong"/>
<input type="submit" value="검색"/>
</form>
<hr>
<c:if test="${!empty(param.dong) }">
<s:query var="rs" dataSource="jdbc/mariadb2">
	select zipcode, sido, gugun, dong, ri, bunji from zipcode where dong like?
	<s:param value="${param.dong }%"/>
</s:query>

<table width="600" border="1">
<tr>
	<c:forEach var="columnNames" items="${rs.columnNames }">
		<td>${columnNames }</td>
	</c:forEach>
</tr>

<c:forEach var="row" items="${rs.rows }">
<tr>
	<td>${row["zipcode"] }</td>
	<td>${row["sido"] }</td>
	<td>${row["gugun"] }</td>
	<td>${row["dong"] }</td>
	<td>${row["ri"] }</td>
	<td>${row["bunji"] }</td>
</tr>
</c:forEach>

</table>
</c:if>
</body>
</html>

Maven으로 변경해서 우편번호 출력

  1. Dynamic Web Project 생성
  2. 우클릭 -> Configure -> Convert to Maven Project 선택
  3. Group Id / Artifact Id 이름 설정(마음대로)
  4. pom.xml에 jar파일 추가
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.exam</groupId>
  <artifactId>webapp</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  // 추가 부분
  <dependencies>
	  <!-- https://mvnrepository.com/artifact/jstl/jstl -->
	<dependency>
    	<groupId>jstl</groupId>
   	 	<artifactId>jstl</artifactId>
   		 <version>1.2</version>
	</dependency>

	<!-- https://mvnrepository.com/artifact/taglibs/standard -->
	<dependency>
   		 <groupId>taglibs</groupId>
   		 <artifactId>standard</artifactId>
    	<version>1.1.2</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
	<dependency>
   	 	<groupId>org.mariadb.jdbc</groupId>
   		 <artifactId>mariadb-java-client</artifactId>
   		 <version>3.1.4</version>
	</dependency>
  </dependencies>
  //
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <release>17</release>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.3</version>
      </plugin>
    </plugins>
  </build>
</project>
  1. context.xml 추가
<?xml version="1.0" encoding="utf-8" ?>
<Context>
	<Resource
		name="jdbc/mariadb2"
		auth="Container"
		type="javax.sql.DataSource"
		driverClassName="org.mariadb.jdbc.Driver"
		url="jdbc:mariadb://localhost:3306/project"
		username="project"
		password="1234" />
</Context>
  1. 기존에 만든 파일 가져오거나 새로 만들기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="s" uri="http://java.sun.com/jsp/jstl/sql" %>

<%
	request.setCharacterEncoding( "utf-8" );
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="zipcode.jsp" method="post">
동 이름 : <input type="text" name="dong"/>
<input type="submit" value="검색"/>
</form>
<hr>
<c:if test="${!empty(param.dong) }">
<s:query var="rs" dataSource="jdbc/mariadb2">
	select zipcode, sido, gugun, dong, ri, bunji from zipcode where dong like?
	<s:param value="${param.dong }%"/>
</s:query>

<table width="600" border="1">
<tr>
	<c:forEach var="columnNames" items="${rs.columnNames }">
		<td>${columnNames }</td>
	</c:forEach>
</tr>

<c:forEach var="row" items="${rs.rows }">
<tr>
	<td>${row["zipcode"] }</td>
	<td>${row["sido"] }</td>
	<td>${row["gugun"] }</td>
	<td>${row["dong"] }</td>
	<td>${row["ri"] }</td>
	<td>${row["bunji"] }</td>
</tr>
</c:forEach>

</table>
</c:if>
</body>
</html>

0개의 댓글