JSP(Java Server Pages)

Servlet 사용해보기

Dodledd 2024. 3. 26. 20:35

저번에 servlet을 사용하기 위한 세팅을 했다.

이클립스의 설정은 폴더별로 적용되기 때문에 다른 폴더에 다른프로젝트를 열면 세팅이 초기화 되서 다시 세팅해줘야하는 번거로움이 있으니 주의하자.

 

Servlet은 MVC중에서 Controller로 동작한다.

사용자에게 값을 가져와서 그 값을 가공해 서버로 넘기는, 그야말로 딱 Controller의 역할이다.

 

우리가 해야할 것을 정리해보자.

 

  1. index.html로 시작하는 초기 페이지(웰컴페이지) 를 만들고 a 태그 로 이동하고 싶은 링크를 걸어놓는다.
  2. a 태그로 이동한 링크를 보여줄 html파일을 작성한다.
  3. 2번에서 a태그로 이동시킨 html파일안에 form 태그로 값을 입력받는다.
  4. form 태그에 입력한 값을 받아줄 servlet 파일을 만든다. (우클릭 other, servlet파일, 만들면 @WebServlet("/test2.do") 경로 지 잘해줘야함)
  5. 이때 servlet의 객체 HttpServletRequest ,HttpServletResponse가 만들어지는데 이 녀석들의 메소드를 이용하여 값을 뽑아온다.
  6. 이 때부터는 자바코드로 뽑아온 값을 활용하면 된다.
  7. 전부 활용했다면 RequestDispatcher으로 getRequestDispatcher 메소드를 활용하여 가공한 데이터 값을 담아줄 객체를 만들고 다시 view(.jsp)파일이 있는 곳으로 보낸다.
  8. forward라는 메서드로 request, response를 보내준다.
  9. view폴더에 우리가 넘겨줄 값을 받아줄 자바스크립트 폴더(jsp를 만든다).
  10. 톰캣 서버를 실행하여 확인한다

 

1,2 초기페이지 index 생성과 a태그 생성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>안녕 서버는 처음이지?</h1>
	
	<h2>* Servlet	</h2>
	
	<p>
		서블릿이란? <br>
		웹서비스를 위한 "자바클래스"를 말하며 자바를 사용해서 웹을 만들기위해 필요한 기술 <br>
		>>사용자의 요청을 받아 처리하고 그에 해당하는 응답페이지를 만들어 다시 사용자에게 전송하는 역할을 하는 자바 클래스(Controller)<br>
		>>즉, 웹에서의 동적인 페이지를 java로 구현할 수 있게 도와주는 서버측 프로그램(java코드로 html구현)
	</p>
	
	<h3><a href="views/requestTest_Get.html">Get방식테스트</a></h3>
	<h3><a href="views/requestTest_Post.html">Post방식 테스트</a></h3>
</body>
</html>

 

 

3.  form 태그로 입력값 받기, 어디로 보낼지 form action에 경로 적어놓기.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<style>

</style>
<body>
    <h1>POST방식으로 요청해보기</h1>
    <p>
        특징1. POST방식으로 요청시 URL의 BODY영역에 데이터를 포함시켜 넘긴다. <br>
        => 사용자가 입력한 값(데이터) 들이 url에 노출되지 않음 <br>
        => 보안유지가 가능함 <br>
        => 즉 로그인이나 회원가입 같은 경우 POST방식에 적합하다. <br><br>

        특징2. Body 영역은 전송하는 길이에 제한이 없다. <br>
        -> 즉, 게시판 작성같은 경우 POST방식이 적합하다. <br> <br>

        특징3. 즐겨찾기는 가능하나 데이터가 url에 노출되어있지 않음
        -> 즉, 기존에 봤던 응답화면을 볼 수 없을 수 있다. <br>
        -> 즉, 검색 기능 같은 경우 POST방식에 부적합 하다. <br>
        
        특징4. Time out이 존재하기 때문에 페이지 요청, 기다리는 시간이 있다.
    </p>

    <h2>개인정보입력</h2>

    //test2.do 서블릿을 생성하고 post메서드에서 System.out.Print("Post요청 성공")
	//RequestPostServlet.java
    <form action="/1_Servlet2/test2.do" method="POST">
        <ul>
            <li>
                이름 : <input type="text" name="name">
            </li>
            <li>
                성별 : 
                <input type="radio" name="gender" value="M">남자
                <input type="radio" name="gender" value="W">여자
            </li>
            <li>
                나이 : <input type="number" name="age">
            </li>
            <li>
                거주지 : 
                <select name="city" id="">
                    <option >서울</option>
                    <option >경기</option>
                    <option >강원</option>
                    <option >충청</option>
                    <option >경상</option>
                    <option >전라</option>
                    <option >제주</option>
                </select>
            </li>
            <li>
                키 : <input type="range" name="height" min="140" max="200">
            </li>
            <li>
                좋아하는 음식(모두 고르시오)
                <input type="checkbox" name="food" value="한식"> 한식
                <input type="checkbox" name="food" value="중식"> 중식
                <input type="checkbox" name="food" value="일식"> 일식
                <input type="checkbox" name="food" value="양식"> 양식
                <input type="checkbox" name="food" value="분식"> 분식

            </li>
            <li>
                <input type="submit">
                <input type="reset">
            </li>
        </ul>
    </form>
</body>
</html>

 

여기서부턴 코드를 단락적으로 끊어 올립니다. 이해하고 외운다음 마지막에 올려놓을 전체 코드를 보면 이해가 잘 간다!!

 

 

4. form 태그에 입력한 값을 받아줄 servlet 파일을 만든다. (우클릭 other, servlet파일, 만들면 @WebServlet("/test2.do") 경로 지 잘해줘야함)

