MVC2방식으로 게시판 구성하기에 앞서

 

MVC란?

MVC는 Model-View-Controller의 약자로, 소프트웨어 설계 패턴 중 하나입니다. 이 패턴은 애플리케이션을 세 가지 역할로 분리하여 개발과 유지 보수를 효율적으로 수행할 수 있도록 돕습니다. Model은 데이터와 비즈니스 로직을 처리하며, View는 사용자 인터페이스를 담당하고, Controller는 Model과 View 사이의 상호작용을 관리합니다.

EL → jsp에서 기존 표현식을 대체, 자체적으로 출력기능이 있다.

(자바 서블릿에서는 사용X)

${표현식(변수, 수식, 메소드)}

 

 

 

영역객체에서 데이터(속성) 읽어오기

 

ImplicitObjMain.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    pageContext.setAttribute("scopeValue", "페이지 영역");
    request.setAttribute("scopeValue", "레퀘스트 영역");
    session.setAttribute("scopevalue", "세션 영역");
    application.setAttribute("scopevalu", "어플리케이션 영역");
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>각 영역에 지정된 속성 읽기</h3>
페이지 영역 : <%= pageContext.getAttribute("scopeValue") %>
<p>페이지 영역 : ${pageScope.scopeValue }</p>
<p>리퀘스트 영역 : ${requestScope.scopeValue }</p>
<p>세션 영역 : ${sessionScope.scopeValue }</p>
<p>어플리케이션 영역 : ${applicatioScope.scopeValue }</p>

<h3>영역 지정 없이 속성 읽기</h3>
<p>${scopeValue }</p> <!-- 최초로 발견된 영역에서 읽어온다, 작은 범위에서 큰 범위로 값을 조회 -->
</body>
</html>

 

 

 

파라메터 받기

 

FormSubmit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>폼값 전송하기</h2>
    <form name="frm" method="post" action="FormResult.jsp">
        이름 : <input type="text" name="name" /><br />
        성별 : <input type="radio" name="gender" value="Man" />남자
               <input type="radio" name="gender" value="Woman" />여자<br />
        학력 :
            <select name="grade">
                <option value="ele">초딩</option>
                <option value="mid">중딩</option>
                <option value="high">고딩</option>
                <option value="uni">대딩</option>
            </select><br />
        관심 사항 : 
            <input type="checkbox" name="inter" value="pol" />정치
            <input type="checkbox" name="inter" value="eco" />경제
            <input type="checkbox" name="inter" value="ent" />연예
            <input type="checkbox" name="inter" value="spo" />운동<br />
        <input type="submit" value="전송하기" />
    </form>
</body>
</html>

 

FormResult.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>EL로 폼값 받기</h3>
	<ul>
		<li>이름 : ${param.name }</li>
		<li>성별 : ${param.gender }</li>
		<li>학력 : ${param.grade }</li>
		<li>관심사항 : 
		${paramValues.inter[0] } 
		${paramValues.inter[1] }
		${paramValues.inter[2] } 
		${paramValues.inter[3] }
		</li>
	</ul>
</body>
</html>

 

 

EL에서 컬렉션 데이터 사용하기

 

CollectionUse.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@page import="java.util.*"%>
<%@page import="common.Person"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>List 컬렉션</h2>
	<%
	List<Object> aList = new ArrayList<>();
	aList.add("청해진");
	aList.add(new Person("장보고", 22));
	pageContext.setAttribute("Ocean", aList);
	
	// aList.get(0);
	%>
	
	<ul>
	<li>0번째 요소 : ${Ocean[0] }</li> <!-- aList.get(0); -->
	<li>1번째 요소 : ${Ocean[1].name }, ${Ocean[1].age }</li> <!-- el은 값을 영역객체에서 가지고 온다 -->
	<li>2번째 요소 : ${Ocean[2] }</li> <!-- 값이 없으면 무시한다 -->
	</ul>
	

	<h2>Map 컬렉션</h2>
	<%
	Map<String, String> map = new HashMap<String, String>();
	map.put("한글", "훈민정음");
	map.put("Eng", "English");
	pageContext.setAttribute("king", map);
	
	// map.get("한글");
	%>
	
	<ul>
	 <li>영문 key : ${king["Eng"]}, ${king['Eng']}, ${king.Eng}</li> <!-- map.get("한글"); -->
     <li>한글 key : ${king["한글"]}, ${king['한글']}</li>
	</ul>

