복습

JSP Model 2

- MVC 패턴으로 개발 

- Model 은 DB 처리를 한다, 인터페이스, 상속 등의 개념을 많이 사용 (Service 클래스+ DAO 클래스)

- Controller 클래스를 만들때 Java Servlet 로 만들어진다

- View 는 양식, 결과가 나타나는 페이지
+ Model 2 에서는 표현식 태그보다 표현 언어를 많이 사용

 

Model 2 배우기 전에 배울 것

- Java Servlet : Controller 클래스를 만드는데 사용

- EL (표현 언어) : View 에서 결과를 출력할때 사용

- JSTL

 

Spring

- Model 2 기반으로 개발을 빠르게 하기 위한 자바 프레임워크

+ 프레임워크는 일반적으로 라이브러리 제공

 

Model 1 에서도 자바를 사용

- DTO 클래스

- DAO 클래스 : DB 연동 처리하는 클래스

 

WAS (Web Application Server)

- 웹 프로그램 마다 사용하는 WAS 들이 정해져있다

- JSP : 주로 Apache Tomcat, Jeus, WebLogic, JBoss 등 사용

- ASP (Active Server Page) : IIS 라는 웹 서버가 있어야 ASP 코드 처리 가능

- PHP : 아파치 서버로 PHP 코드 해석하고 서비스


JSP 5대 태그

1. 스크립틀릿 태그 (Scriptlet tag) <%     %>
2. 선언 태그 (Declaration tag) <%!     %>
3. 표현식 태그 (Expression tag) <%=     %>
4. 지시어 태그 (Directive tag)
     1) 페이지 태그 (page tag)
     2) 포함 태그 (include tag)
     3) 사용자 정의 태그 (tag library tag)

<%@ page     %>
<%@ include     %>
<%@ taglib     %>
5. 액션 태그 (action tag) <jsp:usebean   >,   <jsp:setProperty   >
<jsp:getProperty   >,   <jsp: include   >  
<jsp:forward    >,   <jsp:plugin    >

1. 스크립틀릿 태그

- <% %>

-  Java 코드나 JSP 코드가 들어감

- 거의 대부분의 코드가 들어감

 

2. 선언 태그

- <%! %>

- 매서드를 정의할 때는 반드시 선언태그에 쓴다

- 매서드를 만드는 규칙은 JAVA 문법을 따른다, JSP 에서 메서드를 만드는 일은 드뭄

 

3. 표현식 태그

- <%= %>

- 변수나 값을 브라우저에 출력가능

- 출력할 변수나 데이터가 사이에 들어감

- 브라우저에 출력시키는 JSP 3가지 방법 중 1개

 

4. 지시어 태그

- 3가지 종류가 있다

- 공통적으로 <%@ 로 시작

1) 페이지 태그 <%@ page    %>

- JSP 파일을 이클립스로 만들면 자동으로 1라인에 생성되는 태그, 이게 페이지 지시어 태그

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

- 이 페이지에 쓸 수 있는 속성들이 있다

- contentType="text/html; charset=UTF-8" : META 태그에서 현재 문서에 있는 한글값을 브라우저에 출력하기 전에 UTF-8 로 인코딩 시켜라는 뜻, 즉 HTML의 meta 태그에서 하던 역할을 이 페이지 태그에서도 함

2) 포함 태그 <%@ include   %>

+ 부트스트랩에서 외부파일을 불러올때 사용했었다

3) 사용자 정의 태그 <%@taglib   %>

- taglib

 

5. 액션 태그

- <jsp:   > 형태

- 주로 페이지를 이동시킬때 쓰는 액션태그가 있고 자바와 연동할때 쓰는 액션태그가 있다

- include, forward 는 페이지 이동이나 다른 페이지를 이동시킬때 사용하는 액션태그

- usebeen, setProperty, getProperty 는 자바와 연동할때 사용하는 액션태그, Java의 DAO DTO 클래스와 연결할때 사용하는 액션태그

 

+ Java 애플릿 : JAVA Application(내 컴에서만) 형태로 된 것을 웹 상에서 사용될 수 있도록 해줌, 잘 사용되지 않음

 

JSP 5대 태그 예제 1

- tag.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>

<!-- 스크립틀릿 태그 (Scriptlet Tag) -->
<%
	// 기본 자료형 변수
	int i = 30;
	double d = 3.14;
	char c1 = 'A';
	char c2 = '자';
	boolean b1 = true;
	boolean b2 = false;
	
	// 참조형 변수
	// 1. 클래스
	String str1 = "JSP";
	String str2 = new String("JSP");
	
	// 2. 배열
	String[] str = {"자바", "JSP", "오라클", "웹표준", "파이썬"};
	
	for(int j = 0; j < str.length; j++){
		out.println(str[j] + "\t");
	}
	out.println("<br>");
%>

<%	for(String s : str) { %>
		<%=s %> <br>
<% 	}%>

<%
	// 3. 인터페이스 : List
	List list = new ArrayList();	// 업태스팅
	list.add(50);
	list.add(42.195);
	list.add('A');
	list.add(true);
	list.add("JSP");
	
	for(int j = 0; j < list.size() ; j++) {
		out.println(list.get(j) + "\t");
	}
%>
	



<!-- 표현식 태그 (Expression Tag) -->
출력 : <%="출력 성공"%> <br>
연산결과 : <%=1+2+3+4+5+6+7+8+9+10%> <br>
i = <%=i%> <br>
d = <%=d%> <br>
c1 = <%=c1%> <br>
c2 = <%=c2%> <br>
b1 = <%=b1%> <br>
b2 = <%=b2%> <br>
str1 = <%=str1%> <br>
str2 = <%=str2%> <br>

 

 

스크립틀릿 태그 / 기본 자료형 변수 (tag.jsp 부분)

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

<!-- 스크립틀릿 태그 (Scriptlet Tag) -->
<%
	// 기본 자료형 변수
	int i = 30;
	double d = 3.14;
	char c1 = 'A';
	char c2 = '자';
	boolean b1 = true;
	boolean b2 = false;
	
%>

- 일반적인 JAVA 또는 JSP 코드를 쓸때 모두 스크립틀릿 태그안에 쓴다

+ 문법은 JAVA 문법 그대로이다

 

+ JSP에서 참조형 변수의 사용

- 자바의 자료형은 기본자료형 변수가 있고 참조형(클래스, 배열, 인터페이스) 변수가 있다

- JRE를 불러왔기때문에 JRE 라이브러리 안의 내용 사용 가능 

- 자바 문법을 따르므로 java.lang 제외 패키지 안의 클래스, 인터페이스 사용시 import 해야함

 

스크립틀릿 태그 / 참조형 변수 : 클래스 (tag.jsp 부분)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>

<!-- 스크립틀릿 태그 (Scriptlet Tag) -->
<%
	// 참조형 변수
	// 1. 클래스
	String str1 = "JSP";
	String str2 = new String("JSP");