package com.kh.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class RequestPostServlet
 */
@WebServlet("/test2.do")
public class RequestPostServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public RequestPostServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */

 

5. 입력받은 값들을 servlet객체로 뽑아온다

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("GET 호출 완료");
		
		//Post방식 요청같은 경우는
		//데이터를 추출하기 [전!] 인코딩설정을 해야함
		request.setCharacterEncoding("UTF-8");
		
		String name = request.getParameter("name"); //asdf | ""
		String gender = request.getParameter("gender"); // "M" | "W" | null
		int age = Integer.parseInt(request.getParameter("age")); //"23" => 23
		String city = request.getParameter("city"); //"경기", "서울" 등등 중에 하나로 옴
		double height = Double.parseDouble(request.getParameter("height")); // "170" => 170.0000
		
		String[] foods = request.getParameterValues("food"); //["한식", "분식"]; | null
		
		System.out.println("name : " + name);
		System.out.println("gender : " + gender);
		System.out.println("age : " + age);
		System.out.println("city : " + city);
		System.out.println("height : " + height);
		
		
		if(foods==null) {
			System.out.println("foods : 없음");
		}else {
			System.out.println("foods : " + String.join("/", foods));
		}

 

 

6. 코드를 알아서 활용한다. (생략)

 

 

7. 전부 활용했다면 RequestDispatcher으로 getRequestDispatcher 메소드를 활용하여 가공한 데이터 값을 담아줄 객체를 만들고 다시 view(.jsp)파일이 있는 곳으로 보낸다.

		request.setAttribute("name", name);
		request.setAttribute("age", age);
		request.setAttribute("city", city);
		request.setAttribute("height", height);
		request.setAttribute("gender", gender);
		request.setAttribute("foods", foods);

 

 

8. forward 작성해서 마무리 (이 때 경로지정을 잘 해줘야한다)

		//응답하고자하는 뷰(jsp) 선택해서 넘겨줌 => RequestDispatcher객체 생성
		RequestDispatcher view = request.getRequestDispatcher("/views/responsePage.jsp");
		view.forward(request, response);

 

9. 잘 써먹은 값을 다시 반환했는데 이것을 받아줄 view폴더에 jsp 파일을 만든다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		//스크립틀릿(scriptlet) == thml문서내에서 자바코드를 쓸 수 있는 영역
		
		String name = (String)request.getAttribute("name");
	%>
	
	<h1>개인정보 응답하면 - POST</h1>
	<span id="name"><%=name %></span>
</body>
</html>

 

 

10. 실행하면 마무리된다.

마무리 전체 코드

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<style>

</style>
<body>
    <h1>POST방식으로 요청해보기</h1>
    <p>
        특징1. POST방식으로 요청시 URL의 BODY영역에 데이터를 포함시켜 넘긴다. <br>
        => 사용자가 입력한 값(데이터) 들이 url에 노출되지 않음 <br>
        => 보안유지가 가능함 <br>
        => 즉 로그인이나 회원가입 같은 경우 POST방식에 적합하다. <br><br>

        특징2. Body 영역은 전송하는 길이에 제한이 없다. <br>
        -> 즉, 게시판 작성같은 경우 POST방식이 적합하다. <br> <br>

        특징3. 즐겨찾기는 가능하나 데이터가 url에 노출되어있지 않음
        -> 즉, 기존에 봤던 응답화면을 볼 수 없을 수 있다. <br>
        -> 즉, 검색 기능 같은 경우 POST방식에 부적합 하다. <br>
        
        특징4. Time out이 존재하기 때문에 페이지 요청, 기다리는 시간이 있다.
    </p>

    <h2>개인정보입력</h2>

    //test2.do 서블릿을 생성하고 post메서드에서 System.out.Print("Post요청 성공")
	//RequestPostServlet.java
    <form action="/1_Servlet2/test2.do" method="POST">
        <ul>
            <li>
                이름 : <input type="text" name="name">
            </li>
            <li>
                성별 : 
                <input type="radio" name="gender" value="M">남자
                <input type="radio" name="gender" value="W">여자
            </li>
            <li>
                나이 : <input type="number" name="age">
            </li>
            <li>
                거주지 : 
                <select name="city" id="">
                    <option >서울</option>
                    <option >경기</option>
                    <option >강원</option>
                    <option >충청</option>
                    <option >경상</option>
                    <option >전라</option>
                    <option >제주</option>
                </select>
            </li>
            <li>
                키 : <input type="range" name="height" min="140" max="200">
            </li>
            <li>
                좋아하는 음식(모두 고르시오)
                <input type="checkbox" name="food" value="한식"> 한식
                <input type="checkbox" name="food" value="중식"> 중식
                <input type="checkbox" name="food" value="일식"> 일식
                <input type="checkbox" name="food" value="양식"> 양식
                <input type="checkbox" name="food" value="분식"> 분식

            </li>
            <li>
                <input type="submit">
                <input type="reset">
            </li>
        </ul>
    </form>
</body>
</html>

 

 

 

 

 

 

이것으로 간단하게 웹(클라이언트) 와 html서버, WAS서버로 연동이 됐다.

 

드디어 웹->서비스->서버->DB 로 이어지는 모든 다리가 놓여졌다.

잠깐이지만 웹을 개발하는 기술도 배웠기 때문에 프로젝트를 시작할 수 있는 최소한의 조건이 갖춰졌다고 할 수 있다.

 

이제부터는 세미프로젝트의 시작이다.

처음이라 문제도 많겠지만 그것 또한 재미있을 것 같아 매우 기대가 되며 열심히 공부해서 잘 마무리하고 내 것으로 만들 수 있게 해야겠다.