개요: Model, View, Controller 약자로, 웹 어플리케이션을 비즈니스 로직, 프레젠테이션 로직, 데이터로 분리하는 디자인 패턴

+&: 프론트 컨트롤러 패턴

  • 모든 요청을 단일 handler(처리기)에서 처리하도록 하는 패턴
  • 스프링 웹 MVC 프레임워크의 DispatcherServlet(프런트 컨트롤러 역활)이 해당 역활로 구현 됨

  • 비즈니스 로직: 데이터, 즉 고객, 제품, 주문 정보 조작 사용
  • 프로젠테이션: 사용자에게 어떻게 표현되는지
  • 요청 처리 데이터는 비즈니스 로직과 프레젠테이션 파트를 함께 묶음

구성요소

  • 모델: 어플리케이션의 데이터와 비즈니스 로직을 담는 객체
  • 뷰: 사용자에게 모델의 정보(데이터)를 보여주는 역활, 비즈니스 로직을 포함하지 않으면 하나의 모델을 다양한 뷰에서 아용
  • 컨트롤러: 모델과 뷰 사이에 어떤 동작이 있을 때 조정하는 역활, 웹으로부터 받은 요청에 가장 적합한 모델을 생성하는 것을 처리하는 역활과 사용자에게 응답하는 적절한 뷰를 선택하여 해당 모델을 전달하는 역

'Development > JSP' 카테고리의 다른 글

예외 처리, 필터  (0) 2023.05.21
다국어 처리& 시큐리티  (0) 2023.05.18
세션 & 쿠키  (0) 2023.05.10
유효성 검사  (0) 2023.05.10
파일 업로드  (0) 2023.05.09

개요

  • 프로그램이 처리되는 동안 특정한 문제가 발생했을 때 처리를 중단하고 다른 처리를 하는 것
  • 기본 오류 페이지의 경우 디렉토리 구조, 버전 등 정보가 나타나 있기 때문에 웹 보안이 취약하여 쉽게 해킹 당할 수 있음. 이런 정보의 노출을 최소화 하여 해킹의 위험을 낮추는 것

error 속성 (디렉티브 태그)

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page errorPage="error.jsp" %>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>오류가 발생하였습니다.</p>
<p>예외 유형 : <%=exception.getClass().getName() %>
<p>오류 메시지: <%=exception.getMessage() %>
</body>
</html>
  • exception 내장 객체를 통해서 오류 메시지를 받아 오는 것이 가능
  • 예외처리 방법
    • web.xml 파일의 error 속성에서 오류 유형에 오류 페이지 URL 설정
    • 스크립틀린 태그의 자바 소스를 통한 예외 처리 try-catch-finally 구문

필터

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class InitParamFilter implements Filter {
	private FilterConfig filterConfig = null;

	@Override
	public void destroy() {
		Filter.super.destroy();
	}

	@Override // 필터 초기화 메소드, 아이디와 비밀번호 정보가 들어감 
	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
			throws IOException, ServletException {
		String id = request.getParameter("id");
		String passwd = request.getParameter("passwd");
		String message;
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		String param1 = filterConfig.getInitParameter("param1");
		String param2 = filterConfig.getInitParameter("param2");
		PrintWriter writer = response.getWriter();
		if (id.equals(param1) && passwd.equals(param2)) {
			message = "로그인 성공";
		} else {
			message = "로그인 실패";
		}
		writer.println(message);
		filterChain.doFilter(request, response);
	}
}
  • 클라이언트와 서버 사이 request와 response 객체를 먼저 받아 사전/사후 작업 등 공통적으로 필요한 부분 처리
  • 정적 리소스에서 클라이언트로 응답하기 전 필요한 전처리를 가능하게 함

'Development > JSP' 카테고리의 다른 글

MVC 패턴  (0) 2023.06.02
다국어 처리& 시큐리티  (0) 2023.05.18
세션 & 쿠키  (0) 2023.05.10
유효성 검사  (0) 2023.05.10
파일 업로드  (0) 2023.05.09

개요

  • 웹 브라우저를 사용하는 국가에 따라 다양한 언어 및 지역을 지원 하는 서비스
  • JSP 페이지에 JSTL foot 태그를 이용하면 언어별 페이지를 따로 만들 필요 없이 간단하게 다국어 지원이 가능