</body>
</html>

 

 

EL 연산

 

Operator1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    int num1 = 3;
    pageContext.setAttribute("num2", 4);
    pageContext.setAttribute("num3", "5");
    pageContext.setAttribute("num4", "8");
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
변수 출력 : ${num1 } <br>
영역 변수 출력 : ${num2 } <br>
변수에 값 할당 : ${num1 = 7 } <br>

${num1 + num2}<br>
${num3 / num4}<br>
${num3 div num4}<br>

<%-- ${num2 + "이십"}<br> EL은 문자열 간 '+'연산자로 결합이 되지 않는다. 오류남! --%>

num4 > num3 : ${num4 > num3}<br>
num4 > num3 : ${num4 gt num3}<br>
num4 < num3 : ${num4 lt num3}<br>
num4 == num3 : ${num4 eq num3}<br>

</body>
</html>

 

❗️ 자바 문법에서 선언한 변수를 그대로 사용할 수 없다.

 

 

 

🍀 JSTL

 

자바라이브러리 파일 받는 곳 : https://mvnrepository.com/

HTML코드와 잘 어울리게 코딩을 하기 위해 JSTL의 EL사용

태그 라이브러리 : Core 주로 사용, l18N 가끔 사용

 

 

Core (기본)

변수 : remove, set

흐름제어 : choose(when, otherwise), forEach, forTokens, if

 

if, choose 태그

 

if.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:set var="number" value="77" />
	<c:set var="String" value="JSP" />

	<c:if test="${number mod 2 eq 0}" var="result">
		<!-- 조건의 결과를 변수로 받는다 -->
${number}는 짝수입니다. <br>
	</c:if>

	result : ${result }
	<br>

	<h4>choose 태그로 홀짝 판단하기</h4>

	<c:choose>
		<c:when test="${number mod 2 eq 0}">
${number}는 짝수입니다.
</c:when>

		<c:otherwise>
${number}는 홀수입니다.
</c:otherwise>

	</c:choose>

	<c:choose>
		<c:when test="${number >= 90 }">
A학점
</c:when>
		<c:when test="${number ge 80 }">
B학점
</c:when>
		<c:when test="${number >= 70 }">
C학점
</c:when>
		<c:otherwise>
F학점
</c:otherwise>
	</c:choose>
</body>
</html>

 

 

반복문

 

ForEachNomal.jsp

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

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:forEach begin="1" end="3" step="1" var="i">
		<!-- i가 1에서 시작, 3까지 돌고 1씩 증가 -->

		<p>반복 ${i}입니다.</p>
	</c:forEach>

	<table border="1">
	
	<c:forEach begin="3" end="5" var="i" varStatus="loop">
		<tr>
		<!-- loop는 변수명, 정해진 이름이 아니다 -->
			<td>count : ${loop.count }</td>
			<td>index : ${loop.index }</td>
			<td>current : ${loop.current }</td>
			<td>first : ${loop.first }</td>
			<td>last : ${loop.last }</td>
		</tr>
		</c:forEach>
		
	</table>
	
	<%
	String[] rgba= {"Red", "Green", "Blue", "Black"};
	%>
	
	<c:forEach items="<%=rgba %>" var="c">
	<span style="color:${c}">${c}</span>
	</c:forEach>
	
	<h4>List 컬렉션 사용하기</h4>
	<%
	LinkedList<Person> lists = new LinkedList<Person>();
	lists.add(new Person("맹사성", 34));
	lists.add(new Person("장영실", 99));
	lists.add(new Person("신숙수", 30));
	%>
	
	<c:set var="list" value="<%=lists%>"/>
	<c:forEach item="${lists }" var="list">
	이름 : ${list.name}, 나이: ${list.age }
	</c:forEach>
	
	<h4>Map 컬렉션 사용하기</h4>
	
	<%
	Map<String,Person> maps = new HashMap<String, Person>();
	maps.put("1st", new Person("멩사성", 34));
	maps.put("2st", new Person("장영실", 44));
	maps.put("3st", new Person("신숙주", 54));
	%>
	
	<c:set var="maps" value="<%=maps%>"/>
	<c:forEach items="${maps}" var="map">
	key => %{map.key}<br>
	Value => 이름: ${map.value.name}, 나이: ${map.value.age}
	</c:forEach>
	
</body>
</html>

 

 

내일은,,

파일 업로드기능과 다운로드 기능 구현

+ Recent posts