%>

 

- String 은 java.lang 패키지 안의 클래스라 import 하지 않아도 된다

+ 거의 대부분의 코드는 스크립틀릿 태그 안에 쓰인다

 

스크립틀릿 태그 / 참조형 변수 : 배열 (tag.jsp 부분)

<%	
    // 2. 배열
	String[] str = {"자바", "JSP", "오라클", "웹표준", "파이썬"};
	
	for(int j = 0; j < str.length; j++){
		out.println(str[j] + "\t");
	}
	out.println("<br>");
%>

- 배열의 요소들을 반복문을 통해 출력시켜야하는데 표현식 태그를 중첩해서 사용할 수 없다

-> 해결 방법들 중 out 객체로 출력하고 있다

 

+ print() 와 println() 모두 줄이 바뀌지 않는다 -> br 태그 사용

+ br 태그는 태그 바깥에 써도 되고 안에 써도 되지만 안에 쓸떄는 out.println() 안에 써야한다

+ out 객체는 스크립틀릿 태그 안에서 사용해야한다

 

-> 또다른 해결 방법 : 태그를 따로 작성

+ 일반 for문이 아닌 향상된 for 문으로 작성 (tag.jsp 부분)

<%	for(String s : str) { %>
		<%=s %> <br>
<% 	}%>

- 가운데는 표현식 태그로 출력 하고 있다

- 다른 해결방법 중 하나이다, 중첩이 불가능하므로 여는 곳, 닫는 곳 따로 스크립틀릿 태그 안에 넣고 출력하는 부분만 표현식 태그로 출력

 

스크립틀릿 태그 / 참조형 변수 : 인터페이스 (tag.jsp 부분)

<%
	// 3. 인터페이스 : List
	List list = new ArrayList();	// 업태스팅
	list.add(50);
	list.add(42.195);
	list.add('A');
	list.add(true);
	list.add("JSP");
	
	for(int j = 0; j < list.size() ; j++) {
		out.println(list.get(j) + "\t");
	}
%>

- java.util 패키지를 import 하고 리스트를 만들수 있음

- List 객체 만드려면 ArrayList 로 업캐스팅 또는 ArrayList 객체만들기

- List 자료구조의 데이터를 반복문으로 출력, out 객체 사용

* import 하는 방법은 아래에

 

+ import 하는 방법 / 페이지 지시어 태그와 속성 (tag.html 부분)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>

- contentType="text/html; charset=UTF-8" : META 태그에서 현재 문서에 있는 한글값을 브라우저에 출력하기 전에 UTF-8 로 인코딩 시켜라는 뜻, 즉 HTML의 meta 태그에서 하던 역할을 이 페이지 태그에서도 함

- language="java" : 기본값이 java 이므로 생략 가능

- contentType 속성 : 현재 문서의 타입이 텍스트냐 이미지냐 , 현재 문서는 text 란 의미

한글값을 브라우저에 출력시 인코딩을 UTF-8 로 하라는 의미

pageEncoding 도 생략 가능

- import 속성 : import 할때 사용, 추가해서 사용, import="패키지부터 클래스까지의 경로" 로 써야함

- errorPage 속성 : JSP 에서 에러처리할때, 에러를 보여줄 페이지명을 지정, 에러를 보여줄 페이지 안에는 isErrorPage="true"로 설정해야함

- isErrorPage 속성 : 에러를 보여줄 페이지 안에서 true 로 설정해야함

- 그 외는 기본값이 잡혀있으므로 신경쓰지 않아도 된다

 

page 지시어 태그 속성

1. contentType : 현재문서의 형식, 텍스트인지 이미지인지 명시, 텍스트라면 text/html 

2. charset : 현재문서를 브라우저로 출력시 어떻게 인코딩 시킬지, 한글은 EUC-KR 또는 UTF-8

+ UTF-8 로 해야 영문 브라우저에서도 한글값 깨지 않음

- 값이 넘어가는것과 관련없다, 현재 문서를 인코딩

3. import : 외부의 클래스등을 사용하려면 import 해야함

4. errorPage / isErrorPage : 페이지 처리시 사용해서 한 페이지에서 에러를 한꺼번에 처리할 수 있게 함

 

표현식 태그 (tag.jsp 부분)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!-- 표현식 태그 (Expression Tag) -->
출력 : <%="출력 성공"%> <br>
연산결과 : <%=1+2+3+4+5+6+7+8+9+10%> <br>
i = <%=i%> <br>
d = <%=d%> <br>
c1 = <%=c1%> <br>
c2 = <%=c2%> <br>
b1 = <%=b1%> <br>
b2 = <%=b2%> <br>
str1 = <%=str1%> <br>
str2 = <%=str2%> <br>

- 표현식 태그는 주로 변수명 등을 출력하는 역할

- 표현식 태그 안에 문자열도, 연산식도 들어갈 수 있다

- 연산식의 결과가 출력됨

- 표현식 태그는 문자열, 연산결과, 변수에 저장된 값, 리턴구문에서 돌려받은 값 등을 출력

 

+ 한글 인코딩

- HTML 에서의 한글 인코딩과 JSP 에서의 한글 인코딩이다, 두개가 같은 역할

- 두가지 중 하나는 있어야만 한글이 깨지지 않음

 

JSP 5대 태그 예제 2

선언 태그

- tag1.jsp

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

<!-- 선언태그 -->
<!-- JSP에서 메소드는 반드시 선언태그 안에서 생성해야한다. -->
<%!
	int a = 30;
	public int add(int a, int b) {
		int c = a + b;
		return c;
	}

	public int subtract(int a, int b) {
		int c = a - b;
		return c;
	}
	
	public int multiply(int a, int b) {
		int c = a * b;
		return c;
	}
%>
<%
	int result1 = add(3, 9);	//add 메소드 호출
	int result2 = subtract(3, 9);	//subtract 메소드 호출
	int result3 = multiply(10, 25);	//multiply 메소드 호출
%>

3 + 9 = <%=result1 %> <br>
3 - 9 = <%=result2 %> <br>
10 * 25 = <%=result3 %> <br>
10 * 25 = <%=multiply(10, 25) %> <br>

- JSP에서 메소드는 반드시 선언태그 안에서 생성해야한다

+ 선언 태그안에 변수 선언하는 것도 가능하다

- 메소드를 호출할때는 스크립틀릿 태그, 결과를 출력할때는 표현식 태그를 사용

- 표현식 태그 안에서 함수를 호출하여 리턴받은 결과를 표현식 태그로 바로 출력하는 것도 가능하다

+ 표현식 태그는 문자열, 연산결과, 변수에 저장된 값, 리턴구문에서 돌려받은 값 등을 출력

 

페이지 지시어 태그 속성

1. 자동으로 추가되는 속성

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