지역화

  • 환경과 특정 언어를 지역에 맞게 적합화 하는 것
  • L10n으로 표기
  • 고려사항
    • 숫자, 날짜, 시간 형식
    • 화폐 표시
    • 키보드 지원
    • 심벌, 아이콘, 색상
    • 문자열 순서와 정렬

국제화

  • 여러 국가에서 사용할 수 있도록 다국어 지원
  • i18n으로 표기
  • 국제화 처리
    • 유니코드 사용이나 기존 인코딩을 적절히 처리
    • 문자 코드가 포함되지 않도록 설계 및 개발
    • 세로쓰기/가로쓰기 등 언어의 특성을 반영하는 처리 등 지원
    • 날짜, 시간, 지역, 숫자, 리스트 정렬과 표시
    • 사용자 요청이나 설정에 따라 필요시 사용되도록 지역화 정보를 코드와 분리 해야 함

java.util.Locale 클래스

  • 특정 지리적, 정치적, 문화적 지역을 나타내는 클래스
  • 지역적 문화(언어, 날짜, 시간 등)의 정보를 담고 있는 클래스
  • request 내장 객체를 이용하여 현재 웹 브라우저에 미리 정의도니 언어나 국가 정보를 가져옴
Locale locale = request.getLocale();
locale.getDisplayLanguage(); // 한국어 (언어이름)
locale.getLanguage(); // ko (언어 코드) 
locale.getDisplayCountry(); // 대한민국 (언어 국가 이름)
locale.getCountry(); // KR (국가 코드)
  • 날자: DateFormat 클래스의 getDateTimeInstance() 메소드 이용
Locale locale = request.getLocale();
String date = DateFormat.getDateTimeInstance(DateFormat.Full, DateFormat.SHORT, locale)
.format(new Date());
out.println((new Date()).toLocaleString()); // 2023. 4. 14. 오전 11:13:09
out.println(date) // 2023년 4월 14일 금요일 오전 11:13    
  • 화폐: NumberFormat 클래스 getCurrencyInstance() 메소드 사용
Locale locale = request.getLocale();
NumberFormat nf = NumberFormat.getCurrencyInstance(locale);
NumberFormat perNf = NumberFormat.getPercentInstance(locale);
String strnf = nf.format(1000);
String strPerNf = perNf.format(0.5);
out.println("<p>" + strnf + "</p>"); // ₩1000
out.println("<p>" + strPerNf + "</p>"); // 50%

JSTL 태그를 통한 다국어 처리

  • JSTL fmt 태그와 메시지 번들을 통해 다국어 처리 가능
  • jstl-1.2.jar 파일 필요
  • <%@ taglib prefix=“fmt” uri=http://java.sun.com/jsp/jstl/fmt %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page import="java.util.Locale" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<%=response.getLocale() %>

<fmt:setLocale value="ko_KR"/>
<p><%=response.getLocale() %>

<fmt:setLocale value="en_US"/>
<p><%=response.getLocale() %>

<fmt:setLocale value="ja_JP"/>
<p><%=response.getLocale() %>
</body>
</html>

<메시지 번들>

name = \\uAD00\\uB9AC\\uC790
hello = \\uC548\\uB155\\uD558\\uC138\\uC694
  • java.util.Properties 클래스에 정의된 방법으로 메시지를 읽음
  • 알파벳이나 숫자, 라틴 문자 외의 언어를 유니코드 값으로 표현
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<fmt:setBundle basename="message" var="message"/>
<p> <fmt:message bundle="${message }" key="name"/></p>
<fmt:message bundle="${message }" key="hello" var="msg"/>
<p>${msg}</p>
</body>
</html>

 

<숫자, 통화, 퍼센트, 패턴, 날짜, 시간 formatNumber, formatDate>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p> 숫자: <fmt:formatNumber value="0402" type="number"/></p>
<p> 통화: <fmt:formatNumber value="1000" type="currency" currencySymbol="원" />
</p>
<p> 퍼센트: <fmt:formatNumber value="0.9" type="percent" /></p>
<p> 패턴(.0000): <fmt:formatNumber value="10.1" pattern=".0000"/></p>

