Deeb
디비의 DB
Deeb
전체 방문자
오늘
어제
  • 분류 전체보기 (243)
    • Frontend (63)
      • HTML & CSS (27)
      • JavaScript (17)
      • jQuery (8)
      • React (6)
    • Backend (98)
      • Java (19)
      • JDBC (2)
      • Servlet & JSP (13)
      • Spring (17)
      • Project (0)
      • 개발 공부 (11)
      • 문제 풀이 (8)
      • Algorithm (1)
      • DataBase (0)
      • Oracle (18)
      • Error (8)
    • Knou (1)
    • Review (14)
    • TIL (33)
    • 삽질기록 (8)
    • deebtionary (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • DB
  • 추천
  • 다형성
  • 방송대
  • DBMS
  • For
  • 기초
  • 리액트
  • 자바
  • 정의
  • 함수
  • 한빛미디어
  • js
  • 후기
  • GIT
  • alter
  • 삭제
  • 서평단
  • Java
  • CLASS
  • 정처기
  • 책
  • 공부
  • 배열
  • css
  • 클래스
  • 에러
  • 방통대
  • HTML
  • 2학기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Deeb

디비의 DB

[Servlet] form 태그 서블릿으로 get 방식,이론
Backend/Servlet & JSP

[Servlet] form 태그 서블릿으로 get 방식,이론

2021. 12. 5. 19:48

Servlet

웹 서비스를 위한 자바 클래스 (자바를 이용하여 웹을 만들기 위해 필요한 기술)

웹 프로그래밍에서 클라이언트의 요청(Request)을 처리하고 그 결과를 다시 클라이언트에게 응답(Response)하는 Servlet클래스의 구현 규칙을 지킨 자바 프로그래밍 기술

 

자바 어플리케이션 코딩을 하듯 웹 브라우저용 출력 화면(HTML) 을 만드는 방법

 

특징

- 클라이언트의 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트.

-> 클라이언트 요청에 대한 서버 응답 시 미리 만들어둔 화면(정적)이 아닌 요청을 받을 때 마다 알맞은 화면을 만들어(동적) 응답함.

- HTML을 사용하여 요청에 응답

- java thread를 이용하여 동작. (요청마다 별도 thread가 생성됨)

- MVC Model2패턴에서 Controller로 이용

- http프로토콜 서비스를 지원하는javax.servlet.http.HttpServlet 클래스를 상속 받음

 

단점

- servlet에 작성한 html 코드 변경 시 재컴파일 해야 한다

 

 

 

Front 화면

더보기
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Servlet 테스트2</title>
</head>
<body>
    <h2>1. checkbox 또는 name 속성 값이 같은 input 태그 값 서버로 전달하기</h2>

    <form action="/ServletProject2/test1" method="get">
        이름 : <input type="text" name="inputName"> <br>

        성별 : 
        
        <!-- radio는 여러 개가 존재해도 하나만 선택되어 서버로 제출된다. => 서버에 한 개만 넘어간다.
            name이 같은 경우 하나만 선택된다. -->
        여 <input type="radio" name="gender" value="여">
        남 <input type="radio" name="gender" value="남">

        <br>
        <!-- name 속성이 같은 input이 여러 개 서버로 전달되는 경우
            서버에서 배열 형태로 받을 수 있다.

        -->
        취미 : 
        축구 <input type="checkbox" name="hobby" value="축구">
        농구 <input type="checkbox" name="hobby" value="농구">
        야구 <input type="checkbox" name="hobby" value="야구">

        <br>

        해시태그 : 
        <input type="text" name="hashtag">
        <input type="text" name="hashtag">
        <input type="text" name="hashtag">

        <button>제출</button>
    </form>

    



</body>
</html>


Get 방식

package edu.kh.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet1 extends HttpServlet{

	// doGet쓰고 ctrl space하면 자동완성된다
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		String inputName = req.getParameter("inputName");
		// -> 요청 시 전달 받은 값 중 name 속성값이 "inputName"인 태그의 value를 얻어온다.
		
		String gender = req.getParameter("gender");
		
		
		// 요청 시 전달 받은 값 중 중복되는 name 속성이 있는 경우 // 요소는 다르지만 이름이 같은 경우
		// ==> 이름이 같은 파라미터들을 하나의 배열로 저장 
		
		String[] hobby = req.getParameterValues("hobby");
		String[] hashtag = req.getParameterValues("hashtag");
		
		System.out.println(inputName);
		System.out.println(gender);
		
		System.out.println( Arrays.toString(hobby));
		System.out.println( Arrays.toString(hashtag));
		
		out.print("<!DOCTYPE html>");
		out.print("<html>");
		
		out.print("<head>");
		out.print("<title>" + inputName + "님의 응답화면 </title>");
		out.print("</head>");
		
		out.print("<body>");
		out.print("<h2>이름" + inputName + "님의 응답화면 </h2>");
		out.print("성별은 <span style ='color:darkgreen'>" + gender + "자</span>");
		
		out.print("<h3>선택한 취미</h3>");
		out.print("<p>");
		
		if(hobby == null) { // 선택한 취미가 없을 경우
			out.print("없음");
		
		}else {
			// 취미 한 줄씩 추가
			for(String h : hobby) {
				out.print(h + "<br>");
			}
		}
		
		out.print("</p>");
		
		// 해시태그
		out.print("<h4 style='color:yellowgreen'>");
		
		for(String tag : hashtag) {
			if (!tag.equals("")) { // 해시태그가 작성되어있는 경우
				out.print("#" + tag + "&nbsp;");
			}
		}
        
		out.print("</h4>");
		out.print("</body>");
		out.print("</html>");
		
	}
}

