• Home
  • About
    • ming photo

      ming

      studying

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Archive
    • All Posts
    • All Tags
    • All categories
  • categories
    • HTML+CSS+JavaScript
    • JAVA
    • Algorithm
    • DB
    • JSP
    • 정보처리기사
    • Spring
    • Thymeleaf
    • 기술면접
  • Projects

JSP - JSP 2.3 & Servlet3.1 - 내장 객체와 액션 태그, 자바빈 : 인자전송

22 Mar 2021

🔷 JSP 2.3 & Servlet3.1 - 내장 객체와 액션 태그, 자바빈 : 인자전송

✔ 내장 객체

- 웹 컨테이너가 JSP 페이지를 서블릿 클래스로 변환하면서 사용자의 요청에 맞는 응답 페이지를 
생성하기위해 사용되는 javax.servlet 패키지 내부에 있는 고정된 이름의 객체

💡 내장 객체의 종류 내장객체종류

✔ request 객체

- 서블릿에게 사용자의 요청에 관련된 데이터들을 보내주는 역할을 하는 객체

💡 request(요청) 파라미터와 관련된 메소드 request 파라미터와 관련된 메소드

  • 예제(form)
      <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
      <!DOCTYPE html>
      <html lang="ko">
      <head>
      <meta charset="UTF-8">
      <title>Request Test</title>
      <style>
      //  h1태그 영역과 아이디 속성 값이 commandCell인 영역의 내용들을 가운데 정렬해서 출력 
    
      h1,#commandCell{
      text-align: center;
      }
    
      // table 태그 영역을 화면의 가운데 정렬하고 width 속성값과 border속성 값을 설정
    
      table{
          margin : auto;
          width: 400px;
          border : 1px solid red;
          }
      </style>
      </head>
      <body>
          <h1>Request 예제입니다.</h1>
          <form action="requestTest1.jsp" method="post">
          <table>
              <tr>
                  <td><lable for ="name">이름</lable></td>
                  <td><input type="text" name="name" id="name"></td>
              </tr>
              <tr>
                  <td><lable for ="gender">성별</lable></td>
                  <td>남<input type="radio" name="gender" value="male" id="gender">
                      여<input type="radio" name="gender" value="female">
                  </td>
              </tr>
              <tr>
                  <td><label for="hobby">취미</label></td>
                  <td>독서<input type="checkbox" name="hobby" value="독서" id="hobby">
                      게임<input type="checkbox" name="hobby" value="게임" id="hobby">
                      TV시청<input type="checkbox" name="hobby" value="TV시청" id="hobby">
                      축구<input type="checkbox" name="hobby" value="축구" id="hobby">
                      기타<input type="checkbox" name="hobby" value="기타" id="hobby">
                  </td>
              </tr>
              <tr>
                  <td colspan="2" id="commandCell"><input type="submit" value="전송"></td>
              </tr>
          </table>
            
          </form>
    
      </body>
      </html>
    

    ▶ 출력화면 req예제1

    🎈 위 화면에서 이름을 입력하고 성별, 취미를 선택한 후 버튼을 누르면 소스의 form 태그에서 지정된 requestTest1.jsp 페이지로 요청이 전송된다전송>

  • 코드(test)
      <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
      // 파라미터의 한글 처리를 위해 request 객체의 문자셋 인코딩 방식을 UTF-8 로 지정 
      <%request.setCharacterEncoding("UTF-8"); %>
      <!DOCTYPE html>
      <html lang="ko">
      <head>
      <meta charset="UTF-8">
      <title>Request Test</title>
      <style>
      h1 {
          text-align:center;
      }
      table{
          margin : auto;
          width: 400px;
          border : 1px solid red;
          }
      </style>
      </head>
      <body>
          <h1>Request 예제입니다.</h1>
          <table>
              <tr>
                  <td>이름</td>
                  <%-- name이란 이름을 가진 파라미터 값을 얻어와 표현식으로 출력 --%>
                  <td><%=request.getParameter("name") %></td>
              </tr>
              <tr>
                  <td>성별</td>
                  <td>
                      // gender란 이름을 가진 파라미터 값이 male일 경우 성별을 남자,female경우 여자로 출력 
                      <%if(request.getParameter("gender").equals("male")) 
                      {<%남자<%}else {<%여자%>} %>
                  </td>
              </tr>
              <tr>
                  // hobby란 이름을 가진 차라미터는 여러개의 값을 가질 수 있기 때문에 getParameterValues 메소드를 사용하여
                   //   String 배열로 값을 가져온 뒤 for문을 이용해 String 배열에 저장된 값을 모두 출력 
                  <td>취미</td>
                  <td>
                      <%
                      String[] hobby=request.getParameterValues("hobby");
                      for(int i=0; i<hobby.length;i++){
                      %>
                      <%=hobby[i] %> &nbsp;&nbsp;	
                      <%} %>
                  </td>
              </tr>
          </table>
      </body>
      </html>
    