<p> date 형식: <fmt:formatDate value="${now }" type="date"/></p>
<p> time 형식: <fmt:formatDate value="${now }" type="time"/></p>
<p> both 형식: <fmt:formatDate value="${now }" type="both"/></p>
<jsp:useBean id="now" class="java.util.Date"/>
<fmt:timeZone value="GMT+9">
<p> 한국: <fmt:formatDate value="${now }" type="both"/> </p>
</fmt:timeZone>
<fmt:timeZone value="GMT">
<p> 런던: <fmt:formatDate value="${now }" type="both"/> </p>
</fmt:timeZone>
<fmt:timeZone value="GMT-8">
<p> 뉴욕: <fmt:formatDate value="${now }" type="both"/> </p>
</fmt:timeZone>
</body>
</html>

시큐리티

  • 허가된 사용자만 특정 웹 페이지에 접근할 수 있도록 제한하는 보안 기능
  • 인증: 사용자 아이디, 비밀번호 등으로 페이지 접근 여부 확인
  • 권한: 로그인 후 특정 페이지 접근할 수 있는 접근 확인
  • 시큐리티 처리 방법
    • 선언적 시큐리티: 코드 작성 없이 web.xml 파일에 보안 구성을 작성하여 사용자 인증 수행 (직관적, 실시간 반영 x)
    • (대세) 프로그래밍적 시큐리티: request 내장 객체의 메소드를 통해 사용자 권한 부여를 처리하는 방식

'Development > JSP' 카테고리의 다른 글

MVC 패턴  (0) 2023.06.02
예외 처리, 필터  (0) 2023.05.21
세션 & 쿠키  (0) 2023.05.10
유효성 검사  (0) 2023.05.10
파일 업로드  (0) 2023.05.09

세션 개요

  • 클라이언트와 웹 서버 간 상태를 지속적으로 유지하는 방법
  • 웹 서버에 저장되어 웹 서버에서만 접근이 가능하므로 보안 유지에 유리하고 데이터를 저장하는데 한계가 없음
  • 웹 서버에 존재하는 객체 이기 때문에 브라우저 마다 하나씩 존재하게 되어 서비스를 제공받는 구분 단위가 된다.

세션 내장 객체 메소드

<index.jsp>

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html><html><head></head>
<body>
<form action="session_process.jsp" method="POST">
<p>아이디 : <input type="text" name="id"></p>
<p>비밀번호 : <input type="text" name="passwd"></p>
<p><input type="submit" value="전송"></p>
</form>
</body>
</html>

<session_process.jsp>

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html><head></head><body>
<%
	String userId = request.getParameter("id");
	String userPw = request.getParameter("passwd");
	if( userId.equals("admin") && userPw.equals("1234")){
		session.setAttribute("userId", userId);
		session.setAttribute("userPw", userPw);
		out.println("<p>세션 설정이 성공했습니다</p>");
		out.println(userId + "님 환영합니다.");
	}else {
		out.println("세션설정이 실패했습니다.");
	}
%>
</body></html>
  • 세션 생성: void setAttribute(String name, Object value)
    • 동일한 세션 속성 이름으로 세션을 생
  • 세션 정보 얻기
    • session.getAttribute(”sessionId”);
    • session.getAttributeNames();
  • 세션 정보 삭제: session.invalidate();
  • 세션 유효시간 설정: session.setMaxInactiveInterval(int time);

 

쿠키 개요

  • 클라이언트와 웹 서버 간 상태를 지속적으로 유지하는 방법
  • 세션과 다른 점: 웹 서버가 아닌 클라이언트에 저장
  • 세션과 비교하였을때 보안적으로 약하다.
  • 웹 서버 부하를 줄일 수 있다
  • 저장 크기는 4KB 이하이다.

쿠키 동작 과정

  • 생성: 웹 서버에서 먼저 생성, 생성된 쿠키는 응답 데이터에 함께 저장되어 웹 브라우저에 저장
  • 저장: 웹 브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에 보관, 종류에 따라 메모리나 파일로 저장
  • 전송: 저장된 쿠키를 요청이 있을 때마다 서버에 전송

쿠키 내장 메소드

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Cookie Setting Page</title>
</head>
<body>
    <%
        String cookieName = "TestCookie";
        String cookieValue = "Cookie Value";
        Cookie cookie = new Cookie(cookieName, cookieValue);
        cookie.setMaxAge(60*60*24); // 쿠키의 유효기간을 24시간으로 설정
        response.addCookie(cookie); // 쿠키를 클라이언트에게 보냄
    %>
    <p>Cookie has been set.</p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Cookie Reading Page</title>
