XML은?
XML은 HTML과 달리 태그의 이름을 마음대로 정할 수 있다.
XML은 데이터 전달에 관여한다. 스마트폰 문자의 경우도 XML형식으로 송수신한다.
스프링을 배울 때 데이터베이스 연동 시에도 XML이 이용된다.
<!-- xml은 html과 달리 태그이름을 마음대로 정할 수 있다.
xml은 단지 데이터 전달만 관여한다.
스마트폰 문자보내기도 xml형식으로 데이터 송수신한다.
스프링 배울 때 데이터베이스 연동 시 xml사용 -->
<데이터>
<책>
<책이름>시작의 기술</책이름>
<책저자>개리 비숍</책저자>
<장르>자기계발서</장르>
</책>
<책>
<책이름>젊은 adhd의 슬픔</책이름>
<책저자>정지음</책저자>
<장르>에세이</장르>
</책>
</데이터>
JSP(Java Server Page)
JSP는 서버에서 실행되는 자바 웹페이지로, html과 java코드가 혼재되어 있다.
이 JSP를 apache-tomcat 웹서버가 컴파일(자바 코드를)해서 html로 변환한다.
- JSP 안에는 jsp 지시어(page directive)가 존재한다.
- <% %> 태그 안에서 자바코드영역(스크립트틀릿)
- out.println / out.print의 경우 내장된 객체를 통해 웹 브라우저로 출력한다.
- 따로 웹 브라우저에서 줄바꿈 처리는 되지 않으며, <br>, <p>태그를 통해 줄바꿈 처리해야한다.
out.println() 내에서는 html태그가 사용가능하나, 자바 코드 영역 안에서는 에러 발생한다.
- 출력하는 방법으로는 out.println 외에 expression을 활용하는 방법도 있다.
<%= %> 형태를 가진다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 이 부분을 jsp 지시어(page directive)라고 한다.-->
<!-- jsp는 Java Server Page로 Html과 java코드가 혼재되어 있는
자바 웹 페이지를 웹 서버가 자바코드를 컴파일하여 html로 변환한다. -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% //자바코드영역(스크립틀릿)
int sum = 0;
for(int i=1;i<=10;i++){
sum += i;
}
//out:내장객체(웹 브라우저에 출력)
out.print(sum);
%>
<% //자바코드 영역은 여러 개 존재할 수 있다.
//out.println(자바코드와 html코드 섞어서 쓸 수 있음)
for(int i=6;i>=1;i--){
out.println("<h"+i+">문자"+"</h"+i+">");
//println과 print차이 없음(줄바꿈 불가능)
}
%>
</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>
<%
int a=30;
int b=40;
out.println(a*b);
String name = "김태연";
int age = 34;
out.println("<br>"+name+"의 나이는"+age+"<br>");
//println이라고 해서 실제 웹 상에서 줄바꿈 되지 않으며
//반드시 <br>,<p>태그 등을 활용하여 줄바꿈 처리
//주의할 점은 자바태그 내에서 그냥 <br> 등 태그만 쓰면 에러
//반드시 out.println("<br>")내에서 html태그 사용
out.print("100"+"200"+"<br>");
out.print(100+200+"<br>");
out.print(100+"200"+"<br>");
%>
</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 name = "김태연";
out.print("이름 :"+name+"<br>");
int age = 34;
String hobby = "노래";
%>
<!-- 여기서 =은 출력의 의미이며, ;는 쓰지 않는다.
expression이라고 부른다. -->
<!-- out.print("이름 :" +name+"<br>")과 같은 결과 -->
이름 : <%= name %><br>
나이 : <%= age %><br>
취미 : <%= hobby %>
</body>
</html>
<간단한 퀴즈 구현>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>myFirstJSP</title>
</head>
<body>
<%
String name="홍길동";
int kor=85;
int math=98;
int eng=85;
int sum= kor+math+eng;
String avg = String.format("%.1f",sum/3.0); %>
<%
out.print("-------------------"+"<br>");
out.print("이름 : " + name+"<br>");
out.print("국어 : " + kor+"<br>");
out.print("수학 : " + math+"<br>");
%>
영어 : <%= eng %><br>
총점 : <%= sum %><br>
평균 : <%= avg %><br>
---------------------
</body>
</html>
입력 양식
1) iframe : inline frame, 웹페이지 내부에 다른 웹페이지를 표시할 경우 사용한다.
<iframe src="웹페이지 경로" width="가로" height="세로"></iframe>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>IFRAME</title>
</head>
<body>
<!-- 웹 브라우저 내 또 다른 웹 브라우저 -->
<iframe src="inner.html" width="300" height="500" name="iframe1">
</iframe>
<a href="http://m.google.com" target="iframe1">구글</a>
<a href="http://m.daum.net" target="iframe1">다음</a>
</body>
</html>
( 슬프게도 내가 하고 싶은 게 있었는데 보안 문제로 요청이 거부되서 못함. 구글은 잘 된다. )
(유투브 비디오 퍼오기를 하면, iframe 형태로 embed 할 수 있다.)
2) form 태그
<form action = "수신주소" method = "전송방식"> 전송 데이터 </form>
action - 데이터를 받을 url을 적어준다.
method - 전송방식
2-1) 전송방식(중요)
1. post 방식
http 프로토콜은 header와 body로 나눠지는데,
post방식은 body를 통해서 정보를 전송하기 때문에 정보가 주소창에 노출되지 않아서 보안에 유리
대용량 자료(중요 정보) 전송 가능하다.
2. get 방식(기본방식, 폼 태그에서 메소드 속성을 쓰지 않으면 get방식으로 전송)
데이터를 header에 붙여서 전송(주소창 - url에 표시, 데이터가 보임)
기본적인 방식으로 보안에 취약하므로, 노출이 되도 괜찮은 간단한 데이터만 전송
예) http://localhost/login.jsp?userid=kim&passwd=1234 와 같이
QueryString(쿼리스트링) 의 형태로 데이터가 전송됨.
QueryString : url에 덧붙여서 전달되는 데이터로, 물음표 뒤의 데이터들(url에는 대부분 특수문자나 한글 사용 불가)
?변수명=값&변수명=값 의 형태
jsp 프로그램에서 받을 경우 : request.getParameter("변수명") 으로 받는다.
예제)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>QueryString 예제</title>
</head>
<body>
<!-- 데이터를 전송할 때 get방식으로 전송할 때
url에 데이터를 붙여서 전송 = 쿼리스트링
헤더에 붙여서 전송하기 때문에 눈에 보인다.
url ?변수=값&변수=값 -->
당신의 이름은 <%= request.getParameter("name") %> 입니다.
나이는 <%= request.getParameter("age") %> 입니다.
<%
out.print("취미는" + request.getParameter("hobby")+"입니다." );
%>
<!-- http://localhost/web01/BrandNew/QueryString.jsp?name=kimtaeyeon&age=34 -->
<!-- % %로 자바코드 쓸 때와 (;필수)
expression %= 출력할 때 차이점 알아두기(;없음) -->
</body>
</html>
3) 입력태그 <input>
주로 폼 태그 안에서 처리
<input type="종류" value="텍스트" name="변수명">
input type 종류 : text,password,button,submit(제출),reset(초기화),radio,checkbox(여러 값 선택),image 등
3-1) 입력 박스의 크기 조절
<input type="text" name="textfield" style="text-align:center; width:200px; height:200px; letter-spacing: -5px">
text-align 텍스트 정렬
w, h 넓이, 높이
letter-spacing 텍스트 자간
3-2) HTML4, HTML5에서 input
HTML4)
<input type="button" value="라벨"> 제출 기능 없음
<input type="submit" value="라벨"> 제출 가능<input type="reset" value="라벨"> 입력값 초기화
<input type="image" value="라벨"> 제출 가능
HTML5)
<button>라벨</button> 제출 기능 있음
<button type="submit">라벨</button> 제출 기능 있음<button type="button">라벨</button> 제출 기능 없음 - 자바스크립트를 활용해야 한다.
4) 입력태그 <textarea><textarea rows="행 수" cols="열 수" name="변수명">내용</textarea>
5) 숨김 데이터 태그 <input type="hidden">유저 눈에 보이지 않게 데이터를 보내는 태그
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form>
텍스트관련<br>
<input type="text"><br>
<!--그냥 input만 써도 text로 기본 처리 -->
<input><br>
<textarea rows="5" cols="30">
정신 차립시다.
</textarea><br>
<!--textarea는 크기 자유조절 가능, 내용이 많으면 스크롤바 -->
<!-- 날짜 관련 input태그 존재 -->
날짜관련<br>
<input type="date"><br>
<input type="datetime-local"><br>
<input type="month"><br>
<input type="time"><br>
<input type="week"><br>
<input type="color"><br>
이메일<input type="email" placeholder="aaa@aaa.com" required><br>
<!-- placeholder : 미리보기, required는 필수 입력 태그-->
전화<input type="tel" pattern="(010)-\d{3,4}-\d{4}" placeholder="010-0000-0000" required><br>
<!-- pattern : 패턴 \d(decimal)(3자리나 4자리) -->
검색창<input type="search"><br>
범위조절<input type="range" min="1" max="100" step="1"><br>
숫자조절<input type="number" min="1" max="100" step="10"><br>
url<input type="url" placeholder="http://www.naver.com"><br>
체크박스(여러개)<input type="checkbox"><br>
라디오버튼<input type="radio"><br>
파일첨부<input type="file"><br>
숨겨서<input type="hidden"><br><!--화면에 표시되지 않은 채 데이터전송 -->
초기화<input type="reset"><br>
버튼<input type="button" value="버튼"><br>
제출버튼<input type="submit">
<!-- 제출버튼은 form의 모든 값들을 특정 url로 넘길 수 있다. -->
</form>
</body>
</html>
예제 주석 정리)
웹 프로그래밍에서 서버에 값을 전달할 때는 form 태그 활용
form 태그의 action 속성 : 데이터를 받을 주소(url,파일)
form 태그의 method 속성 : 데이터 전송 방식
1) get 방식 : 기본방식, 페이지 요청 용도(QueryString 활용)
2) post 방식 : 데이터 전송 용도
input 태그) name = "변수명" value="텍스트" type="종류"
라디오 버튼 : 하나만 선택 가능
체크 박스 버튼 : 여러개 선택 가능(다중선택) , checked : 기본 선택
-> 체크 박스의 경우 여러 값을 선택하기 때문에 jsp에서 데이터를 받을 때 배열을 활용
같은 그룹으로 묶기 위해서는 name의 값을 같게 해주어야 한다.
JSP)
기본 인코딩이 iso-8859-1 서유럽 언어로 되어있기 때문에 한국어 처리를 위해서 인코딩 방식을 'utf-8'로 변경해야
request.setparameter("utf-8");
- 보통은 JSP에서 값을 받아주는 변수와 html에서의 변수를 일치시키는 것을 권고
- 체크박스의 경우 값을 받아줄 때 배열로 처리하기 때문에 (여러 개의 값을 다중선택 가능하므로) request.getParameterValues("변수명")을 사용한다.
- 또한 체크박스를 통해 넘어오는 값들 중 널값이 있을 수 있으므로 널값이 있는지 조건문을 통해 확인
예제 ) 폼 태그 내 인풋 태그와 JSP를 활용해서 데이터를 전송해보자!
1) 라디오 태그 연습
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>radioform.html</title>
</head>
<body>
<!--웹 프로그래밍에서 서버에 값을 전달할 때는 form태그를 활용
action : 데이터를 받을 주소(url,파일)등
method : 보내는 방식
1) get 방식 : 페이지 요청의 용도 (쿼리스트링 활용)
2) post 방식 : 데이터 전달의 용도 -->
<form action="radioform_result.jsp"
method="post">
<!-- <input 태그에서 name = "변수명"
받는 jsp쪽에서 변수명으로 받기 때문에 지정> -->
이름 : <input type="text" name="name"><br>
나이 : <input type="text" name="age"><br>
<!-- 라디오 버튼 : 같은 그룹으로 묶기 위해서는 name의 값을 같게 해야한다.
서버에서는 value로 지정한 값을 받는다. -->
<!-- 라디오 버튼은 하나만 선택 가능 -->
성별 : <input type="radio" name="gender" value="male">남성
<input type="radio" name="gender" value="female">여성<br>
생년월일 : <input type="date" name="date"><br>
이메일 : <input type="email" name="email" required placeholder="abc@abc.com"><br>
전화번호 : <input type="tel" name="tel" required pattern="(010)-\d{3,4}-\d{4}" placeholder="010-1111-1111"><br>
파일첨부 : <input type="file" name="file"><br>
개인정보수집에 동의하십니까? : <input type="radio" name="okno" value="ok">예
<input type="radio" name="okno" value="no">아니오
<!-- 데이터 제출 버튼 -->
<input type="reset" value="취소">
<input type="submit" value="확인">
<!-- value="label" -->
</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>radioform_result.jsp</title>
</head>
<body>
<%
//java코드 영역
//기본인코딩이 iso-8859-1 서유럽언어로 되어있기 때문에
//한국어처리를 위해서 utf-8로 인코딩 방식 세팅
request.setCharacterEncoding("utf-8");
//받아주는 변수와 가져올 변수의 이름을 보통 동일하게 맞춰줌
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
int days = age * 365;
String gender = request.getParameter("gender");
//gender = male 또는 female이라고 출력될 텐데, 이 때
//gender = 남성 또는 여성으로 나오게 삼항연산자와 equals 사용
gender = gender.equals("male")? "남성" : "여성";
/* if문으로도 만들 수 있다.
if(gender.equals("male"){
gender = "남성";
}else{
gender = "여성";
}
*/
String date = request.getParameter("date");
String email = request.getParameter("email");
String tel = request.getParameter("tel");
String file = request.getParameter("file");
String okno = request.getParameter("okno").equals("no")? "아니오" : "예";
%>
이름 : <%= name %><br>
나이 : <%= age %><br>
살아온 날 : <%= days %><br>
성별 : <%= gender %><br>
생년월일 :<%= date %><br>
이메일 : <%= email %><br>
전화번호 : <%= tel %><br>
개인정보동의여부: <%= okno %><br>
</body>
</html>
2) checkbox 연습
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>checkform.html</title>
</head>
<body>
<form action="checkform_result.jsp" method = "post">
좋아하는 아이돌을 선택하세요.<br>
<!-- checkbox : 다중선택, checked : 기본선택값 -->
<!-- radio : 하나만 선택 -->
<!-- 같은 그룹으로 묶기 위해 name을 같게 하기
value를 jsp로 전달해줌. -->
<!-- 여러 값을 선택하기 때문에 배열로 처리 -->
<input type="checkbox" name="idol" value="우주소녀">우주소녀<br>
<input type="checkbox" name="idol" value="비비지">비비지<br>
<input type="checkbox" name="idol" value="브레이브걸스">브레이브걸스<br>
<input type="checkbox" name="idol" value="아이들">아이들<br>
<input type="submit" value="확인">
<input type="reset" value="취소">
</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>checkform_result.jsp</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String[] idol = request.getParameterValues("idol");
/*체크박스는 여러 개의 값이 넘어오기 때문에 배열로 처리
request.getParameterValues("배열변수명")처리해야한다.
일반적인 값 처리 : request.getParameter("변수명")*/
//아무것도 선택하지 않을 수 있기 때문에 null값을 늘 대비
if(idol == null){
out.println("아이돌을 선택하세요.");
}else{
for(int i=0;i<idol.length;i++){
out.println(idol[i]+"<br>");
}
}
%>
</body>
</html>
3) 자바스크립트 활용한 예제
'WEB' 카테고리의 다른 글
jQuery와 예제 (0) | 2022.07.04 |
---|---|
UI 설계 및 구현 (0) | 2022.06.22 |
HTML5 레이아웃 및 시맨틱 태그 (0) | 2022.06.09 |
HTML5 기본 태그 (0) | 2022.06.08 |
웹의 개요 (0) | 2022.06.07 |