클래스

필드 

package static0531;

public class Student {
	// 인스턴스 변수 저장 공간
	public String name;
	public int kor;
	public int math;
	public int eng;
}

 

index,  배열 초기값 , 학생 정보를 저장하는 역활

싱글톤 대신 해당 코드로 할 시 주소값이 바뀌어서 새로고침하면 데이터가 바뀜 

package static0531;

public class HandleStu {
	// index, 배열 초기값 설정
	
	// stu 배열을 초기화하고 학생 정보를 저장하는 역할
	// 학생 정보를 저장하는 배열인 stu를 Singleton과 공유
	public static int index = 0;
	public static Student[] stu = new Student[3];
	public static void create() {
		for(int i=0; i < stu.length; i++ ) {
			stu[i] = new Student();
		}
	}

}

 

싱글톤 클래스

package static0531;

public class Singleton {
	
	//싱글톤 : 한 번의 인스턴스화만 허용하고 해당 인스턴스를 전역적으로 접근
	// 학생 정보를 저장하는 배열인 stu를 공유
	private static Singleton st = new Singleton();
	public Student[] stu = new Student[3];
	
	// 사용자가 입력한 정보는 stu 배열에 저장
	private Singleton() {
		for(int i=0; i < stu.length; i++ ) {
			stu[i] = new Student();
		}
	}
	public static Singleton getInstance() {
		return st;
	}
	
}

 


 

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>
<%
//번호, 이름, 국어 점수, 수학 점수, 영어 점수를 입력 받고 res.jsp로 이동
%>
<form action ="res.jsp">
번호(0~2)<input type="text" name="bunho" /><br/>
이름<input type="text" name="name" /><br/>
국어<input type="text" name="kor" /><br/>
수학<input type="text" name="math" /><br/>
영어<input type="text" name="eng" /><br/>
<input type="submit" />
</form>

</body>
</html>

 

입력 받아온 정보를 처리하는 역할

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="static0531.*" %>
<%
// Singleton 클래스의 인스턴스를 가져옴
// 한 번의 인스턴스화만 허용하고 해당 인스턴스를 전역적으로 접근
Singleton st = Singleton.getInstance();

//사용자가 입력한 학생 정보를 처리하는 역할

String bunho = request.getParameter("bunho");
int index = Integer.parseInt(bunho);
//request.getParameter => 사용자가 입력한 정보를 변수에 저장
String name = request.getParameter("name");
String kor = request.getParameter("kor");
// Integer.parseInt => 입력받은 문자열을 int타입으로 변경
int kscore = Integer.parseInt(kor);
String math = request.getParameter("math");
int mscore = Integer.parseInt(math);
String eng = request.getParameter("eng");
int escore = Integer.parseInt(eng);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<br/>
<% 
//Singleton 인스턴스인 st의 stu 배열에서 입력된 인덱스(index)에 해당하는 학생 객체의 이름을 입력값으로 설정합니다. 
//예) st.stu[0].name = name;은 입력된 인덱스 0에 해당하는 학생 객체의 이름을 입력값으로 설정
st.stu[index].name = name;
st.stu[index].kor = kscore;
st.stu[index].math = mscore;
st.stu[index].eng = escore;
//입력된 학생 정보는 Singleton 인스턴스의 stu 배열에 저장됩니다. 
//이 배열은 HandleStu 클래스에서 생성되며, 각 인덱스에는 학생 객체가 할당

%>

</body>
</html>

 

출력

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="static0531.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//HandleStu.create();
// Singleton 인스턴스를 생성하고, stu 배열의 각 학생 정보를 가져와 출력
Singleton s1 = Singleton.getInstance(); 
for (Student st : s1.stu){
	out.println(st.name);
	out.println(st.kor);
	out.println(st.math);
	out.println(st.eng);
	out.println("<br/>");
	}
%>
</body>
</html>

 


 

실행

1. stuForm.jsp 실행 후 사용자에게 입력 받음 번호는(0~2)는 배열 인덱스

2. 사용자에게 입력 받은 값 저장 ( 새로고침 후 적용 )

3. stuForm.jsp 뒤로 가기 후 번호 (1) 값 입력 후 제출

4. viewstu.jsp 페이지 새로고침하면 번호(1)값도 저장

5. 동일하게 3, 4번 동일하게 진행 번호(2)값도 저장

6. viewstu.jsp 페이지 새로고침해도 값이 초기화가 되지 않음 (  싱글톤 활용 ) 

싱글톤 : 한 번의 인스턴스화만 허용하고 해당 인스턴스를 전역적으로 접근

 

 

+ Recent posts