Handling

coc·2023년 8월 25일
0

Joinmodel

package kr.co.gudi.model;

public class Joinmodel {

	public boolean agecheck(String age) {
		//20세 이상인지 체크하기 위해서는 숫자여야 한다
		//500에러가뜸
		//java.lang.NumberFormatException :숫자 형태가 아닌 문자열을 숫자로 변환 하려고 할때 발생
		//"12" -> 12,"ㅁㄴㅇ" -> ? 숫자로 바꿀수 없기 때문에 위에 처럼 뜸
		boolean pass = false;
		//문제가 발생한 곳에서 스스로 처리(try,catch)
		try {//문제가 발생 할 것 같은 부분
			int n = Integer.parseInt(age);// n은 try 밖으로 못나감
			pass = n<20 ? false :true;
		} catch (NumberFormatException e) {//예외 발생시 처리할 내용
			System.out.println(e.toString());//exception 에 대한 간단한 정보
			pass = false;
			System.out.println("사용자가 숫자 말고 다른거 입력 했습니다");
		}
		
		int n = Integer.parseInt(age);
		return n<20 ? false:true;
		
		
	}

	//전가시킨다 (모델이 컨틀롤러 한테 전가시킴)
	public int registHobby(String[] hobby) 
	throws NullPointerException,ArrayIndexOutOfBoundsException{ //throws 옆에 두개를 controller의 전가 시킨다
		
		int cnt = hobby.length; //취미를 몇개 선택했는지 배열 크기를 반환
		//hobby 에 있던 취미를 list 라는 배열에 저장한다
		String[] list = new String[2];
		for (int i = 0; i < hobby.length; i++) {
			//java.lang.ArrayIndexOutOfBoundsException 아웃 오브 바운드는 우리가 수용할수 있는 범위
			//java.lang.ArrayIndexOutOfBoundsException: 배열의 크기보다 더 많은 갯수의 값이 들어왔을때
			list[i] = hobby[i]; // 0번인덱스를 list에 0번인덱스 투입
		}
		
		
		return cnt;
	}

}

Index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
<style>
table,th,td{
	border:1px solid black;
	border-collapse:collapse;
	padding: 5px 10px;
}
input[type="text"]{
width: 100%;
}
</style>
</head>
<body>
	<!-- Joincontroller -->
	<form action= "join" method="post"><!-- 뭔가를 쓸떄는 post를 사용한다 -->
	<table>
	<tr>
		<th>ID</th>
		<td><input type = "text" name="id"/></td>
	</tr>
	<tr>
		<th>PW</th>
		<td><input type = "text" name="pw"/></td>
	</tr>
	<tr>
		<th>AGE</th>
		<td><input type = "text" name="age"/></td>
	</tr>
	<tr>
		<th>취미(2개)</th>
		
		<td>
		<input type = "checkbox" name="hobby" value ="sports"/>스포츠
		<input type = "checkbox" name="hobby" value ="movie"/>영화
		<input type = "checkbox" name="hobby" value ="game"/>게임
		<input type = "checkbox" name="hobby" value ="finshing"/>낚시
		
		</td>
		
	</tr>
	<tr>
		<th>성별</th>
		<td>
		<input type = "radio" name="gender" value=""/>남자
		&nbsp;&nbsp;&nbsp;&nbsp;
		<input type = "radio" name="gender" value=""/>여자
		</td>
	</tr>
	<tr>
		<th colspan ="2"><button>가입</button></th>	
	</tr>
	</table>
	</form>
</body>
<script>
 var msg = "${msg}"
 if(msg != ""){
	 alert(msg);
 }

</script>
</html>

JoinController

package kr.co.gudi.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 javax.servlet.http.HttpSession;

import kr.co.gudi.model.Joinmodel;

@WebServlet("/join")
public class JoinController extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		req.setCharacterEncoding("UTF-8");
		String id = req.getParameter("id"); //get 파라미터로 받아오기
		String pw = req.getParameter("pw");
		String age = req.getParameter("age");//20세 이상만 가입 가능 
		String[] hobby = req.getParameterValues("hobby");//취미 2개 등록
		String gender = req.getParameter("gender");//여성만 가입 가능
		
		//java.lang.NullPointerException :null인 데이터에 무언가 하려고 했을때(제일 중요)
		System.out.println(hobby); //consol위에 null혼자  있음 그게 hobby다 
		System.out.println(id+"/"+pw+"/"+age+"/"+hobby+"/"+gender); 
		
		Joinmodel model = new Joinmodel();
		String msg = "가입이 완료 되었습니다";
		
		if(model.agecheck(age) == false) {
			msg = "20세 이상만 가입이 가능 합니다.";
		} 
			
		
		try { //try 문제가 발생
			//만약 문제 발생시 msg = "취미를 제대로 넣으세여";
			if(model.registHobby(hobby)==0) {
				//밑에 2개의 예외
				//nullpointException
				//Arrayindexoutifboundsexception
				msg = "취미는 1개 이상 선택해 주세요";
			}
			
		} catch (NullPointerException e) {// 예외 발생하면 밑으로 처리
			System.out.println(e.toString());//어떤 예외가 발생했는지 확인가능 (java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 2)
			msg = "취미를 선택해 주세요";
		} catch(ArrayIndexOutOfBoundsException e) {// 예외 발생하면 밑으로 처리
			System.out.println(e.toString());//어떤 예외가 발생했는지 확인가능 , 간단한 예외 정보
			msg = "취미를 2개를 넘을 수 없습니다.";
		}finally {//finally는 위에 예외가 발생하든 안하든 무조건 실행
			System.out.println(msg);
			req.setAttribute("msg", msg);
			RequestDispatcher dis = req.getRequestDispatcher("index.jsp");
			dis.forward(req, resp);
			
		}
	
	}

	
}
profile
시작

0개의 댓글