Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
Tags
more
Archives
Today
Total
관리 메뉴

Full-Stack 개발자가 되려는 작은 개발자의 블로그

JSP 기초 실습1 본문

강의 정리/Spring_JSP

JSP 기초 실습1

jhjin 2020. 6. 10. 19:20

Servlet

    - 자바를 기반으로하는 웹 애플리케애션 프로그래밍 기술

    - 자바 클래스형태로 웹 애플리케이션 작성 > Servlet Class

 

[ 작성 규칙 ]

 

javax.servlet 패키지의 Servlet 인터페이스를 구현
doGet/doPost 메소드를 작성하여 웹페이지에서의 요청을 처리
HTML문서에서 전송된 내용은 doGet/doPost 메소드의 첫번째 파라미터로 들어오고, HTML 문서로의 전송은 두번째 파라키터를 이용

[ 웹 애플리케이션 ]

    - Front-end로부터 사용자의 요청(request)를 받아서 Back-end에서 처리하여 Front-end로 응답(response)하는 프로그램

 

[ 한글처리 ] 

 

입력값(request) 문자셋 지정 request.setCharacterEncoding("utf-8")
출력값(response) 문자셋 지정 respoonse.setCharacterEncoding("utf-8")
response.setContentType("text/html; charset=utf-8;");
문자셋의 지정은 메소드(doGet/doHost) 맨 처음에 수행 이 후 값을 꺼내오거나 출력하도록 수행

servlet 등록(URL과 서블릿 클래스의 연결)

    - 인터넷을 통해서 다른 컴퓨터에 접속하려면 주소를 사용하여 접속

    - IP 주소(IPv4) : 192.168.0.XXX

    - IP 주소로 기억하기 어려워 Domain을 사용 : naver.com, duam.net...

 

[ 1. web.xml 파일에 서블릿을 등록하여 연결 ]

 

[ 2. @WebServlet 애노테이션을 사용한 연결 ]

 

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>개인 정보 입력</title>
    <style>
        span{
            display: inline-block;
            width: 150px;
        }
    </style>
</head>
<body>
    <h2>개인 정보 입력</h2>
    <form action="./input" method="post">
        <fieldset>
            <span>이름</span><input type="text" name="pName" id=""><br>
            <span>아이디</span><input type="text" name="pId" id=""><br>
            <span>비밀번호 </span><input type="password" name="pPass" id=""><br>
            <span>성별 </span> 남<input type="radio" name="gender" id="" value="male"> 여<input type="radio" name="gender" id="" value="female"><br>
            <span>메일 수신 여부</span>
                공지메일<input type="checkbox" name="inot" id="">
                광고메일<input type="checkbox" name="cnot" id="">
                배송확인메일<input type="checkbox" name="dnot" id=""><br>
            <span>직업</span>
            <select name="job" id="">
                <option value="회사원">회사원</option>
                <option value="학생">학생</option>
                <option value="기타">기타</option>
            </select><br>
            <input type="submit" value="전송" name="" id="">
            <input type="reset" value="취소" name="" id="">
        </fieldset>
    </form>
</body>
</html>
package com;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/input")
public class InputServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

	protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		//한글깨짐 방지용
		req.setCharacterEncoding("utf-8");
		
		String pName=req.getParameter("pName");
		String pId=req.getParameter("pId");
		String pPass=req.getParameter("pPass");
		String gender=req.getParameter("gender");
		if(gender.equals("male")) {
			gender="남";
		}else {
			gender="여";
		}
		String inot=req.getParameter("inot");
		String cnot=req.getParameter("cnot");
		String dnot=req.getParameter("dnot");
		String job=req.getParameter("job");
		

		System.out.println("name : "+pName);
		System.out.println("id : "+pId);
		System.out.println("password : "+pPass);
		System.out.println("성별 : "+gender);
		System.out.println("직업 : "+job);
		System.out.println("공지메일동의 : "+notice(inot));
		System.out.println("광고메일동의 : "+notice(cnot));
		System.out.println("배송확인메일동의 : "+notice(dnot));
	}
	private String notice(String not) {
		if(not==null) {
			return "받지 않음";
			
		}else {
			return "받음";
		}
	}
}

JSP란

    - Java Server Page의 약자

    - HTML 문서 사이에 java코드가 삽입되는 형태.

 

[ 문자셋 지정 위치 ]  

 

contentType 내부 charset contentType은 서버에서 페이지를 처리할 때 지정하는 내용
pageEncoding 자바 컴파일러에게 알려주는 문자셋(자바 코드의 문자셋)
meta 태그의 charset HTML 코드의 문자셋. 브라우저에서 처리될 때 활용