- contentType : 현재 문서의 형식

- charset=UTF-8 현재 문서의 한글값을 UTF-8 로 인코딩 시켜라

 

2. 직접 설정

- import

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

- java.lang 외의 패키지의 클래스/인터페이스 사용시엔 반드시 import 필요

- 나중에는 API 가 아닌 직접 만든 클래스를 import

 

+ 날짜 시간 관련 클래스 복습 링크

https://laker99.tistory.com/28

 

JSP 5대 태그 예제 3

import 예제 / 페이지 지시어 태그 1

- 날짜 시간 관련 클래스들 (java.util 패키지)

- import.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.sql.Timestamp"%>

<%
	// 1. 날짜, 시간 클래스
	// 1. Date 클래스
//	java.util.Date d = new java.util.Date(); // import 를 안하고 쓸 수 있다
	Date d = new Date();
	SimpleDateFormat sd = 
			new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EEE요일");
	
	// 2. TimeStamp 클래스
	Timestamp ts = new Timestamp(System.currentTimeMillis());
%>

현재시간1 : <%=d %> <br>
현재시간2 : <%=sd.format(d) %> <br>
현재시간3 : <%=ts %> <br>
현재시간4 : <%=sd.format(ts) %> <br>

<Date 클래스>

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

- Date 클래스를 쓰려면 java.util 을 페이지 지시어 import 속성으로 import 해야함

+ 쉽게 import 하는 법 : Date 를 입력하면서 Ctrl + Space 누르고 선택하면 쉽게 import 가능

- 날짜 시간이 영미권에서 쓰는 형태로 나타난다

 

<SimpleDateFormat 클래스>

<%@page import="java.text.SimpleDateFormat"%>

- 날짜 시간 형식을 한국에서 자주 쓰는 형태로 바꾸기 위해 Java.text.SimpleDateFormat 클래스가 필요

- java.text 패키지 import 

 

<TimeStamp 클래스>

<%@page import="java.sql.Timestamp"%>

- java.security 가 아닌 java.sql 패키지 안의 TimeStamp 클래스를 사용해야한다

- java.sql 패키지를 import

- 이것 역시 포맷을 적용한다

 

JSP 5대 태그 예제 4

import 예제 / 페이지 지시어 태그 2

- 날짜 시간 관련 클래스들 중 Calendar 클래스 (java.util 패키지)

- 날짜 시간 클래스 관련 JAVA 내용은 자바공부할 때 배웠다 https://laker99.tistory.com/28

- import1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.Calendar"%>
<%
	// 3. Calendar 클래스
	
	Calendar c = Calendar.getInstance();
	
	int y = c.get(Calendar.YEAR);			// 년
	int m = c.get(Calendar.MONDAY)+1;		// 월(0~11)
	int d = c.get(Calendar.DATE);			// 일
	
	int h1 = c.get(Calendar.HOUR);			// 12시간
	int h2 = c.get(Calendar.HOUR_OF_DAY);	// 24시간
	
	String h = "";
	if(c.get(Calendar.AM_PM) == 0) {	// AM_PM : 0 (오전)
		h = "오전";						// AM_PM : 1 (오후)
	} else {
		h = "오후";
	}
	
	int mm = c.get(Calendar.MINUTE);		// 분
	int s = c.get(Calendar.SECOND);			// 초
	
	// 일(1), 월(2), 화(3), 수(4), 목(5), 금(6), 토(7)
	int week = c.get(Calendar.DAY_OF_WEEK);	// 요일(1~7)
	
	String[] weekend = {"일", "월", "화", "수", "목", "금", "토"};
%>
<%=week %> <br> <!-- 5 : 목 -->

<!-- 12시간제 시간 -->
<%=y%>-<%=m%>-<%=d%> <%=h %> <%=h1 %>:<%=mm %>:<%=s %>
	<%=weekend[week-1] %>요일 <br>

<!-- 24시간제 시간 -->
<%=y%>-<%=m%>-<%=d%> <%=h %> <%=h2 %>:<%=mm %>:<%=s %>
	<%=weekend[week-1] %>요일 <br>

- JAVA 코드는 스크립틀릿 태그, 출력할때는 표현식 태그

+ Calendar 클래스는 new 연산자로 객체생성하지 못함, 정적메소드 getInstance() 사용해서 객체 구함

 

JSP 5대 태그 예제 5

import 예제 / 페이지 지시어 태그 3

- Random 클래스

- Random 클래스 난수발생 내용 JAVA 복습 https://laker99.tistory.com/28

- import2.jsp

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

<%
	// 난수 발생
	Random r = new Random();
	
	int r1 = r.nextInt(10);	// 0 ~9
	
	// 1 ~ 45 사이의 난수 발생
	int r2 = r.nextInt(45) + 1;	// 1 ~ 45
%>

난수1 : <%=r1 %> <br>
난수2 : <%=r2 %> <br>

- Random 클래스 메소드 중 nextInt(45) 이면 0 부터 44까지 포함이다

 

JSP의 주석 

- JSP 에선 주석이 크게 2가지로 나눠짐

- 클라이언트 웹 브라우저에 전송하지 않는 부분

- 클라이언트 웹 브라우저에 자체에 전송하지 않기때문에 소스보기 하더라도 결과가 보이지 않음

 

1. JSP 주석

- 아무곳에서나 사용 가능

- 여러줄 기술 가능

<%-- --%>

2. JSP 스크립트 주석

- 스크립틀릿 태그, 표현식 태그, 선언 태그 안에서도 사용 가능

- 단일행 주석과 다중행 주석

//
/* */

 

JSP 주석 주의

<%-- JSP 주석입니다 --%>
<% // 스크립틀릿에 한줄 주석 %>
<% /* 스크립틀릿에 여러줄 주석 %>
<%=name /* 표현식에 주석 사용 %>
<%= /* 표현식에 주석만 있는 경우 컴파일 에러 발생 %>

- 스크립틀릿 태그 안에 사용할 때는 단일행 주석과 다중행 주석 다 가능

- 표현식 태그 안에 사용할때는 다중행 주석만 가능

 

JSP 주석 예제 

실습 준비

- 모두 주석에 대한 예제

 

JSP 주석 예제 1

HTML 주석

- htmlComment.jsp

<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page import = "java.util.Date" %>

<html>
<head><title>HTML 주석</title></head>
<body>

<!-- 처리시간: <%= new Date() %> -->
HTML 주석은 그대로 출력됨.

</body>
</html>

- HTML 주석 <!-- --> 사용

- HTML 주석 안에서 출력하는 표현식 태그 사용하고 있다

- HTML 주석 안 내용은 주석이기 때문에 브라우저에 출력되진 않는다

- 브라우저에 출력되진 않지만 클라이언트 측 언어이기 때문에 웹 브라우저 상에 소스보기 하면 모두 노출됨

브라우저
소스보기

 

+ 소스보기

 

JSP 주석 예제 2

JSP 주석

- jspComment.jsp

<%@ page contentType = "text/html; charset=euc-kr" %>

<html>
<head><title>JSP 주석</title></head>

<body>

	<%-- JSP 주석입니다. --%>
	주석은 출력 결과에 포함되지 않습니다.

</body>

</html>

- JSP 주석 <%-- --%> 을 사용하고 있다

- 안의 내용은 모두 주석으로 처리됨

- JSP 주석은 아무곳이나 사용 가능하다

- 브라우저 창에 나타나지 않고, 클라이언트 웹 브라우저에도 전송자체를 하지 않은 내용이므로 소스보기 하더라도 보이지 않음

- HTML 주석보다 보안상 더 안전하다

 

JSP 주석 예제 3

JSP 스크립트 주석

- javaComment.jsp

<%@ page contentType = "text/html; charset=euc-kr" %>

<%!
	/**
	 * a와 b의 합을 리턴한다.
	 */
	public int add(int a, int b) {
		return a + b;
	}
