ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [jsp] 폼 태그
    jsp 2023. 4. 25. 17:33

    폼?

    사용자가 웹 브라우저를 통해 입력한 모든 데이터를 한 번에 웹 서버로 전송하는 양식이다.

    전송한 데이터는 웹 서버가 처리하고, 처리 결과에 따라 다른 웹 페이지를 보여준다.

    폼은 사용자와 웹 서버가 상호작용하는 중요한 기술이다. 사용자의 요구사항을 파악할 때 가장 많이 사용하는 필수적 요소인것이다.

     

    폼을 구성하는 태그

    form 폼을 정의하는 태그로 최상위 태그
    input 사용자가 입력할 수 있는 태그
    select 항목을 선택할 수 있는 태그
    textarea  여러 줄을 입력할 수 있는 태그

     

    form 태그는 단독으로 쓰이지 않고, 사용자가 다양한 정보를 입력하는 양식을 포함하는 최상위 태그로 형식은 다음과 같다.

    form 태그의 속성을 이용하여 폼 데이터를 어디로 보낼지, 어떤 방식으로 보낼지 결정할 수 있다. 모든 속성은 필수가 아니라 선택이다.

    <form action="url" method="get" name="login" accept-charset="utf-8">
    	<input type="text" name="id">
    </form>
    속성 설명
    action 폼 데이터를 받아 처리하는 웹 페이지의 URL 설정
    method 폼 데이터가 전송되는 HTTP방식설정 (기본값 : GET 이므로 생략가능)
    name 폼을 식별하기 위한 이름설정
    target 폼 처리 결과의 응답을 실행할 프레임 설정
    enctype 폼을 전송하는 콘텐츠 MIME 유형 설정
    accept-charset 폼 전송에 사용할 문자 인코딩 설정

     

    form 태그의 method 속성

    웹 브라우저에서 웹 서버로 정보를 전송하는 방법으로 . GET, POST 방식이있다.

    GET방식은 폼데이터를 HTTP패킷의 헤더를 통해 전달한다 . URL 끝에 붙여서 전송하므로 웹 브라우저의 주소 표시줄에 그대로 나타난다. 구분자로 ?를 사용하여 URL 뒤에 name=value와 같은 요청 파라미터 형식으로 데이터를 전달한다. 여러개의 파라미터를 전송할 경우 &로 구분한다.

    POST방식은 header로 전달하는게 아니라 body로 전달하기 때문에 웹 브라우저의 주소 표시줄에 데이터정보가 나타나지않는다.

     

    GET방식은 데이터가 외부에 노출되어, 보안에 취약하다. 따라서 개인정보등을 보호해야 할때는 POST방식을 사용해야 한다. 또한 GET방식은 지정된 리소스에서 데이터를 요청할때 즉 읽을때 사용한다. 반면 POST 방식은 지정된 리소스에서 데이터를 처리할때(쓰기,수정,삭제 등)사용한다.

     

    input 태그 

    input 태그는 사용자가 텍스트 입력이나 선택 등을 다양하게 할 수 있는 공간을 만드는 태그이다. 종료태그없이 단독 사용 가능

    <input type="text" name="hi">

    다음은 아이디와 비밀번호를 입력받을 수 있도록 input 태그를 설정하는 예이다. 

    text : 일반 텍스트 입력 받음 / password : 입력된 글자 가림

    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!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=EUC-KR">
    <title>Insert title here</title>
    </head>
    <body>
    	<form action="#" method="post">
    		<p> 아이디 : <input type="text" name="id">
    		<p> 비밀번호 : <input type="password" name="passwd">
    		<p> <input type="submit" value="전송">
    	</form>
    </body>
    </html>
    form태그와 input태그로 회원가입 양식만들기
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!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=EUC-KR">
    <title>Insert title here</title>
    </head>
    <body>
    	<h3>회원 가입</h3>
    	<form action='#' name ="member" method="post">
    		<p> 아이디 : <input type="text" name="id"> <input type="button" value="아이디 중복 검사">
    		<p> 비밀번호 : <input type="password" name="passwd">
    		<p> 이름 : <input type="text" name="name">
    		<p> 연락처 : <input type="text" maxlength="4" size="4" name="phone1">-
    		<input type="text" maxlength="4" size="4" name="phone2">-
    		<input type ="text" maxlength="4" size="4" name="phon3">
    		<p> 성별 : <input type="radio" name="sex" value="남성" checked>남성
    		<%-- checked는 초기값을 설정함 --%>
    				  <input type="radio" name="sex" value="여성">여성
    				  
    				  
    		<p> 취미 : 독서<input type="checkbox" name="hobby1" checked>
    			 	 독서<input type="checkbox" name="hobby2">
    			  	독서<input type="checkbox" name="hobby3">
    			  	
    		<p>		  <input type="submit" value="가입하기">
    				  <input type="reset" value="다시쓰기">
    				
    		
    	</form>
    </body>
    </html>

    select 태그

    select 태그는 여러 개의 항목이 나타나는 목록 상자에서 항목을 선택하는 태그이다.

    시작 태그와 종료 태그가 있으며, 리스트 박스에 항목을 추가하기 위해 반드시 option 태그를 포함한다.

    <select name="city" size="3>
    	<option value="서울시">서울특별시</option>
        <option value="인천시">인천광역시</option>
        <option value="충청도">충청도</option>
    </select>

    select태그의 속성
    option태그의 속성

    select 태그로 이전에 input으로 만들었던 회원가입 양식의 연락처를 조금 수정해보겠다.
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!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=EUC-KR">
    <title>Insert title here</title>
    </head>
    <body>
    	<h3>회원 가입</h3>
    	<form action='#' name ="member" method="post">
    		<p> 아이디 : <input type="text" name="id"> <input type="button" value="아이디 중복 검사">
    		<p> 비밀번호 : <input type="password" name="passwd">
    		<p> 이름 : <input type="text" name="name">
    		<p> 연락처 : <select name="phone1">
    					<option value="010">010</option>
    					<option value="011">011</option>
    					<option value="013">013</option>
    					</select>
    		<input type="text" maxlength="4" size="4" name="phone1">-
    		<input type="text" maxlength="4" size="4" name="phone2">-
    		<input type ="text" maxlength="4" size="4" name="phon3">
    		<p> 성별 : <input type="radio" name="sex" value="남성" checked>남성
    		<%-- checked는 초기값을 설정함 --%>
    				  <input type="radio" name="sex" value="여성">여성
    				  
    				  
    		<p> 취미 : 독서<input type="checkbox" name="hobby1" checked>
    			 	 독서<input type="checkbox" name="hobby2">
    			  	독서<input type="checkbox" name="hobby3">
    			  	
    		<p>		  <input type="submit" value="가입하기">
    				  <input type="reset" value="다시쓰기">
    				
    		
    	</form>
    </body>
    </html>

    textarea 태그

    여러 줄의 텍스트를 입력할 수 있는 태그이다. 너비와 높이를 지정하기 위해 col와 row 속성을 설정한다.

    여는 태그와 닫는 태그가 있다.

    입력 폼안에 사용된 태그와 띄어쓰기가 그대로 출력된다는 특징이있다.

    <textarea cols="너비값" rows="높이 값">
    
    </textarea>

    이전에 작성한 회원가입 양식에 가입 인사 textarea를 추가해보자
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!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=EUC-KR">
    <title>Insert title here</title>
    </head>
    <body>
    	<h3>회원 가입</h3>
    	<form action='#' name ="member" method="post">
    		<p> 아이디 : <input type="text" name="id"> <input type="button" value="아이디 중복 검사">
    		<p> 비밀번호 : <input type="password" name="passwd">
    		<p> 이름 : <input type="text" name="name">
    		<p> 연락처 : <select name="phone1">
    					<option value="010">010</option>
    					<option value="011">011</option>
    					<option value="013">013</option>
    					</select>
    		<input type="text" maxlength="4" size="4" name="phone1">-
    		<input type="text" maxlength="4" size="4" name="phone2">-
    		<input type ="text" maxlength="4" size="4" name="phon3">
    		<p> 성별 : <input type="radio" name="sex" value="남성" checked>남성
    		<%-- checked는 초기값을 설정함 --%>
    				  <input type="radio" name="sex" value="여성">여성
    				  
    				  
    		<p> 취미 : 독서<input type="checkbox" name="hobby1" checked>
    			 	 독서<input type="checkbox" name="hobby2">
    			  	독서<input type="checkbox" name="hobby3">
    			  	
    		<p> <textarea name="comment" cols="30" rows="3" placeholder="가입 인사를 입력하세요"></textarea>
    		<!-- placeholder:기본값 아무것도 입력하지않았을때 표시할 문구, rows:높이 -->
    		<p>		  <input type="submit" value="가입하기">
    				  <input type="reset" value="다시쓰기">
    				
    		
    	</form>
    </body>
    </html>

    폼 데이터 처리하기

    jsp에서 가장 많이 사용하는 기능중 하나는 사용자가 웹 브라우저의 폼페이지에 입력한 데이터를 -> 서버로 전달하여 이를 처리하는것이다.

    이렇게 폼 데이터를 처리함으로써, 표현문이나 스클립틀릿 태그에 request내장 객체를 이용하여 폼 페이지에 전달된 값을 얻을 수 있다.

     

    요청 파라미터 값 받기

    request 내장객체는 웹 브라우저가 서버로 보낸 요청에 대한 다양한 정보를 담고 있다.

    getParameter()메소드를 이용하여 요청 파라미터 값을 얻을 수 있다.

    String a = request.getParameter(요청 파라미터 이름);
    다음은 체크박스에 어떤 박스를 체크했는지, 서버에서 getParamter를 이용해 확인하는 방법니다.

    index.jsp : check박스에 데이터를 저장하고 -> 전송 버튼 누르면 -> process.jsp에게 정보 전달

    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!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=EUC-KR">
    <title>Insert title here</title>
    </head>
    <body>
    	<form action="process.jsp" method="post">
    		<p> 독서<input type="checkbox" name="reading">
    		<p> 운동<input type="checkbox" name="execise">
            <p> 영화<input type="checkbox" name="movie">
    		<p> <input type="submit" value="전송">
    	</form>
    </body>
    </html>

    process.jsp : index.jsp의 폼 데이터로 부터 받은 데이터 정보를 처리하여 웹 브라우저에게 보여주는 jsp

    위는 표현문으로 바로 출력하는 예시, 아래는 스클립틀릿 태그로 데이터를 받아서 표현문으로 출력하는 방법이다.

    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!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=EUC-KR">
    <title>Insert title here</title>
    </head>
    <body>
    
    	<p> 독서 : <%=request.getParamter("reading")%>
        <p> 운동 : <%=request.getParameter("exercise")%>
        <p> 영화 : <%=request.getParmaeter("movie")%>
        
        <%
        	 request.setCharacterEncoding("utf-8")l
             
             String hobby1 = request.getParameter("hobby1")
             //check한경우 on , 안한경우 null 출력
         %>
         <%= hobby1%>
    </body>
    </html>

    요청 파라미터의 전체 값 받는 법

    입력데이터가 다수거나 양식이 다양한 경우, 일괄 처리 메소드를 사용하면 웹 브라우저에서 서버로 전송되는 요청 파라미터를 설정하지 않아도 모든 값을 전달 받을 수 있다.

    다음 예제는 getParameterNames()를 통해 모든 파라미터이름을 가져와 Enumeration 자료형으로 저장해주고, hasMoreElements()를 이용해 남은 리스트 요소가 없을때까지 반복하며, nextElement()를 통해 하나씩 요소를 가져와서 name에 저장한다. 파라미터 name에 따른 value값은 getParameter를 통해 가져와준다.
    <%
    
    	Enumeration paramnames = request.getParameterNames();
        while(paramnames.hasMoreElements()){
         	String name = (String) paramnames.nextElements();
            out.print(name);
            String paramValue = request.getParameter(name);
            out.println(paramValue);
            
     %>

     

     

     

    참고

    https://velog.io/@ansalstmd/JSP6.-%ED%8F%BC%ED%83%9C%EA%B7%B8

     

    JSP(6. 폼태그)

    사용자가 웹 브라우저를 통해 입력된 모든 데이터를 한번에 웹 서버로 전송하는 양식전송한 데이터는 웹 서버가 처리하고 처리 결과에 따라 다른 웹페이지를 보여줌사용자와 웹 애플리케이션

    velog.io


    [웹 쇼핑몰] 상품등록 페이지 만들기

    addProduct.jsp - 상품 등록을 위한 폼 페이지 , 폼 작성 내용은 processAddProduct.jsp페이지로 전달

    <%@ page contentType="text/html; charset=utf-8"%>
    <html>
    <head>
    <link rel="stylesheet" 	href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
    <title>상품 등록</title>
    </head>
    <body>
    	<jsp:include page="menu.jsp" />	
    	<div class="jumbotron">
    		<div class="container">
    			<h1 class="display-3">상품 등록</h1>
    		</div>
    	</div>
    	<div class="container">
    		<form name="newProduct" action="./processAddProduct.jsp" class="form-horizontal" method="post">
    			<div class="form-group row">
    				<label class="col-sm-2">상품 코드</label>
    				<div class="col-sm-3">
    					<input type="text" name="productId" class="form-control" >
    				</div>
    			</div>
    			<div class="form-group row">
    				<label class="col-sm-2">상품명</label>
    				<div class="col-sm-3">
    					<input type="text" name="name" class="form-control" >
    				</div>
    			</div>
    			<div class="form-group row">
    				<label class="col-sm-2">가격</label>
    				<div class="col-sm-3">
    					<input type="text" name="unitPrice" class="form-control" >
    				</div>
    			</div>
    			<div class="form-group row">
    				<label class="col-sm-2">상세 정보</label>
    				<div class="col-sm-5">
    					<textarea name="description" cols="50" rows="2"
    						class="form-control"></textarea>
    				</div>
    			</div>
    			<div class="form-group row">
    				<label class="col-sm-2">제조사</label>
    				<div class="col-sm-3">
    					<input type="text" name="manufacturer" class="form-control">
    				</div>
    			</div>
    			<div class="form-group row">
    				<label class="col-sm-2">분류</label>
    				<div class="col-sm-3">
    					<input type="text" name="category" class="form-control" >
    				</div>
    			</div>
    			<div class="form-group row">
    				<label class="col-sm-2">재고 수</label>
    				<div class="col-sm-3">
    					<input type="text" name="unitsInStock" class="form-control" >
    				</div>
    			</div>
    			<div class="form-group row">
    				<label class="col-sm-2">상태</label>
    				<div class="col-sm-5">
    					<input type="radio" name="condition" value="New " > 신규 제품 
    					<input type="radio" name="condition" value="Old" > 중고 제품 
    					<input type="radio" name="condition" value="Refurbished" > 재생 제품
    				</div>
    			</div>
    			<div class="form-group row">
    				<div class="col-sm-offset-2 col-sm-10 ">
    					<input type="submit" class="btn btn-primary" value="등록" >
    				</div>
    			</div>
    		</form>
    	</div>
    </body>
    </html>

    ProductRepository.java 수정 - 신규 상품 데이터를 저장하는 메소드 만들기

    private static ProductRepository instance = new ProductRepository();
    	
    	public static ProductRepository getInstance() {
    		return instance;
    	}
    	public void addProduct(Product product) {
    		listOfProducts.add(product);
    	}

    processAddProduct.jsp - 상품 등록 처리 페이지, listOfProduct에 새로운 Product 객체를 추가하여 products.jsp로 보낸다

    <%@ page contentType="text/html; charset=utf-8"%>
    <%@ page import="dto.Product"%>
    <%@ page import="dao.ProductRepository"%>
    
    <%
    	request.setCharacterEncoding("UTF-8");
    
    	String productId = request.getParameter("productId");
    	String name = request.getParameter("name");
    	String unitPrice = request.getParameter("unitPrice");
    	String description = request.getParameter("description");
    	String manufacturer = request.getParameter("manufacturer");
    	String category = request.getParameter("category");
    	String unitsInStock = request.getParameter("unitsInStock");
    	String condition = request.getParameter("condition");
    
    	Integer price;
    
    	if (unitPrice.isEmpty())
    		price = 0;
    	else
    		price = Integer.valueOf(unitPrice);
    
    	long stock;
    
    	if (unitsInStock.isEmpty())
    		stock = 0;
    	else
    		stock = Long.valueOf(unitsInStock);
    
    	ProductRepository dao = ProductRepository.getInstance();
    
    	Product newProduct = new Product();
    	newProduct.setProductId(productId);
    	newProduct.setPname(name);
    	newProduct.setUnitPrice(price);
    	newProduct.setDescription(description);
    	newProduct.setManufacturer(manufacturer);
    	newProduct.setCategory(category);
    	newProduct.setUnitsInStock(stock);
    	newProduct.setCondition(condition);
    
    	dao.addProduct(newProduct);
    
    	response.sendRedirect("products.jsp");
    %>

    'jsp' 카테고리의 다른 글

    HTTP,쿠키,세션  (1) 2023.05.30
    [jsp] 쿠키생성, 쿠키 정보 얻기, 쿠키 삭제  (0) 2023.05.24
    [jsp] 유효성 검사  (3) 2023.04.25
    [jsp] 파일 업로드  (0) 2023.04.25
    [jsp] 스크립트 태그  (0) 2023.03.19

    댓글

lee-ding