▶ 출력화면 req예제1-1

🎈 전송받은 파라미터들을 내장 객체인 request를 통해서 얻어내 화면에 출력한다

🖋 request 연습

  • html 작성
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>Insert title here</title>
      </head>
      <body>
          <!-- form의 이름은 frm이고 action1.jsp파일의 액션을 수행하고 get타입으로 인자를 받는다 -->
          <form name="frm" action="action1.jsp" method="get">
              - 아이디 : <input type="text" id="id" name="id" /><br> 
              - 패스워드 : <input type="password" id="pw" name="pw" /><br> 
              - 이름 : <input type="text" id="name" name="name" /><br> 
              - 주소 : <input type="text" id="address" name="address" /><br>
              - 취미 : 스포츠<input type="checkbox" id="hobby1" name="hobby" value="스포츠"/>&nbsp;
                      독서<input type="checkbox" id="hobby2" name="hobby" value="독서" />&nbsp;
                      영화감상<input type="checkbox" id="hobby3" name="hobby" value="영화감상" />&nbsp;
                      요리<input type="checkbox" id="hobby4" name="hobby" value="요리"/><br>
              <input type="submit" value="전송">
                
          </form>
      </body>
      </html>
    

▶ 출력화면 reqhtml

  • jsp 작성
      <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
      // Map,Set,Iterator import 
      <%@page import="java.util.Map , java.util.Set, java.util.Iterator" %>
      <!DOCTYPE html>
      <html lang="ko">
      <head>
      <meta charset="UTF-8">
      <title>action</title>
      </head>
      <body>
      <%
          // UTF-8로 무조건 인코딩
          request.setCharacterEncoding("UTF-8");
    
          // 1) id : 파라미터 id 를 얻어 값이 null이면 없음출력하고 값이 있으면 id를 출력한다
          String id = request.getParameter("id") == null ? "없음" : request.getParameter("id");
          String pw = request.getParameter("pw") == null ? "없음" : request.getParameter("pw");
          String name = request.getParameter("name") == null ? "없음" : request.getParameter("name");
          String address = request.getParameter("address") == null ? "없음" : request.getParameter("address");
          // 2) out JSP 기본 객체 활용 (인자 전송)
          //out.println("id : " + id + "<br>");
          //out.println("pw : " + pw + "<br>");
          //out.println("name : " + name + "<br>");
          //out.println("address : " + address );
               
          // 3) 표현식(expression) 활용  (인자 전송)        
          // id : <%=id %><br>
          // pw : <%=pw %><br>
          // name : <%=name %><br>
          // address : <%=address %>
            
          // 4) EL(Expressional Language) 기본객체(param)활용 (인자 전송)
          // id : ${param.id}<br>
          // pw : ${param.pw}<br>
          // name : ${param.name}<br>
          // address : ${param.address}<br>
    
    
          // hobby 값 저장할 배열 생성
          // map은 key와 value로 구성되어있다
          Map<String, String[]> map = request.getParameterMap();
          // set은 저장순서가 고정되어있지 않다
          // keySet() : 모든 key를 set객체에 담아서 리턴한다
          Set<String> keys = map.keySet();
          // Iterator : 반복자 => 순서가 없는 것에 순서를 부여하는 클래스
          //  반복자로 key를 하나씩 얻어서 get() 메소드로 값을 얻는다
          Iterator<String> it = keys.iterator();
          while(it.hasNext()){
              String key = it.next(); // key를 뽑아온다
              String values[] = map.get(key);// key의 값을 리턴하는 배열 values
                
              if(values.length == 1){ // 배열의 값이 1이라면
                    
                  // Key 와 배열의 0번째 있는 값을 출력한다 
                  out.println(key + " = " + values[0] + "<br>");
                    
              }else{ // 1이 아니라면
                    
                  // key 만 출력한다
                  out.print(key + " = ");
                    
              // s : values에 들어있는 것과 같은 타입으로 선언
              // values 의 길이만큼 반복하면서
                  for(String s : values) { 
                        
                      // s에 배열의 값을 대입하여 출력한다
                      out.print(s + " ") ; 
                  }
                  // 한줄 띄기
              } out.print("<br>");
          }
      %>
      </body>
      </html>
    