%>

<html>
<head><title>자바 주석</title></head>

<body>

<%
	int val1 = 10; // val1에 10을 할당
	int val2 = 20; // val2에 20을 할당
	
	/* va1과 va2의 값을 더한 결과를
	   result에 할당한다. */
	int result = add(val1, val2);
%>

<%= val1 %> + <%= val2 %> = <%= result /* 결과는? */ %>

</body>
</html>

- JSP 스크립트 주석은 JSP 태그 중 스크립틀릿 태그, 표현식 태그, 선언 태그 내에서 사용 가능하다

- JSP 스크립트 주석은 단일행 주석과 다중행 주석이 있다

- 선언 태그 안과 스크립틀릿 태그, 표현식 태그 내에서 주석을 사용하고 있다

- 표현식 태그 안의 주석은 다중행 주석만 가능하고 단일행 주석을 쓰면 오류 발생

- JSP 스크립트 주석은 클라이언트의 웹 브라우저에 전송자체를 하지 않기때문에 소스보기 해도 나타나지 않는다

소스 보기

JSP 주석 예제 4

모든 주석

- comment.jsp

<%@ page contentType="text/html;charset=euc-kr" %>

<html>

<!-- HTML에서 제목을 출력합니다.(html 주석) -->

두 개의 숫자를 더해서 결과를 출력합니다 : <br>

<%-- 계산 결과는 자바 코드로 출력합니다.(jsp 주석) --%>

<body>

<%
/* 두 개의 정수형 변수에
   값을 할당하고 계산합니다. */

int i=1;
int j=2;
i=i+j;

out.println("i+j = " + i); //계산된 결과를 출력합니다.
%>

</body>
</html>

- HTML 주석 : 소스보기에 보임

- JSP 주석 : 소스보기에 보이지 않음

- JSP 스크립트 태그 안 다중행 주석 : 소스보기에 보이지 않음

- JSP 스크립트 태그 안 단일행 주석 : 소스보기에 보이지 않음

 

- 주석은 무엇이든지 브라우저 상에선 안보임, 소스보기시에 HTML 주석은 보인다
- 소스보기에 보이지 않음 = 클라이언트 웹 브라우저로 전달자체가 되지 않았다

 

- HTML 주석은 클라이언트 웹 브라우저에 전송되기 때문에 소스보기 시에 보인다

- 네이버 : HTML 주석은 소스보기로 볼 수 있다

- 보안상 HTML 주석은 좋지 않다

 

JSP 주석 예제 5

모든 주석

- commentEx.jsp

<%@ page contentType="text/html;charset=euc-kr" %>

<html>
	<body>


<h1>Comment Example</h1>

<%
   String name = "Korea";
%>

<!-- html 주석 부분입니다. '소스보기'에서 보이지요. -->

<%-- 
     이 부분은 JSP 페이지에서만 보이고 '소스보기'를 해도 보이지 않습니다.
     브라우저에 보내지 않는 문장입니다. 
--%>

<!-- <%=name%> html주석에서도 동적인 변수 사용(주석 처리되지만 브라우저에서 소스보기로 출력됨) -->

<%-- <%=name%> jsp주석 --%>

<%=name /* 표현식의 주석 부분 입니다*/ %> Fighting!!!

	</body>
</html>

- HTML 주석은 브라우저에 출력되지 않지만 소스보기에서 보임

- JSP 주석은 브라우저에서 출력되지 않고 소스보기에서도 보이지 않음

- HTML 주석 안의 표현식 태그는 소스보기에서 변수 값이 출력됨, 즉 소스보기에서 보임

- JSP 주석 안의 표현식 태그는 소스보기에서 보이지 않음

- 표현식 태그 안의 JSP 스크립트 다중행 주석은 소스코드에서 보이지 않음

- JSP 주석과 JSP 스크립트 주석으로 처리하는게 보안상 안전


JSP 내장 객체

- JSP 에선 9개의 내장 객체가 지원된다

- 따로 정의 없이 사용할 수 있도록 기본적으로 제공됨

- 내장객체를 쓸 수도 있고 직접 클래스로 객체를 만들어서 사용할 수도 있음

기본 객체 실제 타입 설명
request javax.servlet.http.HttpServletRequest 
또는 javax.servlet.ServletRequest
클라이언트의 요청 정보를 저장한다.
respond javax.servlet.http.HttpServletResponse
또는 javax.servlet.ServletResponse
응답 정보를 저장한다
pageContext javax.servlet.jsp.PageContext JSP 페이지에 대한 정보를 저장한다
session javax.servlet.http.HttpSession HTTP 세션 정보를 저장한다
application javax.servlet.ServletContext 웹 어플리케이션에 대한 정보를 저장한다
out javax.servlet.jsp.JspWriter JSP 페이지가 생성하는 결과를 출력할 때 사용되는 출력 스트림이다
config javax.servlet.ServletConfig JSP 페이지에 대한 설정 정보를 저장한다
page java.lang.Object JSP 페이지를 구현한 자바 클래스 인스턴스이다
exception java.lang.Throwable 예외 객체, 에러 페이지에서만 사용된다

- 굵음 적용된 내장객체는 자주 사용되는 객체

 

response 객체

- 서버측에서 응답하는 객체

- 페이지 이동시에 많이 사용하는 객체 (HTML : meta 태그, Javascript : location 객체, JSP : response 객체의 sendRedirect())

- 쿠키 발행시에도 사용하는 객체, 쿠키 발행하면서 응답하면 클라이언트의 임시폴더에 쿠키가 저장됨

 

session 객체

- 서버와 클라이언트 사이 연결을 유지하기 위한 객체

- 주로 회원관리 할때 사용됨

- 회원가입 프로그램에서 로그인에 성공했을 경우 쿠키와 세션을 사용함