[ JSP 문법 ]

 

    1. '<%' 로 시작하여 '%>' 로 끝나는 형태

    2. '${' 로 시작하여 '}' 로 끝나는 형태의 표현 언어(Expression Language,EL)

    3. '<jsp:forward>'나 '<c:if>'와 같은 XML 태그 형태(태그 라이브러리,JSP Tag Library,JSTL)

 

[ JSP 페이지 구성요소 ]

    1. 지시자(DIrective, 디렉티브)

    2. 스크립트 - 스크립트릿(Scriptlet), 표현식(Expression), 선언부(Declaration)

    3. 기본 객체(Implicit Object)

    4. 표준 액션 태그(Action Tag)

<%-- jsp용 주석 --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%-- 
        선언부(Declaration) 영역
        '<%!로 시작항여 %>'로 끝나는 영역.
        자바 메소드 작성 영역
     --%>
    <%!
       public int add(int a,int b){
   		return a+b;
    	}
     %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
    /*
    	여기는 자바 언어의 영역 스크리트릿(Scriptlet)
		자바 코드를 프로그래밍하는 영역
    */
    int sum=add(1,8);
%>
<!-- 표현식(Expression)  -->
sum = <%=sum %>
</body>
</html>

[ JSP 지시자 ]

    - '<%' 로 시작하여 '%>' 로 끝나는 영역.

    - 웹 서버가 JSP 페이지를 서블릿 클래스로 변환할 때 필요한 정보(또는 지시사항)을 기술하는 영역.

    지시자의 종류

        1. page 지시자

        2. include 지시자

        3. taglib 지시자

 

[ page 지시자자의 주요 속성 ]

contentType* jsp가 생성할 문서의 MIME 타입과 문자인코딩 방식을 지정
import* 자바 라이브러리(또는 사용자 작성 클래스)를 포함시키는 지시자.
buffer 출력 버퍼의 크기 지정.
autoFlush 출력 버퍼가 모두 찼을 때의 동작 지정
isThreadSafe JSP 페이지가 싱글-스레드 모드로 작동하도록 지정.
session* JSP 페이지의 세션 참여 여부 지정.
errorPage* 에러 처리 JSP 페이지의 URL 지정.
isErrorPage* 현재 페이지가 에러 처리용 페이지임을 지정.

※ MIME(Multipurpose Internet Mail Extension)

    - 클라이언트(사용자의 컴퓨터 프로그램)에 전송된 문서의 다양성을 알려주기위한 메커니즘

    - 브라우저에서 처리할 기본 동작을 지정.

    종류

        ▶ text : 인간이 읽을 수 있어야한다.

        ▶ image : 이미지를 나타낸다.

        ▶ autio : 음악, 음성

         video - 동영상

         Application - 모든 종류의 2진 데이터.

 

[ include 지시자 ]

    - 다른 jsp/html 페이지를 불러와서 현재의 페이지에 포함시키는 지시자.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>1~100까지의 합</title>
</head>
<body>
	<%
		int total=0;
		for(int cnt=1;cnt<=100;cnt++){
			total+=cnt;
		}
	%>
	1~100까지의 합계 : <%=total %><br>
    
	<table border="1">
	<% 
		for(int i=0;i<10;i++){
	%>
	<tr>
		<td><%=i %>열 1칸</td>
		<td>${ i }열 2칸</td>
	</tr>
	<%
		}
	%>
	</table>
</body>
</html>

기본 객체(Implicit Object, Implicit Variable 내장 변수)

    - JSP 페이지 안에서 선언(인스턴스 생성)하지 않아도 사용 가능한 객체/변수

[ 주요 객체 ]

request 요청 관련 처리를 위한 내장 객체 servlet의 doGet/doHost의 첫번째 파라미터와 동일
response 응답 관련 처리를 위한 내장 객체 servlet의 doGet/doHost의 두번재 파라미터와 동일
out PrintWriter 내장 객체
Application JSP 페이지가 속한 프로젝트(웹 프로그램)관련 처리를 위한 내장 객체
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.GregorianCalendar" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>현재 날짜와 시간</title>
</head>
<body>
	<%
		GregorianCalendar now=new GregorianCalendar();
		System.out.println(now);//브라우저에 출력 안됨.
		String date=String.format("%TF",now);
		String time=String.format("%TT",now);
	%>
	오늘의 날짜 : <%=date %><br>
	현재 시간 : <%=time %>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h3>오늘의 메뉴</h3>
    - 돈까스<br>
    - 육개장<br>
    - 만두전골<br>
    - 샐러드<br>
    - 차돌된장찌개<br>
    <p> 
    <%@ include file="DateTime.jsp" %>