</head>
<body>
    <%
        Cookie[] cookies = request.getCookies(); // 모든 쿠키를 가져옴
        if (cookies != null) {
            for (Cookie cookie : cookies) { // 모든 쿠키를 순회
                String name = cookie.getName();
                String value = cookie.getValue();
                out.println("<p>" + name + " : " + value + "</p>"); // 쿠키의 이름과 값을 출력
            }
        }
    %>
</body>
</html>
  • 쿠키 생성: Cookie cookieId = new Cookie("userId", userId); 
  • 쿠키 정보 얻기: Cookie[] cookies = request.getCookies();
  • 쿠키 삭제: cookie.setMaxAge(0);

쿠키 세션 차이

'Development > JSP' 카테고리의 다른 글

예외 처리, 필터  (0) 2023.05.21
다국어 처리& 시큐리티  (0) 2023.05.18
유효성 검사  (0) 2023.05.10
파일 업로드  (0) 2023.05.09
내장 객체(Implicit Object)  (0) 2023.04.19

개요

  • 기본 유효성 검사, 데이터 유무 확인
  • 사용자가 form에서 입력한 데이터 값이 서버로 전송되기 전에 특정 규칙에 맞게 입력되었는지 검증
  • 유효하지 않은 데이터 값을 입력 시 다시 폼 페이지로 되돌려 사용자에게 오류가 있음을 알려준다.
  • 핸들러 함수 및 정규식을 이용한다.
  • 웹 브라우저 자체에서 유효성 검사를 하기위해 자바스크립트를 이용하여 유효성 검사를 위한 코드를 작성한다.

핸들러 함수

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head></head>
<script type="text/javascript">
	function checkForm() {
		alert("이름은 " + document.frm.name.value + "입니다.");
	}
</script>
<body>
	<form name="frm">
		<p>
			이름 : <input type="text" name="name">
		</p>
		<input type="submit" value="전송" onclick="checkForm()">
	</form>
</body>
</html>
  • 이벤트가 발생했을 때 유효성 검사를 위해 매핑하는 메소드
  • input 태그 속성 값이 submit인 경우에 자바스크립트의 onclick 속성을 이용하여 핸들러 함수를 설정한다.

정규식

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Email Validation with Regular Expression</title>

<script type="text/javascript">
function validateEmail() {
    var emailInput = document.getElementById('email').value;
    var {email} = /^[\\w-]+(\\.[\\w-]+)*@([\\w-]+\\.)+[a-zA-Z]{2,7}$/;
    var regex = new RegExp(email);
    
    if (regex.test(emailInput)) {
        alert("유효한 이메일 주소입니다.");
    } else {
        alert("유효하지 않은 이메일 주소입니다.");
    }
}
</script>

</head>
<body>
    <h1>Email 정규식 테스트</h1>
    <form>
        <label for="email">Email:</label><br>
        <input type="text" id="email" name="email"><br>
        <input type="button" value="Validate" onclick="validateEmail()">
    </form>
</body>
  • 반복되는 패턴을 검출하는데 사용하는 표현식
  • 사용방법
    • 객체 초기화 방법: 입력된 표현식이 거의 바뀌지 않는 상수 형태일 때 주로 사
    • RegExp 객체 방법: 정규 표현식이 자주 변경될 때 사용

'Development > JSP' 카테고리의 다른 글

다국어 처리& 시큐리티  (0) 2023.05.18
세션 & 쿠키  (0) 2023.05.10
파일 업로드  (0) 2023.05.09
내장 객체(Implicit Object)  (0) 2023.04.19
자바 빈즈  (0) 2023.04.19

파일 업로드 개요

  • 웹 브라우저에서 서버로 파일을 전송하여 서버에 저장하는 것
  • 사용자 인터페이스 (JSP에서는 Form 태그) 필요
    • form 태그 method 속성은 반드시 POST
    • form 태그 enctype 속성은 반드시 multipart/form-data
    • form 태그 action 속성은 파일 업로드를 처리할 jsp 파일로 설정
    • 파일 업로드를 위해 input 태그 type 속성을 file로 설정
  • 오픈 라이브러리를 이용해 구현 (JDK에 파일 업로드 기능 존재 x)
    • cos.jar 또는 commonsfileupload.jar 사용
  • 백엔드 작업 중 사용자에게 진행 상황을 보여주어야 한다.