- 로그인시 id 비번을 전달해서 가입시의 id 비번과 일치시 세션을 연결하는 것임

- 쿠키 대신 사용

 

out 객체

- 브라우저에 출력시켜주는 객체

- 지원되는 메소드 중 println() 메소드를 통해 출력 가능

- 브라우저에 출력하는 방법 중 1개

 

request 객체

- 클라이언트의 요청 정보를 처리해줌,

- 클라이언트가 get/post 로 요청할때 요청을 처리해주는 객체

- 가입 버튼 클릭시 서버측으로 id, 비번, 이름 등을 서버로 전달함

- 클라이언트가 요청 (form 에서 값 입력후 action 으로 전달) 시 request 객체가 요청을 받음

- 지원되는 메소드 중 getParamenter() 메소드를 통해 넘어온 값을 받을 수 있다

 

request 객체 메소드

+내장객체에서 지원되는 메소드는 자바 스탠다드가 아닌 자바 EE 에서 지원되는 클래스를 찾아야함

javax.servlet.http.HttpServletRequest 또는 javax.servlet.ServletRequest

- 에서 지원 메소드 확인 가능

 

request 객체 예제

실습 준비

- 웹상에서 한글 이름을 사용하면 문제 발생, 'request객체' 에서 한글인 '객체' 를 지우기

 

JSP 내장 객체 예제 1

request 객체 예제 1

- WebContent/request/ex1

- requestExample1.html & requestExample.jsp

- requestExample1.html

<html>
<head>
	<meta charset="UTF-8">
	<title>request객체 연습</title>
	<script src="http://code.jquery.com/jquery-latest.js"></script>
	<script>
	$(document).ready(function(){
		$("form").submit(function(){
			if($("#name").val()==""){
				alert("이름을 입력하세요");
				$("#name").focus();
				return false;
			}
			if($("#studentNum").val()==""){
				alert("학번을 입력하세요");
				$("#studentNum").focus();
				return false;
			}
			if($("#male").is(":checked")==false &&
			   $("#female").is(":checked")==false){
				alert("성별을 선택하세요");
				return false;
			}
			if($("#major").val()=="#"){
				alert("전공을 입력하세요");
				$("#major").focus();
				return false;
			}
		});	
	});	
	</script>
</head>
<body>
<h1>Request 예제1</h1>

<form name=myform method=post action="requestExample1.jsp">
 이름 : <input type="text" name="name" id="name" autofocus="autofocus"><br>
 학번 : <input type="text" name="studentNum" id="studentNum"><br>
 성별 : 남자 <input  type="radio" name="gender"  value="남자" id="male">
        여자 <input type="radio" name="gender" value="여자" id="female"><br>
 전공 : <select name="major" id="major">
			<option value="#">전공을 선택하세요</option>
			<option value="컴퓨터공학">컴퓨터공학</option>
			<option value="영문학과">영문학과</option>
			<option value="수학과">수학과</option>
			<option value="정치학과">정치학과</option>
			<option value="산업디자인과">산업디자인과</option>
		</select><br>
<input type="submit" value="보내기">
<input type="reset" value="취소">
</form>

</body>
</html>

- jQuery 로 유효성 검사 되어있다

- form 태그는 한꺼번에 많은 정보를 저장할때 쓴다

- form 태그의 method 에서 get/post 방식 선택 가능, 보통 보안이 좋은 post 방식 선택

+ get 방식 전송과 post 방식 전송시에 한글 인코딩 문제가 달라짐! (뒤에 설명)

- 나머지(링크걸기, location 으로 이동, meta 태그로 이동) 경우는 get만 가능

- form 의 action 에서 값을 전달할 페이지 지정, 이 자리에는 jsp, php, asp 같은 웹 프로그램 명이 온다

- HTML은 값을 받을 수 없으므로 html 파일이 오지 않음

+ Model 2 는 다르지만 지금은 일단 jsp 파일

- '보내기' 버튼 클릭시 클라이언트에서 사용자가 입력한 정보를 

 

값 전달

- Javascript , jQuery나 CSS 에서는 태그를 구분하기 위해 id 값이 중요하다

- 하지만 JSP 처럼 웹 프로그램과 연동시에는 name 값이 사용자가 입력한 값을 전달하는 변수 역할을 하므로 name 값이 중요하다

- JSP 파일에서 name 값으로 값을 받으므로 태그의 name 값이 중요

- 아래 사진은 받는 측 jsp 파일

jsp 파일측

 

라디오버튼의 값 전달

- 입력양식은 입력한 값이 name 변수에 저장되지만

- 라디오버튼은 입력양식이 아니므로 변수명은 name 값인 'gender' 가 되지만 그 변수 안에 저장된 값은 입력된 값이 아닌 value 속성의 값이다

+ 라디오 버튼은 동일한 name 값을 사용한다, gender 라는 변수명 

- value 값이 한글임을 유심히 보기

 

Select 옵션의 값 전달

- select 도 마찬가지로 선택양식이므로 major 라는 변수에 선택한 값의 value 가 저장된다

 

- requestExample.jsp

<%@ page contentType="text/html;charset=utf-8"%>

<%	// 폼파일에서 한글값이 post방식으로 전송될때 utf-8로 인코딩을 시켜주는 역할
	request.setCharacterEncoding("utf-8");
%>

<html>
<h1>Request 객체1</h1>

<%
	String name = request.getParameter("name");
	String studentNum = request.getParameter("studentNum");
	String gender = request.getParameter("gender");
	String major = request.getParameter("major");
/* 
	if(gender.equals("m")){
		gender = "남자";
	}else{
		gender = "여자";
	} */
%>

<body>
성명: <%=name%><p>
학번: <%=studentNum%><p>
성별 : <%=gender%><p>
전공 : <%=major%>
</body>
</html>

 

전달된 값 받기

- request 객체의 getParameter("name 속성값") 메소드로 전달된 값을 받음

- html 파일에서의 name 속성값이 변수명이 되어 그 변수명을 통해 입력된값이나 선택값의 value 값을 받을 수 있음

- 매개변수에는 입력양식과 선택양식의 name 값이 들어감

- 매개변수가 String 형이기때문에 "" 를 해야함

- 리턴형도 String 이기떄문에 String 변수로 받아야함

+ name 값은 대소문자를 구분한다!

 

- 결과 캡처

 

한글 인코딩

만약 post 방식 대신 get 방식으로 값을 전달한다면?

- form 으로 값을 전달하는 경우에는 get / post 선택 가능

+ name값을 통해 넘어가는 값들이 모두 URL 주소 창에 노출된다

- "여자", "컴퓨터공학" 등의 한글값이 깨지지 않고 출력된다

- get 방식으로 전달시 Apache Tomcat 이 자동으로 UTF-8 로 인코딩 해주고 전달하기때문에 크게 신경쓰지 않아도 된다

 