</body>
</html>

[ request 객체 ]

    - 웹 브라우저를통한 요청 관련 객체

    주요 기능 

        ▶ 클라이언트와 서버 관련 처리

        ▶ 클라이언트가 전송한 요청 파라미터(form태그로 전송) 처리

         클라이언트가 전송한 요청 헤더 처리

         클라이언트가 전송한 쿠키 처리

         속성(Attribute) 처리(태그나 CSS의 속성과는 다름)

 

[ response 객체 ]

    - 응답 처리와 관련된 기능을 제공하는 객체

    주요 기능

         다른 페이지로 이동(sendRedirect)

 

[ application 객체 ]

    - 컨텍스트 경로, 실제 파일 경로등의 정보를 처리할 때 활용하는 객체

    - 컨텍스트 경로 = 프로젝트 이름

         '컨텍스트 경로' + '식별자'로 해당 사이트의 모든 자원에 접근 가능

    - 개발 컴퓨터와 실제 사이트가 실행되는 서버의 물리적인 경로가 다르기때문에 파일 업로드/다운로드시 실제 경로(        절대경로)를 사용해야함

 

※ 참고사항

    - UR(Uniform Resource)이란 동일한 자원을 나타내는 말로, 자원이란 웹 페이지의 문자, 이미지, 음향, 동영상등을 모        두 자원(Resource)라고 함
    - URL(Uniform Resource Locator)

        ▶ 자원의 위치를 나타내는 용어.

    - URI(Uniform Resource Identifier)

         자원을 식별하기 위한 값을 나타내는 용어

        ▶ 대체로 파일명을 나타내거나 서블릿의 @sebServlet에 등록하는 키워드를 나타냄.

            예) http://localhost/First_JSP/inputResult.jsp

                - URL : http://localhost/First_JSP/inputResult.jsp

                - URI : First_JSP/inputResult.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>application 객체</title>
</head>
<body>
	<%
		String appPath=application.getContextPath();
		String filePath=application.getRealPath("index.jsp");
	%>
	URL 경로명 : <%=appPath %><br>
	index.jsp 파일의 위치 : <%=filePath%>
</body>
</html>

※ 참고 사항

    - 파일을 저장하거나 DB에 입력하는 처리를 할 경우 결과 페이지가 새로고침될 경우 똑같은 내용이 중복으로 처리될        수 있기때문에 처리페이지와 결과페이지를 분리하여 작성합니다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
span {
	display: inline-block;
	width: 150px;
}

input {
	ㅍ
}
</style>
</head>
<body>
	<h2>개인 정보 입력</h2>
	<form action="inputResult.jsp" method="post">
		<fieldset>
			<span>이름</span><input type="text" name="pName" id=""><br>
			<span>아이디</span><input type="text" name="pId" id=""><br>
			<span>비밀번호 </span><input type="password" name="pPass" id=""><br>
			<span>성별 </span> 남<input type="radio" name="gender" id=""
				value="male"> 여<input type="radio" name="gender" id=""
				value="female"><br> <span>메일 수신 여부</span> 공지메일<input
				type="checkbox" name="inot" id=""> 광고메일<input
				type="checkbox" name="cnot" id=""> 배송확인메일<input
				type="checkbox" name="dnot" id=""><br> <span>직업</span>
			<select name="job" id="">
				<option value="회사원">회사원</option>
				<option value="학생">학생</option>
				<option value="기타">기타</option>
			</select><br> <input type="submit" value="전송" name="" id=""> <input
				type="reset" value="취소" name="" id="">
		</fieldset>
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>입력 결과</title>
</head>
<body>
	<% 
		request.setCharacterEncoding("utf-8");
	%>
	안녕하세요, <%=request.getParameter("pName") %>님<br>
	아이디 : <%=request.getParameter("pId") %><br>
	비밀번호 : <%=request.getParameter("pPass") %><br>
	직업 : <%=request.getParameter("job") %><br></p>
	
	클라이언트 IP : <%=request.getRemoteAddr() %><br>
	요청정보 길이 : <%=request.getContentLength()%><br>
	요청정보 인코딩 : <%=request.getCharacterEncoding() %><br>
	요청정보 컨텐츠타입 : <%=request.getContentType() %><br>
	요청정보 프로토콜 : <%=request.getProtocol() %><br>
	요청정보 전송방식 : <%=request.getMethod() %><br>
	요청 URL : <%=request.getRequestURL() %><br>
	컨텍스트 정보 : <%=request.getContextPath() %><br>
	서버 이름 : <%=request.getServerName() %><br>
	서버 포트 : <%=request.getServerPort()%><br>
</body>
</html>

 

Comments