250x250
Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

개린이 개발노트

국비지원 JAVA(자바) 프로그래밍 (JSP,표현식,MVC,MVC패턴,오브젝트비교) 본문

국비지원(국비교육) 웹 개발자 과정

국비지원 JAVA(자바) 프로그래밍 (JSP,표현식,MVC,MVC패턴,오브젝트비교)

개린이9999 2023. 1. 19. 09:18
728x90

스크립트릿 - <%  %> - 자바코드 작성하는 곳 - 작성한 위치에서 만들어짐

선언문 - <%! %> 자바코드를 작성하지만 일반적으로 변수,메서드선언할 때 - 서블릿 클래스 바로 아래 생성이 됨

 

표현식  <%= %> 

변수 출력 (out.print(num))   표현식을(양쪽이 같음) 이용하면   <% num %>  

계산식 출력-> out.print(num1+num2)      표현식을(양쪽이 같음) 이용하면     <%= num1+num2%> 

메서드 호출 - out.print( sum (a,b) )  표현식을(양쪽이 같음) 이용하면<%= sum(a,b) %>

 

스크립트릿 주석처리 방법

<% -- 

%>

스크립트릿 안에있는 코드(자바코드) 주석처리 방법 // 이용 -> 자바코드니까 자바코드처럼

 

주석->컨트롤 + 쉬프트+ c 

특정범위 주석-> 컨트롤+쉬프트+c


JSP 예제 

2개의 input에 숫자를 입력하고 전송버튼을 누르면  두수의 합을 출력해주는 jsp를 만들기

 

입력.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>

	<form method="get" action="출력.jsp">
		<input type="text" name="num1"> <br>
		<input type="text" name="num2"> <br>
 		<input type="submit" value="전송"> <br>
	</form>

</body>
</html>

출력.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>

<%
	int num1= Integer.parseInt(request.getParameter("num1"));	
	int num2= Integer.parseInt(request.getParameter("num2"));	
%>
 	<h1>두수의 합: <%=num1+num2%></h1>

</body>
</html>


JSP->서블릿-> 컴파일-> CLASS파일 만들어지고-> 로드 -> 응답

 

input에 숫자하나를 입력하고 누적버튼을 누르면 

 

계속 누적버튼을 누를때마다 입력한 숫자가 누적돼서 나타나게 됨

 

처음 5 입력 누적버튼 -> 누적된 숫자:5

두번째 10입력 누적버튼-> 누적된 숫자: 15

세번째 20입력 누적 버튼-> 누적된 숫자 35

 

숫자입력.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>
	<form method="get" action="누적된숫자출력.jsp">
		<input type="text" name="num"> <br>
 		<input type="submit" value="전송"> <br>
	</form>
</body>
</html>

누적된숫자출력.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%! int total=0; // 누적된 숫자를 저장하는 변수
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%
	int num= Integer.parseInt(request.getParameter("num"));
	
	total+=num; // total=total+num;
	%>
	
	<h1>누적된 숫자: <%= total %></h1>
	<a href="숫자입력.jsp">뒤로가기</a>
	
</body>
</html>

-> 전역변수 이용이 핵심!! 


숫자 두개 input에 입력받아서 전송버튼을 누르면

두 숫자 사이의 총 합을 출력

ex) 2와 10을 전송 -> 2부터 10까지 합계 출력 

 

숫자 두개 입력

<%@ 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>
	<form method="get" action="두숫자사이의총합출력.jsp">
		<input type="text" name="num1"> <br>
		<input type="text" name="num2"> <br>
 		<input type="submit" value="전송"> <br>
	</form>

</body>
</html>

주석 방법은 if문 이용해서 num1,num2를 가려냈고

밑에 방법은 max,min 메서드를 이용해서 num1,num2 가려냄  

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

	<%--
	int sum=0;
	int num1= Integer.parseInt(request.getParameter("num1"));
	int num2= Integer.parseInt(request.getParameter("num2"));
	
	if(num1 < num2) {
        for(int i = num1; i <= num2; i++) {
           sum += i;
        }
     
	} else if(num1 >= num2) {
        for(int i = num2; i <= num1; i++) {
           sum += i;
        }
     }
	--%>
	
	<%
      
      int num1 = Integer.parseInt(request.getParameter("num1"));
      int num2 = Integer.parseInt(request.getParameter("num2"));
      
      int sum = 0;
      int max = Math.max(num1, num2);
      int min = Math.min(num1, num2);
      for(int i = min; i <=max; i++) {
         sum += i;
      }
   
   %>
	
	<h1>두수의 합: <%=sum%></h1>
	<a href="숫자두개입력.jsp">뒤로가기</a>

</body>
</html>

여기서 업그레이드 

숫자 두개 input에 입력받아서 전송버튼을 누르면

두 숫자 사이의 총 합을 출력

ex) 2와 10을 전송 -> 2부터 10까지 합계 출력  하는데

ex)

