클라이언트 요청 >컨트롤러 처리 >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>