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>
<form action= "join" method="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="남"/>남자
<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);
}
}
}