5랑 10-> 5+6+7+8+9+10 = 값 나오게

 

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

	<%
		int sum = 0;
		int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));

		if (num1 < num2) {
			for (int i = num1; i <= num2; i++) {
				sum += i;
			}

		} else if (num1 >= num2) {
			for (int i = num2; i <= num1; i++) {
				sum += i;
			}
		}
	%>

	<h1>계산과정 출력</h1>
	<%
		int sum2 = 0;

		for (int i = num1; i < num2; i++) {
			sum2 += i;
	%>
	<b><%=i%> + </b>
	<%
		}
	%>
	<b><%=num2%> = <%=num2 + sum2%></b>
</body>
</html>

예제

-> 아래의 결과값 나오게끔

<%@ 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>
	<h1>상품 검색 페이지</h1>
	<form method="get" action="상품검색페이지결과값.jsp">
      	연령대: <input type="text" name="age"> <br>
      	카테고리 : <select name="category">
			<option value="상의">상의</option>
			<option value="하의">하의</option>
			<option value="악세서리">악세서리</option>
		</select> <br> 
		선호하는 색상: <input type="checkbox" name="color" value="빨강"> 빨강 
		<input type="checkbox" name="color" value="주황"> 주황
		<input type="checkbox" name="color" value="노랑"> 노랑
		<input type="checkbox" name="color" value="파랑"> 파랑 
		<input type="checkbox" name="color" value="검정"> 검정  
      	<input type="submit" value="검색">
   </form>


</body>
</html>
<%@page import="com.sun.corba.se.spi.orb.StringPair"%>
<%@ 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>

<%
	String age =request.getParameter("age");
	String category =request.getParameter("category");
	String[] colors =request.getParameterValues("color");
	
%>
	<h1><%=age %>
	세가 가장 많이 구매한<%=category %>들을 조회합니다.</h1>
	<h2>선호하는 색상
<%
	if(colors==null) {
		
%>
		이 없습니다.</h2>
<% 
	
	}else {
	for(String color : colors) {
%>	
		<%=color%>
<% 
		} 
%>	

	입니다.
<%
	}
%>
	</h2>

</body>

</html>


위의 스파게티 코드를 없애기 위해 -> MVC 모델/패턴1 ->2 

 

Model

View

Controller 

위의 스파게티 코드 mvc모델1로 표현해서 간단하게 만들기

<%@page import="com.sun.corba.se.spi.orb.StringPair"%>
<%@ 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>

<% // Controller
	String age =request.getParameter("age");
	String category =request.getParameter("category");
	String[] colors =request.getParameterValues("color");
	String str= ""; // 색상의 결과값을 저장하는 변수(model)
	
	if(colors==null) { 
		str="없음";
	} else {
		for(String color : colors) {
			str = str+color+" ";
		}
			str+= "입니다.";
	}
	
%>
	<!-- View -->
	<h1><%=age %>세가 가장 많이 구매한<%=category %>들을 조회합니다.</h1>
	<h2>선호하는 색상: <%=str %></h2>


</body>

</html>

 



지시자 <%@ >-> JSP 페이지 속성 지정할 때 사용

종류

-> page, include , taglib(JSTL에서 따로 더 공부할 예정)

page: JSP페이지에 대한 환결설정

 

import 속성 => 자바에서 import와 같은것

컨트롤+시프트+o 

 

session 속성 -> 기본값=true

<%@page session="true/false" %>

buffer 속성   -> 기본값= 8kb

<%@page buffer="none/8kb" %>

autoflush속성  -> 기본값=true

<%@page autoFlush="true/false" %> 

true: 버퍼가 차면 자동으로 비움(전송) 

false: 버퍼가 차면 에러 발생

 

isThreadSafe속성

<%@page isThreadSage="true/false" %> -> 기본값=true

스레드 설정할건 지 말건지

info 속성 

<%@page info ="jsp페이지 정보" %>

include

<%@include file="Header.jsp" %> 

 지시자 <%@ %> -> JSP 페이지 속성 지정

  • page : JSP 페이지 환경 설정
  • include
  • taglib -> JSTL

 

 page 지시자

 

import 속성 => 자바에서 import와 같은 것

컨트롤 + 시프트 + O

<%@page import="java.util.Calendar"%>

<body>

	<%
		Calendar data = Calendar.getInstance();
	%>
	
</body>

 

 


session 속성 - 기본값은 true

<%@page session="true/false"%>

 


buffer 속성 - 기본값은 8kb

<%@page buffer="none/8kb"%>

예시로 유튜브 영상에서 영상 로딩 바 흰색 부분

 


autoflush 속성

<%@page autoFlush="true/false"%>

true : 버퍼가 차면 자동으로 비움

false : 버퍼가 차면 에러 발생

 


isThreadSafe 속성

<%@page isThreadSafe="true/false"%>

스레드 설정

 


info 속성

<%@page info="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>
	
	<h1>에러가 발생하는 페이지</h1>
	<%=2/0%> <-- 실행안되는 코드 아무거나 삽입 후 테스트
	