post 방식에서는?

- Apache Tomcat 이 자동으로 인코딩해주지 않음

- 따라서 아래의 코드를 jsp 파일에 넣어야 인코딩 해줌

 

인코딩 코드

<%	// 폼파일에서 한글값이 post방식으로 전송될때 utf-8로 인코딩을 시켜주는 역할
	request.setCharacterEncoding("utf-8");
%>

- 이 코드를 requestExample1.jsp 파일에 넣었기때문에 한글값이 깨지지 않고 잘 출력된다

+ get 방식에선 이 코드가 없어도 Apache Tomcat 에 의해 자동 UTF-8 인코딩 된다

 

- post 방식에선 이 코드가 없다면 한글값이 깨짐

- 이 코드를 request 객체로 값을 받기 전인 위쪽에 써야한다

- 값을 먼저 받은 다음 인코딩을 시키면 깨짐

- 저 부분을 주석처리 했을 경우출력

 

한글 인코딩 정리 & 인코딩 코드 위치

<%	
//한글 인코딩
//1. 폼파일에서 한글값이 get 방식으로 전송될 때는 tomcat 이 자동으로 utf-8 로 인코딩을 시켜준다
//2. 폼파일에서 한글값이 post 방식으로 전송될 떄는  tomcat 이 자동으로 인코딩을 시켜주지 않기 때문에
//	 아래의 코드로 직접 인코딩을 시켜야 한다.
// 폼파일에서 한글값이 post방식으로 전송될때 utf-8로 인코딩을 시켜주는 역할
 	request.setCharacterEncoding("utf-8");
%>

- 이 코드를 request 객체로 요청을 받기 전인 위쪽에 써야한다

 

페이지 지시 태그 vs setCharacterEncoding() 차이

페이지 지시 태그

- 값이 넘어오는 것이 아닌 현재 페이지 문서상의 한글을 인코딩 시켜주는 코드

- 또한 meta 태그의 charset 또한 이 페이지 지시 태그와 같은 의미, 같은 역할

setCharacterEncoding()

- 한글값(value)이 post 방식으로 전송될때 그 넘어온 값을 인코딩 시켜주는 코드

- 이 예제에서는 넘어온 이름값과 성별값과 전공값 을 인코딩시켜주는 코드

 

- 두개를 맞춰야하지만 의미가 다른 코드이다

 

request 객체의 메소드

void setCharacterEncoding(String env) 한글 인코딩 처리
getParameter(String name) name에 해당하는 파라미터 값을 구함
String[] getParameterValues(String name) checkbox 같이 여러 개의 파라미터 값을 구함
String getRemoteAddr() client의 IP주소를 구함
String getRequestURI() 요청 URI를 구함
String getContextPath() 컨텍스트 패스(project명)를 구함

 

내장 객체의 메소드 API 찾기

- 이 내장객체는 클래스가 아니기 때문에 지원 메소드를 찾기 힘들다

- 메소드를 찾으려면 '실제 타입' 으로 되어있는 해당 클래스나 인터페이스로 찾아야한다

- 여기 들어있는 클래스나 인터페이스의 패키지는 모두 Java EE 이다 (자바시간에 배운건 Java SE)

- Java SE (스탠다드 에디션)가 아닌 Java EE 패키지 에서 API를 찾아야한다

- 오라클에서 찾아야함

- request 객체의 getParameter() 메소드를 찾아보자

- java ee api 검색 후 사이트

https://docs.oracle.com/javaee/7/api/toc.htm

 

Java(TM) EE 7 Specification APIs

 

docs.oracle.com

 

- javax.servlet.http 에서 HttpServletRequest 인터페이스 찾기

- javax.servlet.http 에서 HttpServletRequest 인터페이스 에는 getParameter() 메소드가 없다

- 다른 실제 타입에서 찾아보자

- javax.servlet 의 ServletRequest 인터페이스에서 찾아보자

+

 

그 외 request 객체의 메소드

String[] getParameterValues(String name) checkbox 같이 여러 개의 파라미터 값을 구함
String getRemoteAddr() client의 IP주소를 구함
String getRequestURI() 요청 URI를 구함
String getContextPath() 컨텍스트 패스(project명)를 구함

- getParameterValues() : 체크박스 같은 경우 1개의 name 값에 여러개의 value 값이 들어감, 이때 사용

 

+ 일반적으로 값을 받는 name 값과 변수명을 같게 설정

 

id 값 vs name 값

- id 값은 태그를 구해오는데 중요 = jQuery , Javascript , CSS 에서 중요

- name 값은 값을 전달하는데 중요 = JSP 에서 중요

- id 값과 name 값이 같아도 상관없다

 

JSP 내장 객체 예제 2

request 객체 예제 2

- WebContent/request/ex2

- 체크박스를 통해 여러개의 값이 넘어갈때 처리하는 예제

- getParameterValues() 함수 사용

- check01.html & check.jsp

- check01.html

<html>
	<head><title>좋은 사이트 선택</title>	
	<meta charset="utf-8">
	<script src="http://code.jquery.com/jquery-latest.js"></script>
	<script>
	$(document).ready(function(){
//		$("form").submit(function(){
		$("#myform").submit(function(){
			/* var cnt=0;
			if($("#h1").is(":checked"))	cnt++;
			if($("#h2").is(":checked"))	cnt++;
			if($("#h3").is(":checked"))	cnt++;
			if($("#h4").is(":checked"))	cnt++;
			if($("#h5").is(":checked"))	cnt++;
			if($("#h6").is(":checked"))	cnt++;
			if($("#h7").is(":checked"))	cnt++;
			
			if(cnt < 2){
				alert("사이트 2개이상 선택하세요");
				return false;
			} */
			
			if($("input:checkbox[name='site']:checked").length < 2){
				alert("사이트 2개이상 선택하세요");
				return false;
			}			
			
		});
	});	
	</script>
	</head>
<body>

<form id="myform" name=myform  method=post action="check.jsp"> 

	좋은 사이트를 2개 이상 선택하세요<br><br> 
	<input type="checkbox" id="h1" name="site" value="야후">야후<br>
	<input type="checkbox" id="h2" name="site" value="다음">다음<br>
	<input type="checkbox" id="h3" name="site" value="엠파스">엠파스<br>
	<input type="checkbox" id="h4" name="site" value="네이버">네이버<br>
	<input type="checkbox" id="h5" name="site" value="한미르">한미르<br>
	<input type="checkbox" id="h6" name="site" value="네띠앙">네띠앙<br>
	<input type="checkbox" id="h7" name="site" value="라이코스">라이코스<br><br>

	<input type="submit" value="전송">
	<input type="reset" value="취소">

</form> 

</body>
</html>

- name 값이 모두 "site" 로 동일하다, value 값들은 한글값이다

