상태(값) 유지
값 보관 : HashMap
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의 표준화
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>
<%@ 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>
<%@ 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> </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>
<%@ 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>
검색결과창 보내기
<%@ 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>
<%@ 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를 통해 미리 생성해도된다.
<%@ 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>
<?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>
<%@ 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>
<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>
<?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>
<%@ 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>