▶ 출력화면(parameter 입력) req입력

▶ 출력화면(정보 출력) reqaction

🖋 Enumeration 사용 1)

  • 코드
      <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
      <%@ page import = "java.util.Enumeration" %>
      <!DOCTYPE html>
      <html lang="ko">
      <head>
      <meta charset="UTF-8">
      <title>action2</title>
      </head>
      <body>
    
      <%
          // Enumeration : 리턴타입 => 각각의 객체들을 한번에 하나씩 처리할 수 있는 메소드 제공
          // getParameterNames() 메소드 : 요청에 포함된 모든 파라미터 이름을 Enumeration 객체로 리턴한다
            
          Enumeration<String> keys = request.getParameterNames();
    
          // hasMoreElements() : 커서 바로 앞에 데이터가 들어있는지 체크
          while(keys.hasMoreElements()) {
              // nextElement() : 현재 커서가 가리키고 있는 데이터(객체)를 리턴해주고 커서의 위치를 다음칸으로 옮긴다
              String key = keys.nextElement();
                
              if(key.equals("hobby")){ // key의 값이 hobby와 같으면
                    
                  out.print("hobby = "); // hobby = 을 출력한다
                  // s : values에 들어 있는것고 같은 타입으로 선언
                  // 배열에 hobby가 입력된것만큼 반복하면서
                  // hobby 이름으로 지정된 파라미터의 모든 값을 String 배열로 리턴한다
                  for(String s : request.getParameterValues("hobby")){
                        
                      // s에 입력받은 배열의 값을 대입하여 출력한다
                      out.print(s + " ");
                  }
                  // 한줄 띄기
                  out.print("<br>");
              }else { // key의 값이 hobby와 같지않다면
                    
                  // key 와 입력받은 key값을 출력한다
                  out.print(key + " = " + request.getParameter(key) + "<br>" );
                    
              }
          }
      %>
    
      </body>
      </html>
    

▶ 출력화면(정보 출력) enumeration

🖋 Enumeration 사용 2)

  • 코드
      <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
      <%@ page import = "java.util.Enumeration" %>
      <!DOCTYPE html>
      <html lang="ko">
      <head>
      <meta charset="UTF-8">
      <title>action3</title>
      </head>
      <body>
    
      <%
          // Enumeration : 리턴타입 => 각각의 객체들을 한번에 하나씩 처리할 수 있는 메소드 제공
          // getParameterNames() 메소드 : 요청에 포함된 모든 파라미터 이름을 Enumeration 객체로 리턴한다
            
          Enumeration<String> keys = request.getParameterNames();
    
          // hasMoreElements() : 커서 바로 앞에 데이터가 들어있는지 체크
          while(keys.hasMoreElements()) {
              // nextElement() : 현재 커서가 가리키고 있는 데이터(객체)를 리턴해주고 커서의 위치를 다음칸으로 옮긴다
              String key = keys.nextElement();
                
              // 문자열 배열 values 선언
              // key란 이름으로 지정된 파라미터의 모든 값을 String 배열로 리턴한다
              String values[] = request.getParameterValues(key);
                
              if(values.length == 1){ // 배열의 길이가 1 이면
                    
                  // key와 values의 0번째 인덱스 요소를 출력한다
                  out.print(key + " = " + values[0] + "<br>");
              }else{ // 1이 아니라면
                    
                  // key = 출력한다
                  out.print(key + " = ");
                  // s : values에 들어 있는것고 같은 타입으로 선언
                  // 배열에 hobby가 입력된것만큼 반복하면서
                  for(String s : values) {
                        
                      // s에 입력받은 배열의 값을 대입하여 출력한다
                      out.print(s + " ");
                  }
                  // 한줄 띄기
                  out.print("<br>");
                    
              }
          }
      %>
    
      </body>
      </html>
    

    ▶ 출력화면 enumeration2