- 전송시 site 라는 변수에 여러개의 value 값이 저장된다(check.jsp 로 post 방식으로 전송된다)

+ 유효성 검사에서 input 값이 checkbox 인 것 중에서 name 값이 site 인 것들 중에서 체크된 체크박스를 구해옴

+ 라디오버튼이나 체크박스는 선택양식이므로 반드시 value 를 지정해야함

- check.jsp

<%@ page contentType="text/html;charset=utf-8"%>

<html>
<body>

	<%
		request.setCharacterEncoding("utf-8");

		String[] choice = request.getParameterValues("site");
		String result = "";

		for (int i = 0; i < choice.length; i++) {
			result = result + choice[i] + " ";
		}
	%>

	<center>
		귀하는 <font color=blue><%=result%></font> 를 좋아하시는군요.
	</center>

</body>
</html>

- post 방식으로 전송되었으므로 한글값이 깨지지 않게 하기 위해 인코딩 시켜주는 코드를 위에 넣는다

+ String 배열의 요소들을 반복문을 통해 하나씩 꺼내고 result 변수에 누적시키고 있다

 

인코딩 코드 (check.jsp 부분)

		request.setCharacterEncoding("utf-8");

 

한개의 변수(name값)에 넘어온 여러개의 값 받기 (check.jsp 부분)

		String[] choice = request.getParameterValues("site");

- 한개의 변수(name값)에 넘어온 여러개의 값을 받기 위한 메소드가 따로 있다

- request 객체의 getParameterValues() 메소드로 site 로 전달된 값들을 받아서 String 1차원 배열로 받는다

 

 

JSP 내장 객체 예제 3

request 객체 예제 3

- WebContent/request/ex3

- 라디오 버튼 값 전송

- poll.html & result.jsp

- poll.html

<html>
	<head><title>radio 버튼을 이용한 설문 조사</title>
	<meta charset="utf-8">
	<script src="http://code.jquery.com/jquery-latest.js"></script>
	<script>
	$(function(){
		$("form").submit(function(){
			/* if($("#s1").is(":checked")==false &&
			   $("#s2").is(":checked")==false &&
			   $("#s3").is(":checked")==false &&
			   $("#s4").is(":checked")==false ){
				alert("좋아하는 계절 1개를 선택하세요?");
				return false;
			} */

				if($("input:radio[name='season']:checked").length<1){
					alert("좋아하는 계절 1개를 선택하세요?");
					return false;
				}
		});
	});	
	</script>
	</head>
	<body>
	가장 좋아하는 계절은?
	<p>

	<form name=syberpoll method=post action=result.jsp>
		<input type=radio id="s1" name=season value=봄>봄<br>
		<input type=radio id="s2" name=season value=여름>여름<br>
		<input type=radio id="s3" name=season value=가을>가을<br>
		<input type=radio id="s4" name=season value=겨울>겨울<br>
		<input type=submit value="투표">
	</form>

	</body>
</html>

- 라디오 버튼의 name 값은 동일해야한다, 같은 그룹으로 묶어주는 역할

- season 이라는 name 값에 value 인 봄,여름,가을,겨울 중 하나가 저장되어 넘어감

+ 폼을 통해서 값을 전달할떄 라디오버튼과 체크박스는 value 값을 반드시 설정

+ post 방식이므로 jsp 파일에서 직접 넘어오는 값 한글 인코딩을 해줘야한다

+ 유효성 검사 중에서 input type=radio 중에서 name 속성값이 'season' 이고 그 중 선택된 라디오 박스의 개수(length) 가 0개(1개 미만) 일때 경고 메세지를 띄운다

+ 전송시 form 태그의 action 에 적힌 result.jsp 파일로 전달된다

- result.jsp

<%@ page contentType="text/html;charset=utf-8" %>

<html>
	<head><title>설문조사 결과</title>
	</head>
	<body>

	<%
		request.setCharacterEncoding("utf-8");
	
		String choiceseason = request.getParameter("season");
		String result = "";

		/* if(choiceseason.equals("spring")){
			result = "봄";
		} else if(choiceseason.equals("summer")){
			result = "여름";
		} else if(choiceseason.equals("autumn")){
			result = "가을";
		} else if(choiceseason.equals("winter")){
			result = "겨울";
		} */
	%>

		당신이 가장 좋아하는 계절은 <%=choiceseason%> 입니다.
	</body>
</html>

+ post 방식으로 넘어왔으므로 request 객체의 setCharacterEncoding() 메소드로 한글 인코딩을 직접 해준다

- 라디오 버튼의 값은 1개가 넘어오므로 request 객체의 getParameter() 메소드로 전달된 값을 name속성값인 season 을 통해 받고 있다

 

 

JSP 내장 객체 예제 4

request 객체 예제 4

- WebContent/request/ex4

- 그 외 request 객체의 메소드들

- requestInfo.jsp

<%@ page contentType = "text/html; charset=utf-8" %>

<html>
<head><title>클라이언트 및 서버 정보</title>
<meta charset="utf-8">
</head>
<body>

클라이언트IP = <%= request.getRemoteAddr() %> <br>
요청정보길이 = <%= request.getContentLength() %> <br>
요청정보 인코딩 = <%= request.getCharacterEncoding() %> <br>
요청정보 컨텐트타입 = <%= request.getContentType() %> <br>
요청정보 프로토콜 = <%= request.getProtocol() %> <br>
요청정보 전송방식 = <%= request.getMethod() %> <br>
요청 URI = <%= request.getRequestURI() %> <br>
컨텍스트 경로 = <%= request.getContextPath() %> <br>
서버이름 = <%= request.getServerName() %> <br>
서버포트 = <%= request.getServerPort() %> <br>

</body>
</html>

 

getRemoteAddr() 메소드 (requestInfo.jsp 부분)

클라이언트IP = <%= request.getRemoteAddr() %> <br>

- 클라이언트의 IP 주소를 구해줌

- 어떤 사이트에 방문만 해도 내 IP 주소가 찍혀있는 경우, 이 함수로 내 IP를 구해서 뿌리는 것임

- String 형으로 리턴시켜주므로 String 형 변수에 저장

 

getRequestURI() 메소드 (requestInfo.jsp 부분)

요청 URI = <%= request.getRequestURI() %> <br>

- 요청 URI 를 구해줌

- 현재 파일의 경로값을 보여준다

- 현재 프로젝트 명부터 현재 파일의 경로를 보여줌

- 여기서 jspproject 는 프로젝트 명이고 나머지는 WebContent 를 기준으로 현재 파일의 경로를 보여줌

 

getContextPath() 메소드 (requestInfo.jsp 부분)

컨텍스트 경로 = <%= request.getContextPath() %> <br>

- 현재 프로젝트 명을 구해줌

 

- 전체 출력

- URL 에 localhost 대신 내 ip 주소 적어야 제대로 된 클라이언트 IP 보여줌