파일 업로드 (MultipartRequest)

<upload.jsp>

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head></head>
<body>
	<form action="status.jsp" enctype="multipart/form-data" method="post">
		<p>
			제목: <input type="text" name="title">
		</p>
		<p>
			파일: <input type="file" name="filename">
		</p>
		<input type="submit" value="submit">
	</form>
</body>
</html>

<status.jsp>

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%@ page import="com.oreilly.servlet.*, com.oreilly.servlet.multipart.*"%>
<%@ page import="java.io.*, java.util.*"%>
<!DOCTYPE html>
<html>
<head></head>
<body>
	<%
	MultipartRequest multi = new MultipartRequest(request, "C:\\\\upload", 5 * 1024 * 1024, "utf-8",
			new DefaultFileRenamePolicy());
	String title = multi.getParameter("title");
	out.println("<h3>" + title + "</h3");
	Enumeration files = multi.getFileNames();
	while(files.hasMoreElements()){
		String name = (String) files.nextElement();
		String fileName = multi.getFilesystemName(name);
		String original = multi.getOriginalFileName(name);
		String type = multi.getContentType(name);
		File file = multi.getFile(name);
		out.println("<p>요청 파라미터 이름: "+ name + "</p>");
		out.println("<p>실제 파일 이름: "+ original + "</p>");
		out.println("<p>저장 파일 이름: "+ fileName + "</p>");
		out.println("<p>파일 콘텐츠 유형: "+ type + "</p>");
		if(file != null) {
		out.println("<p>파일 크기: " + file.length() + 
		"</p>");
		}
	}
	%>
</body>
</html>
  • http://www.servlets.com/cos/
  • 웹 페이지에서 서버로 업로드되는 파일 자체만 다루는 클래스
  • 웹 브라우저가 전송한 데이터를 일반 데이터와 파일 데이터로 구분하여 파일 데이터에 접근
    • 일반 데이터: getParameterNames()
    • 파일 데이터: getFileNames()
  • 한글 인코딩 값을 얻기 쉽다, 서버의 파일 저장 폴더에 동일한 파일명이 있으면 파일명 자동으로 변경
  • 의존성 획득 방법: Maven, Gradle, 직접 다운로드 후 라이브러리 파일에 집어 넣기

파일 업로드 (Commons-FileUpload)

<upload.jsp>

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head></head>
<body>
	<form action="status.jsp" enctype="multipart/form-data" method="post">
		<p>
			제목: <input type="text" name="title">
		</p>
		<p>
			파일: <input type="file" name="filename">
		</p>
		<input type="submit" value="submit">
	</form>
</body>
</html>

<status.jsp>

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="java.io.*, java.util.*"%>

<!DOCTYPE html>
<html>
<head></head>
<body>
	<%
	String fileUploadPath = "c:\\\\upload";
	DiskFileItemFactory factory = new DiskFileItemFactory();
	ServletFileUpload upload = new ServletFileUpload(factory);
	List items = null;
	try {
	    items = upload.parseRequest(request);
	} catch (FileUploadException e) {
	    e.printStackTrace();
	}
	Iterator params = items.iterator();
	while (params.hasNext()) {
		FileItem fileItem = (FileItem) params.next();
		if (!fileItem.isFormField()) {
			String fileName = fileItem.getName();
			fileName = fileName.substring(fileName.lastIndexOf("\\\\\\\\") + 1);
			File file = new File(fileUploadPath, fileName);
			try {
			    fileItem.write(file);
			} catch (Exception e) {
			    e.printStackTrace();
			}
			out.println("<p>File name: " + fileName + "</p>");
			out.println("<p>File size: " + fileItem.getSize() + " bytes</p>");
			out.println("<p>File type: " + fileItem.getContentType() + "</p>");
		}
	}
	%>
</body>
</html>

'Development > JSP' 카테고리의 다른 글

세션 & 쿠키  (0) 2023.05.10
유효성 검사  (0) 2023.05.10
내장 객체(Implicit Object)  (0) 2023.04.19
자바 빈즈  (0) 2023.04.19
액션 태그  (0) 2023.04.19
  • JSP 페이지에서 자동으로 생성되고 사용할 수 있는 객체들을 말함