HttpServletRequest req : 요청관련 데이터, 정보를 가지고 있는 객체
HttpServletResponse resp : 응답 관련 정보, 스트림을 가지고 있는 객체

Parameter : 클라이언트 요청 시 전달 받은 값


응답(Response)
- 클라이언트의요청에 따라 처리된 내용을 서버 -> 클라이언트로 전달

Servlet을 이용하여 응답하는 경우
요청에 따라 응답화면 모양을 변경할 수 있다.
- 가능한 이유 : Servlet에서 상황에 따라 html코드를 새로 만들기 때문

Servlet을 이용한 응답 화면 만들기
1. 응답 화면(HTML)의 형식 지정
resp.setContentType("text/html; charset=UTF-8");

2. 만들어진 응답 화면을 전달 받을 클라이언트와의 연결 통로(스트림) 얻어오기
PrintWriter out = resp.getWriter();
getWriter : response 객체에서 클라이언트와 연결된 문자기반 스트림을 얻어온다.

3. HTML 코드를 작성하여 스트림을 이용해 출력


Servlet을 이용한 응답 화면 만들기

// 1. 응답 화면(HTML)의 형식 지정
resp.setContentType("text/html; charset=UTF-8");
		
// 2. 만들어진 응답 화면을 전달 받을 클라이언트와의 연결 통로(스트림) 얻어오기		
PrintWriter out = resp.getWriter();
							
// 3. HTML 코드를 작성하여 스트림을 이용해 출력
out.print("<!DOCTYPE html>");
out.print("<html>");

out.print("<head>");
out.print("<title>" + inputName + "님의 응답화면 </title>");
out.print("</head>");

out.print("<body>");
out.print("<h2>이름" + inputName + "님의 응답화면 </h2>");
out.print("성별은 <span style ='color:darkgreen'>" + gender + "자</span>");

out.print("<h3>선택한 취미</h3>");
out.print("<p>");

	if(hobby == null) { // 선택한 취미가 없을 경우
      out.print("없음");
		
	}else {
		// 취미 한 줄씩 추가
		for(String h : hobby) {
			out.print(h + "<br>");
			}
		}
		
	out.print("</p>");
		
	// 해시태그
		out.print("<h4 style='color:yellowgreen'>");
		
		for(String tag : hashtag) {
			if (!tag.equals("")) { // 해시태그가 작성되어있는 경우
				out.print("#" + tag + "&nbsp;");
		}
	}
		
out.print("</h4>");

out.print("</body>");

out.print("</html>");

getWriter : response 객체에서 클라이언트와 연결된 문자기반 스트림을 얻어온다.


web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletProject2</display-name>
  
  <!-- 메인화면으로 지정할 파일 -->
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
 
 	<!-- 클래스를 servlet으로 지정 -->
	<servlet>
		<servlet-name>test1</servlet-name>
		<servlet-class>edu.kh.servlet.TestServlet1</servlet-class>
	</servlet>
	
	
	<!-- 요청 주소를 처리할 servlet 지정 -->
	<servlet-mapping>
	<servlet-name>test1</servlet-name>
	<url-pattern>/test1</url-pattern>
	</servlet-mapping>
	  
</web-app>

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Backend > Servlet & JSP' 카테고리의 다른 글

[JSP] GET,POST/ JSP Action/ EL / Scope  (0) 2021.12.30
[JSP] 정리 + 코드, vscode 설정  (0) 2021.12.30
[Servlet] 예제 서블릿 1,2,3  (0) 2021.12.04
[Servlet] eclipse 프로젝트 생성, vscode설정 + Run On Server 단축키 설정  (0) 2021.11.28
[Servlet] 설치 :: 이클립스, 톰캣, vscode  (0) 2021.11.28
    'Backend/Servlet & JSP' 카테고리의 다른 글
    • [JSP] GET,POST/ JSP Action/ EL / Scope
    • [JSP] 정리 + 코드, vscode 설정
    • [Servlet] 예제 서블릿 1,2,3
    • [Servlet] eclipse 프로젝트 생성, vscode설정 + Run On Server 단축키 설정
    Deeb
    Deeb

    티스토리툴바