</body>
</html>

아무런 설정도 안했을 때 기본적으로 보여주는 에러페이지


- errorPage

해당 패이지 에러 발생 시 -> 에러페이지로 넘어감

<%@ page errorPage="에러페이지" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page errorPage="errorPage.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<h1>에러가 발생하는 페이지</h1>
	<%=2/0%>
	
</body>
</html>

 

- isErrorPage (기본값은 false)

true : 해당 페이지가 에러 페이지가 됨 exception 객체를 사용할 수 있

<%@ page isErrorPage="true" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>여기는 에러 발생 시 실행되는 페이지</h1>
	<%=exception.getMessage() %>
	
</body>
</html>

 

실행시켰을 때 아래 처럼 설정한 에러페이지로 넘어간다.

IE -> errorPage가 512바이트 보다 작으면

         IE 자체 에러페이지를 표시

 

 


include 지시자

현재 페이지에 다른 페이지를 삽입할때 사용

 

<%@ include file="파일명"%>

<%@ 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>
	<%@include file="header.jsp" %>
	
	<h1>여기는 메인페이지</h1>
	
	<%@include file="footer.jsp" %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<h1>여기는 header 페이지</h1>
<hr>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<hr>
<h1>여기는 footer 페이지</h1>


내장객체 

request: 요청에 대한 것 저장

response: 응답에 대한 것 저장

out: 출력(스트림)

 

page, config,

session, application, pageContext,

exception

 

 

request: 요청에 관련된 내장객체

 

request.getParameter

값: <%=request.getParameter("abc") %>
이름:<%= request.getParameterNames() %>
컨텍스트 패스: <%= request.getContextPath() %>
요청방식: <%= request.getMethod() %>
요청URL: <%= request.getRequestURL() %>
요청URI: <%= request.getRequestURI() %>
서버이름: <%= request.getServerName() %>
프로토콜: <%= request.getProtocol() %>

 

<%@ 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>
	<form method="get" action="request.jsp">
		<input type="text" name="abc">
		<input type="text" name="bbb">
		<input type="text" name="ccc">
		<input type="submit" value="전송">
	</form>

</body>
</html>
<%@page import="java.util.Enumeration"%>
<%@ 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>
<%
	Enumeration<String> e = request.getParameterNames();

	while(e.hasMoreElements()) {
		out.print(e.nextElement()+ "<br>");
	}

%>

	값: <%=request.getParameter("abc") %><br>
	이름:<%= request.getParameterNames() %><br>
	컨텍스트 패스: <%= request.getContextPath() %><br>
	요청방식: <%= request.getMethod() %><br>
	요청URL: <%= request.getRequestURL() %><br>
	요청URI: <%= request.getRequestURI() %><br>
	서버이름: <%= request.getServerName() %><br>
	프로토콜: <%= request.getProtocol() %><br>


</body>
</html>


respone.sendRedirect("이동할 페이지");

 

간단한 로그인 페이지

로그인 창 -> 요청 -> 아이디와 비밀번호 체크

-> 아이디와 비밀번호가 일치하면 메인페이로 이동

-> 일치하지 않으면 다시 로그인 페이지로 이동

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 페이지</title>
</head>
<body>
	<form method="post" action="checkLogin.jsp">
		아이디 : <input type="text" name="id"> <br>
		비밀번호 : <input type="password" name="pw"> <br>
		<input type="submit" value="로그인"> 
	</form>
</body>
</html>
<%@ 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>
	<%
		String id = "teemo";
		String pw = "1234";
		
		String user_id = request.getParameter("id");
		String user_pw = request.getParameter("pw");
		
/* 		out.print(id.equals(user_id));
		out.print(user_pw == pw); */
		
 		if(id.equals(user_id) && pw.equals(user_pw)) {
			out.print("로그인성공");
		} else {
			response.sendRedirect("loginForm.jsp");
		} 
	%>
</body>
</html>

변수에 단순 문자열을 대입한것과 새로운 문자열을 변수에 선언을 하면서 서로 비교연산자로 == 물어볼 경우 false로 표시가 된다. 두 변수는 데이터 입력 값을 비교하는게 아닌 할당된 주소값을 비교하기 때문에 주소 값이 달라 같지않다고 표시된다.

 

그래서 주소값끼지 비교하기 위해서는 equals 메서드를 사용해 해결을 하면 된다.

 

String a = "aaa"

String b = "aaa"

String c = new String("aaa")

 

라고 했을 때 a == b로 하면 true가 나오지만 a == c 또는 b == c 라고 하면 false로 나온다.

 

변수를 대입하면 같은 주소값으로 설정되어 true가 나오지만 새로운 문자열을 선언한 경우 대입한 것과 다른 주소값이 설정 되다보니 위에서 언급한것  처럼 equals로 처리하면 해당 변수 안에 있는 데이터 값을 비교하게 해준다.

 

 

728x90