request

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	<form method="post" action="proc.jsp">
		<label for="id">아이디:</label>
		<input type="text" id="id" name="id"><br>

		<label for="passwd">비밀번호:</label>
		<input type="password" id="passwd" name="passwd"><br>

		<input type="submit" value="로그인">
	</form>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<form>
<%
	request.setCharacterEncoding("UTF-8");
	String userId = request.getParameter("id");
	String password = request.getParameter("passwd");
%>

	<p> 아이디: <%=userId %></p>
	<p> 비밀번호: <%=password %></p>
	
</form>
</body>
</html>
  • 사용자 요구 사항을 얻어내는 것이 목적 ex: form 태그를 통해 들어오는 id, password 정보
  • JSP 컨테이너는 웹 브라우저에서 서버로 전달되는 정보를 처리하기 위해 request안에 저장된 정보를 가져오는 메소드들을 가지고 있
    • request.setCharacterEncoding("UTF-8");
    • request.getHeader("name")
    • request.getCookies()
    • request.getParameter("id");

  • 서버의 JSP페이지로 전달하는 정보를 저장하는 객체

'Development > JSP' 카테고리의 다른 글

유효성 검사  (0) 2023.05.10
파일 업로드  (0) 2023.05.09
자바 빈즈  (0) 2023.04.19
액션 태그  (0) 2023.04.19
서블릿과 JSP  (0) 2023.04.19

동적 콘텐츠 개발을 위해 자바 코드를 사용하여 자바 클래스 로직을 작성시
좋은 객체 지향의 설계 SOLID 원칙의 단일 책임 원칙(SRP) 따라
JSP 페이지 화면을 표현하기 위한 계산식이나 자료 처리를 담당하는
자바 코드를 따로 분리해서 작성하는 것이 바람직하다.
이는 통상적으로 자바 빈즈 개념을 사용하는데 
JSP에서는 자바 빈즈 액션 태그를 사용해 구현 하는 것이 가능하다.  

 

 

자바 빈즈 액션 태그 권장 사양 (필수가 아니다)

package action.example;

public class Person {
	private String id="1971343";
	private String name="임준식";
	
	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
  • 클래스는 java.io.Serializable 인터페이스를 구현해야 한다.
  • 인수가 없는 기본 생성자가 있어야 한다.
  • 모든 멤버 변수인 프로퍼티는 private 접근 지정자로 설정해야 한다.
  • 모든 멤버 변수인 프로퍼티는 getter/setter() 메소드가 존재해야 한다.

<자바 빈즈 액션 태그 사용> useBean

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	<jsp:useBean id="person" class="action.example.Person"
	scope="request"></jsp:useBean>
	<jsp:setProperty property="id" name="person" value="20000212"/>
	<jsp:setProperty property="name" name="person" value="이름"/>
	<p>아이디: <jsp:getProperty property="id" name="person"/></p>
	<p>이름: <jsp:getProperty property="name" name="person"/></p>
	
</body>
</html>
  • id: 자바빈즈 식별 이름
  • class: 패키지 이름을 포함한 자바빈즈 이름, 자바빈즈는 인수가 없는 기존 생성자가 있어야 하며 추상 클래스로는 사용이 불가능 하다.
  • scope: 자바빈즈가 저장되는 영역을 설정, page(기본 값), request, session, application 하나 값 사용
  • <jsp:setProperty property=" " name=" " value=" "/>: 자바 빈즈에 데이터 저장
    • property: 자바 빈즈 프로퍼티 이름 
    • name: 자바 빈즈 식별을 위한 이름
    • value: 변경할 자바빈즈 프로퍼티의 값
  • <jsp:getProperty property="name" name="person"/>: 자바 빈즈에서 데이터 가져오기
    • property: 자바 빈즈 프로퍼티 이름
    • name: 자바 빈즈 식별을 위한 이름

 

'Development > JSP' 카테고리의 다른 글

파일 업로드  (0) 2023.05.09
내장 객체(Implicit Object)  (0) 2023.04.19
액션 태그  (0) 2023.04.19
서블릿과 JSP  (0) 2023.04.19
폼 (form) 태그  (0) 2023.04.17

+ Recent posts