컴퓨터 프로그래밍/servlet

ServletContext-여러개의 객체를 list에...

깝돌이 2020. 6. 4. 13:22

ServletContext에 list로 저장하기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
/*
 * 나이를 문자로 입력 했을 때 숫자로 입력하는 메세지를 띄우고 return false 시킨다. 
 */
function() {
		var f = documnet.frm
	if(isNaN(f.age.value)){
		alert("나이는 숫자입력바랍니다.");
		return false;
	}
	}
</script>
</head>
<body>
	<h2 align="center">Register Cafe Member Form</h2>
	<form name="frm" action="EntranceServlet" method="post"
		onsubmit="return checkData()">
		이 름<input type="text" name="name" required="required"><br>
		나 이<input type="text" name="age" required="required"><br>
		주 소<input type="text" name="addr" required="required"><br>
		<input type="submit" value="회원가입">
	</form>
</body>
</html>
package servlet.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import servlet.model.MemberVO;
/*
 * 회원가입하면 정보를 바탕으로 
 * MemberVO를 생성 ArrayList에 추가
 * 회원가입을 5명이면, MemberVO 5개
 * ArrayList를 통째로 ServletContext에 바인딩
 */
public class EntranceServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	List<MemberVO> list=Collections.synchronizedList(new ArrayList<MemberVO>());//동기화처리 해줍니다. 
	private ServletContext context;
	@Override
		public void init() throws ServletException {
		context = getServletContext();
		System.out.println("ServletContext의 주소:"+context);
		
		context.setAttribute("list", list);
		System.out.println("ServletContext에 카페 입장명단을 저장할 List를 미리 바인딩 합니다.");
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		String name = request.getParameter("name");
		int age = Integer.parseInt(request.getParameter("age"));
		String addr = request.getParameter("addr");
		System.out.println("1. 폼값을 받아 옵니다. ");
		
		MemberVO vo =new MemberVO(name, age, addr);
		System.out.println("2. MemberVO생성");
		list.add(vo);
		System.out.println("3. MemberVO를 List에 저장");//ServletContext에 바인딩 된 List에 VO가 저장
		out.println(name+"님이 카페에 입장하셨습니다. ");
		System.out.println(name+"님이 카페에 입장하셨습니다.");
		
		out.println("<a href=viewMember.jsp?name="+name+">viewMember.jsp페이지로 이동합니다.</a>");
	}
}

 

<%@ 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>
<b><%= request.getParameter("name") %>님이 방금전 회원 가입 하신 분입니다.</b>
</body>
</html>

리스트에 모든 것을 출력하게 jsp 코딩을 해봅니다. 

<%@page import="servlet.model.MemberVO"%>
<%@page import="java.util.List"%>
<%@ 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>
<b><%= request.getParameter("name") %>님이 방금전 회원 가입 하신 분입니다.</b><p>
<hr>
<h2>전체 카페 명단 리스트</h2>
<table border="2px">
<%
	List<MemberVO> list = (List<MemberVO>)application.getAttribute("list");
	
	for(int i=0; i<list.size();i++){
%>
	<tr>
	<td><%= i+1 %></td> 
	<td><%= list.get(i).getName() %></td> 
	<td><%= list.get(i).getAge() %></td> 
	<td><%= list.get(i).getAddr() %></td>
	</tr>
<%
	}
%>
</table>
</body>
</html>