휴먼교육센터 개발자과정 71일차

조하영·2022년 11월 14일
0
클라이언트 요청		>컨트롤러 처리					>view
-서블릿 호출			 -서블릿 매핑						-화면만들기
-get or post		-컨트롤러는 여러개의 서블릿 정의		 -가장많이 사용하는 문법
etc				 	-클라이언트가 요청한 서블릿 지정		 :html , css, js, jquery , jsp
+파라미터			 -파라미터 받기						-컨트롤러에세 받은 데이터로 화면 만들기
(단일변수, 배열)		getParameter, getParameterValues	(JSP기준: jsp문법<%%>, el문법${},
                    -서비스 처리(CRUD 등)			 		jstl문법-별도 설치 필요)
                    -세션, 쿠키 처리				
                    -클라이언트 지정 후 포워드 or 리다이렉트
                    -이때 필요한 정보를 view에게 전송

실습

로또번호 제공사이트

메인메뉴 :1. 모든번호받기
2. 2개 번호는 사용자가 지정 남은 번호는 자동으로 뽑기

로또번호 생성은 com.human.lotto 패키지를 별도로 만든다.
컨트롤러에서는 로또 생성 객체를 참조하여 번호를 받는다.

로또 번호 생성하는 클래스

package com.human.lotto;

import java.util.ArrayList;
import java.util.Collections;

public class LottoNum {
	int num1;
	int num2;

	public ArrayList<Integer> lottoAll() {
		ArrayList<Integer> lottoNum = new ArrayList<>();
		for (int i = 0; i < 6; i++) {
			boolean flag = true;
			int num = (int) (Math.random() * 45 + 1);

			if (lottoNum.size() != 0) {
				for (int j = 0; j < lottoNum.size(); j++) {
					if (lottoNum.get(j) == num) {
						flag = false;
					}
				}
				if (flag) {
					lottoNum.add(num);
				} else {
					i--;
				}
			} else {
				lottoNum.add(num);
			}
		}
		Collections.sort(lottoNum);
		return lottoNum;
	}

	public ArrayList<Integer> lottoAll(String num1, String num2) {
		ArrayList<Integer> lottoNum = new ArrayList<>();
		this.num1 = Integer.parseInt(num1);
		this.num2 = Integer.parseInt(num2);
		lottoNum.add(this.num1);
		lottoNum.add(this.num2);
		for (int i = 0; i < 4; i++) {
			boolean flag = true;
			int num = (int) (Math.random() * 45 + 1);

			for (int j = 0; j < lottoNum.size(); j++) {
				if (lottoNum.get(j) == num) {
					flag = false;
				}
			}
			if (flag) {
				lottoNum.add(num);
			} else {
				i--;
			}

		}
		Collections.sort(lottoNum);

		return lottoNum;
	}

}

생성한 로또번호를 받아 jsp로 포워딩

package com.human.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;

import com.human.lotto.LottoNum;

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String url = "lotto/lotto.jsp";
		String num1 = request.getParameter("num1");
		String num2 = request.getParameter("num2");
		
		if(!num1.equals("") && !num2.equals("")) {
			request.setAttribute("lottoAll", lottoNum.lottoAll(num1,num2));
		}else {
			request.setAttribute("lottoAll", lottoNum.lottoAll());  
		}
		RequestDispatcher dispatcher = request.getRequestDispatcher(url);
		dispatcher.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

인덱스 컨트롤러

package com.human.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;

import com.human.lotto.LottoNum;

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//response.getWriter().append("Served at: ").append(request.getContextPath());
		//404오류는 경로를 못 찾는 경우 발생, 403은 경로는 맞지만 문서를 해독할 수 없을때 발생
		String url = "index.jsp";
		RequestDispatcher dispatcher = request.getRequestDispatcher(url);
		dispatcher.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

인덱스 jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="./css/main.css" rel="stylesheet">
</head>
<body>
    <h1>오늘의 로또번호는!</h1>
    <hr>
    <form action = "LottoView" method = "get">
    <input type="submit" value = "모두자동추첨"><br>
    <hr>
    <p>1~45 사이의 번호 두개 선택</p>
    <input type = "text" name = "num1" size = "1px">
    <input type = "text" name = "num2" size = "1px">
    <input type="submit" value = "자동추첨">
    </form>

</body>
</html>

컨트롤러에서 받은 파라미터를 출력하는 jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="./css/main.css" rel="stylesheet">
</head>
<body>
    <h1>오늘의 로또번호는!
    <% ArrayList<Integer> lottoAll = (ArrayList<Integer>)request.getAttribute("lottoAll"); %>
    <% 
    for(int i = 0; i < lottoAll.size(); i++){
    %>
    <b><%=lottoAll.get(i) %></b>
    <% }; %></h1>
    <hr>
    <form action = "LottoView" method = "get">
    <input type="submit" value = "모두자동추첨">
    <br>

    <hr>
    <p>1~45 사이의 번호 두개 선택</p>
    <input type = "text" name = "num1" size = "1px">
    <input type = "text" name = "num2" size = "1px">
    <input type="submit" value = "자동추첨">
    </form>

</body>
</html>
profile
공부하는 개발자

0개의 댓글