- 지금 컴이 서버 IP 이기도 하고 클라이언트 IP 이기도 하므로 똑같이 나옴

- jspproject 는 프로젝트 명이고 나머지는 WebContent 를 기준으로 현재 파일의 경로를 보여줌

 

JSP 내장 객체 예제 5

request 객체 예제 5

- WebContent/request/ex5

- makeTestForm.jsp & viewParameter.jsp

- makeTestForm.jsp

<%@ page contentType = "text/html; charset=utf-8" %>

<html>
<head><title>폼 생성</title></head>
<body>

폼에 데이터를 입력한 후 '전송' 버튼을 클릭하세요.
<form method="post" action="viewParameter.jsp">
이름: <input type="text" name="name" size="10"> <br>
주소: <input type="text" name="address" size="30"> <br>
좋아하는 동물:
    <input type="checkbox" name="pet" value="dog">강아지
    <input type="checkbox" name="pet" value="cat">고양이
    <input type="checkbox" name="pet" value="pig">돼지
<br>
<input type="submit" value="전송">
</form>
</body>
</html>

- 값 입력하면 그 값을 viewParameter.jsp 로 넘기는 역할

- 변수명이 될 name값을 유심히 보기

- viewParameter.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.*" %>

<%
    request.setCharacterEncoding("utf-8");
%>

<html>
<head><title>요청 파라미터 출력</title></head>
<body>

<b>request.getParameter() 메소드 사용</b><br>
name 파라미터 = <%= request.getParameter("name") %> <br>
address 파라미터 = <%= request.getParameter("address") %>
<p>

<b>request.getParameterValues() 메소드 사용</b><br>
<%
    String[] values = request.getParameterValues("pet");
    if (values != null) {
    	for (int i = 0 ; i < values.length ; i++) {
%>
			<%= values[i] %>
<%
  		}
  	}
%>
<p>

<b>request.getParameterNames() 메소드 사용</b><br>
<%
    Enumeration num = request.getParameterNames();
    while(num.hasMoreElements()) {
        String name = (String)num.nextElement();
%>
        <%= name %>
<%
    }
%>
<p>

<b>request.getParameterMap() 메소드 사용</b><br>
<%
    Map parameterMap = request.getParameterMap();
    String[] nameParam = (String[])parameterMap.get("name");
    if (nameParam != null) {
%>
name = <%= nameParam[0] %>
<%
	}
%>

</body>
</html>

- 4가지 메소드로 넘어온 값을 받고 있다

- 주로 getParameter() 메소드와 getParameterValues() 메소드 사용

 

getParameter() 메소드로 값 받기 (viewParameter.jsp 부분)

<b>request.getParameter() 메소드 사용</b><br>
name 파라미터 = <%= request.getParameter("name") %> <br>
address 파라미터 = <%= request.getParameter("address") %>
<p>

 

getParameterValues() 메소드로 값 받기 (viewParameter.jsp 부분)

<b>request.getParameterValues() 메소드 사용</b><br>
<%
    String[] values = request.getParameterValues("pet");
    if (values != null) {
    	for (int i = 0 ; i < values.length ; i++) {
%>
			<%= values[i] %>
<%
  		}
  	}
%>
<p>

- 체크박스처럼 여러개의 값이 넘어올때 받는 메소드

 

getParameterNames() 메소드로 값 받기 (viewParameter.jsp 부분)

<b>request.getParameterNames() 메소드 사용</b><br>
<%	// 열거형 : Enumeration num = "name, address, pet"
    Enumeration num = request.getParameterNames();
    while(num.hasMoreElements()) {
        String name = (String)num.nextElement();
%>
        <%= name %>
<%
    }
%>
<p>

- 이 메소드는 name 값을 구해준다

- 이 name 값들을 열거형 변수에 저장하고, num 값이 있다면 nextElement() 로 가져와서 출력

 

getParameterMap() 메소드로 값 받기 (viewParameter.jsp 부분)

<b>request.getParameterMap() 메소드 사용</b><br>
<%
    Map parameterMap = request.getParameterMap();
    String[] nameParam = (String[])parameterMap.get("name");
    if (nameParam != null) {
%>
name = <%= nameParam[0] %>
<%
	}
%>

- Map 의 형태로 값을 돌려준다, 변수에 저장함

- name값이 키가 되고, 사용자가 입력한 이름이 밸류가 됨

- name값을 이용해서 맵에서 밸류를 가져옴

 

 

 

JSP 내장 객체 예제 6

request 객체 예제 6

- WebContent/request/login

- HTML 시간에 만든 로그인 폼, 게시판 폼, 회원가입 폼에서 값을 전달하고 출력해보자

- HTML 과 jQuery 시간에 폼 만들기, 유효성 검사했던 내용에 값 전달 기능을 추가해보자

- loginform.html & login.jsp & login.js

- loginform.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 폼</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
	 /* $(document).ready(function(){
		$("form").submit(function(){
			if($.trim($("#id").val()) == ""){
				alert("ID를 입력하세요.");
				$("#id").focus();
				return false;
			}			
			if($.trim($("#passwd").val()) == ""){
				alert("비밀번호를 입력하세요.");
				$("#passwd").focus();
				return false;
			}			
		});		
	});	  */
</script>

<script src="login.js"></script>

</head>
<body>

<form method="post" action="login.jsp">
<table border=1 width=350 align=center>
	<caption>로그인</caption>
	<tr><th>ID</th>
		<td><input type=text size=30 autofocus="autofocus" id="id" name="id"></td>
	</tr>
	<tr><th>비밀번호</th>
		<td><input type=password size=30 id="passwd" name="passwd"></td>
	</tr>
	<tr><td colspan=2 align=center>
			<input type=submit value="로그인">
			<input type=reset value="취소">
		</td>
	</tr>
</table>
</form>

</body>
</html>

- name 값이 반드시 필요하다

- login.jsp

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

<%
	request.setCharacterEncoding("UTF-8");

	String id = request.getParameter("id");
	String passwd = request.getParameter("passwd");
%>

ID : <%=id %> <br>
비밀번호 : <%=passwd %>

- post 방식으로 전달되므로 "한글값" 이 깨지지 않도록 인코딩 설정을 위쪽에 하고 있다

- 나중에는 값을 받아 출력하는것 외에도 login.jsp 파일에서 DB 연동을 하고, DB의 아이디, 비밀번호와 맞는지 확인한다

 

- login.jsp

$(document).ready(function(){
		$("form").submit(function(){
			if($.trim($("#id").val()) == ""){
				alert("ID를 입력하세요.");
				$("#id").focus();
				return false;
			}			
			if($.trim($("#passwd").val()) == ""){
				alert("비밀번호를 입력하세요.");
				$("#passwd").focus();
				return false;
			}			
		});		
});

- jQuery 로 유효성 검사를 하고 있다

+ Recent posts