💡HTTP 헤더 정보와 관련된 메소드들 √ HTTP 헤더 정보와 관련된 메소드들

💡세션 정보와 관련된 메소드들 세션정보와 관련된 메소드들

💡쿠키, URL/URI, 요청 방식과 관련된 메소드들 쿠키 정보와 관련된 메소드들

✔ 자바빈(JavaBean)

- 디자이너와 프로그래머의 원활한 협업을 위해 디자인 부분과 비지니스 로직 부분을 분리하기 위해 사용되는 기능
- 사용하는 목적 : JSP 페이지에 화면 표시 부분과 로직들이 함께 존재해서 복잡하게 구성되는 것을 가능한 피하고,
                 JSP 페이지의 로직 부분을 분리해서 코드를 재사용함으로 프로그램의 효율을 높이는 것.

✔ 자바빈 설계 규약

자바빈 설계규약

✔ 자바빈 영역

자바빈 영역

  • 자바빈 DTO
      package bean;
    
      import java.util.Arrays;
    
      public class MemberDto {
            
          private String id;
          private String pw;
          private String name;
          private String address;
          private String[] hobby;
            
          public String getId() {
              return id;
          }
          public void setId(String id) {
              this.id = id;
          }
          public String getPw() {
              return pw;
          }
          public void setPw(String pw) {
              this.pw = pw;
          }
          public String getName() {
              return name;
          }
          public void setName(String name) {
              this.name = name;
          }
          public String getAddress() {
              return address;
          }
          public void setAddress(String address) {
              this.address = address;
          }
          public String[] getHobby() {
              return hobby;
          }
          public void setHobby(String[] hobby) {
              this.hobby = hobby;
          }
            
          @Override
          public String toString() {
              return "id=" + id + ", pw=" + pw + ", name=" + name + ", adress=" + address + ", hobby=" + Arrays.toString(hobby)
                      + "]";
          }
            
      }
    
  • 자바빈 jsp
      <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
      <%@ page import="bean.MemberDto" %>
      <!DOCTYPE html>
      <html lang="ko">
      <head>
      <meta charset="UTF-8">
      <title>action4</title>
      </head>
      <body>
    
          // <jsp:useBean/> : 자바빈 객체를 생성하기 위한 태그 
          // <id=빈이름, class= 자바빈 클래스 명 , scope= 사용 범위 >
          // page : 빈 객체 공유 범위가 현재 페이지의 범위에만 한정, 페이지가 변경되면 공유가 유지되지 않는다 
          <jsp:useBean id="dto2" class="bean.MemberDto" scope="page">
                    
    
          //<jsp:setProperty/> : 자바빈 클래스의 속성 값을 설정하기 위한 태그 
          //name = 빈 이름 , property=속성명 , value= 설정할 속성 값 
          //<jsp:setProperty name="dto2" property="id" value="java" /> 
          // property= * : 와일드카드 => 클라이언트에서 전송되어 오는 파라미터 값이
                      // 모두 같은 이름의 빈 객체의 속성 값으로 자동으로 할당,
                      // 정보를 저장하는 빈 클래스를 작성 -
                
              <jsp:setProperty name="dto2" property="*" />
          </jsp:useBean> 
            
          // <jsp:getProperty/> : 자바빈 클래스의 속성 값을 가져오기 위한 태그 
          // < name = 빈 이름, property=속성명 >
            
          id : <jsp:getProperty property="id" name="dto2" /><br>
          pw : <jsp:getProperty property="pw" name="dto2" /><br>
          name : <jsp:getProperty property="name" name="dto2" /><br>
          address : <jsp:getProperty property="address" name="dto2" /><br>
          hobby :
            
          <%
              for(String s : dto2.getHobby()) {
          %>		
              <%=s + " " %>
          <% 	
              }
          %> 	
      </body>
      </html>
    

    ▶ 출력화면 자바빈출력



Share Tweet +1