[회원가입] form Servlet 전달

메타플랫폼대표
|2024. 6. 17. 11:16
반응형

 

JSP를 활용하지 않고 Servlet에서 바로 text값을 응답받을 때

 

 

 

해당 HTML 태그

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<style type="text/css">
	th{
		text-align: right;
	}
	
	textarea{
		resize: none;
	}

</style>

<script type="text/javascript">

	// 정규식
	const regular_id = /^[A-Za-z]{1}[A-Za-z0-9]{3,7}$/; // 4~8
	const regular_pwd = /^[A-Za-z]{1}[A-Za-z0-9]{3,5}$/; // 4~6
	// 첫글자는 영어로 / 대문자,소문자,숫자,4~8자리까지
	// 이것에 대한 개념은 갯수지 자릿수가 아님
	

	function send(f) {
		
		let name = f.name.value.trim(); //trim() 공백제거
		let id = f.id.value; // 정규식 체크할거라 trim()을 쓰지 않는다
		let pwd = f.pwd.value;
		let profile = f.profile.value;
		// 항상 client의 입장에서 사용자의 입장에서 생각하고 프로그램을 짜야한다.
		if(name=="") {
			alert("이름을 입력하세요!!");
			f.name.value=""; // 다시 입력해야한다면, 값 초기화
			f.name.focus();
			return;
		}
		
		if(regular_id.test(id)==false) {
			alert("아이디는 4~8자리의 영문자/숫자 조합으로 작성하세요");
			f.id.value="";
			f.id.focus();
			return;
		}
		
		if(regular_pwd.test(pwd)==false) {
			alert("비밀번호는 4~6자리의 영문자/숫자 조합으로 작성하세요");
			f.pwd.value="";
			f.pwd.focus();
			return;
		}

		if(profile=="") {
			alert("자기소개를 입력하세요!!");
			f.profile.value="";
			f.profile.focus();
			return;
		}
		
		//전송절차 form 태그 안에 적어도 된다.
		f.action = "member_register.do"; // MemberRegisterAction
		f.method = "GET"; // 생략시 기본값 : GET
		f.submit();
		
	}

</script>
</head>

<!--
	form : 서버로 데이터 전송시 사용하는 Tag
	속성 :
	   1. action : 전송대상(누구에게..) / 생략시 자신에게 전송
	   2. method : 전송방식
                   GET : URL 주소를 통해서 전송(QueryString 방식)
                   Query 
                   POST : request body에 넣어서 전송(보안성좋다)
       cf) URL => https://www.w3schools.com/action_page.do?fname=John&Iname=Doe
                  protocol : https
                  host : www.w3shools.com(port 생략되어 있음 : https는 port를 내부로 hide처리함)
                  path : action_page.do
                  query : fname=John&Iname=Doe
                          name=value&name=value <- Query
-->

<body>

	<form>
		<table border="1">
			<!-- 1번째줄 required:반드시입력(이 input안에 정보를 입력해야 넘어간다) -->
			<tr>
				<th>이름</th>
				<td><input type="text" name="name" autofocus placeholder="이름을 입력하세요" required="required"></td>
			</tr>
			
			<!-- 2번째줄 -->
			<tr>
				<th>아이디</th>
				<td><input type="text" size="30" name="id" autofocus placeholder="아이디는 4~8자리 영숫자 조합" required="required"></td>
			</tr>
			
			<!-- 3번째줄 -->
			<tr>
				<th>비밀번호</th>
				<td><input type="password" size="30" name="pwd" autofocus placeholder="비밀번호 4~6자리 영숫자 조합" required="required"></td>
			</tr>
			
			<!-- 4번째줄 checked:기본으로 체크되어 있음 name이 같아야 그룹으로 잡혀서 체크 해제가 된다. -->
			<tr>
				<th>성별</th>
				<td>
				<input type="radio" name="gender" value="남자" checked="checked">남자
				<input type="radio" name="gender" value="여자">여자
				</td>
			</tr>
			
			<!-- 5번째줄 -->
			<tr>
				<th>취미</th>
				<td>
				<input type="checkbox" name="hobby" value="여행">여행
				<input type="checkbox" name="hobby" value="보드게임">보드게임
				<input type="checkbox" name="hobby" value="독서">독서
				<input type="checkbox" name="hobby" value="프로그래밍">프로그래밍
				</td>
			</tr>
			
			<!-- 6번째줄 -->
			<tr>
				<th>친구</th>
				<td>
					<input name="friend"><br>
					<input name="friend"><br>
					<input name="friend"><br>
				</td>
			</tr>
			
			<!-- 7번째줄 -->
			<tr>
				<th>혈액형</th>
				<td>
				<select name="blood">
					<option value="A형">A형</option>
					<option value="B형">B형</option>
					<option value="O형">O형</option>
					<option value="AB형">AB형</option>
				</select>
				</td>
			</tr>
			
			<!-- 8번째줄 -->
			<tr>
				<th>자기소개</th>
				<td>
					<textarea name="profile" rows="5" cols="40"></textarea>
				</td>
			</tr>
			
			<!-- 버튼 -->
			<tr>
				<td colspan="2" align="center">
					<input type="button" value="전송" onclick="send(this.form);">
					<input type="reset" value="취소">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

 

 

Servlet

package action;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

// url-pattern 문제발생 : LifeCycleException 발생 (WebServlet이 중첩될시)
// 1. 서블릿 매핑에서 유효하지 않은 <url-pattern> : /xxx.do
// 2. <url-pattern> 중복되는 경우

@WebServlet("/member_register.do")
public class MemberRegisterAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request,
			HttpServletResponse response
			) throws ServletException, IOException {
		
		//0.수신인코딩 설정(기본적으로 설정해주지 않으면 깨진다)
		request.setCharacterEncoding("utf-8");
		
		//1.parameter 받기
		// html 내부의 name이 넘어가는 것이다.
		String name = request.getParameter("name");
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");
		String gender = request.getParameter("gender");
		String blood = request.getParameter("blood");
		String profile = request.getParameter("profile");
		
		// parameter 이름이 동일한 이름으로 들어온 경우에는 배열로 받는다.
		// checkbox : 체크된 목록만 넘어온다(체크항목이 없으면 null)
		String [] hobby_array = request.getParameterValues("hobby");
		//                         hobby=독서&hobby=영화&hobbyy=프로그래밍
		//                             0        1          2
		// String [] hobby_array = { "독서", "영화" , "프로그래밍" };
		// 취미목록
		String hobby_list = "취미없음";
		if(hobby_array != null) {
			StringBuffer sb = new StringBuffer();
			for(String hobby : hobby_array) {
			// 메모리 낭비가 심한 방식이다.
			// hobby_list += hobby + " "; // hobby_list = "독서 " + "영화 " + "프로그래밍 "
				sb.append(hobby);
				sb.append(" ");
			}
			// trim()은 중간공백 제거가 아닌 양쪽 공백제거이다.
			hobby_list = sb.toString().trim();
		}
		
		// input : 모든값이 다 넘어온다
		String [] friend_array = request.getParameterValues("friend");
		//                       friend=철수&friend=&friend=
		//String [] friend_array = { "철수", "", "" };
		String friend_list = "";
		
		StringBuilder sb = new StringBuilder();
		for(String friend : friend_array) {
			sb.append(friend);
			sb.append(" ");
		}
		friend_list = sb.toString().trim();
		
		if(friend_list.isEmpty()) {
			friend_list = "친구없음";
		}
		
		// 응답처리
		response.setContentType("text/html; charset=utf-8;");
		
		PrintWriter out = response.getWriter();
		
		out.print("<html>");
		out.print("<body>");
		out.print("<table border='1'>");
		out.printf("<tr><th>이름</th><td>%s</td></tr>", name);
		out.printf("<tr><th>아이디</th><td>%s</td></tr>", id);
		out.printf("<tr><th>비밀번호</th><td>%s</td></tr>", pwd);
		out.printf("<tr><th>성별</th><td>%s</td></tr>", gender);
		out.printf("<tr><th>혈액형</th><td>%s</td></tr>", blood);
		out.printf("<tr><th>자기소개</th><td>%s</td></tr>", profile);
		out.printf("<tr><th>취미</th><td>%s</td></tr>", hobby_list);
		out.printf("<tr><th>친구</th><td>%s</td></tr>", friend_list);
		out.printf("<tr><td colspan='2'><a href='input.html'>다시하기</a></td></tr>");
		out.print("</table>");
		out.print("</body>");
		out.print("</html>");
		
	}
}

 

 

 

- 배열로 받을때의 강점

// parameter 이름이 동일한 이름으로 들어온 경우에는 배열로 받는다.
String [] hobby_array = request.getParameterValues("hobby");
String [] friend_array = request.getParameterValues("friend");

 


 

 

 

 

JSP에서 text 값을 응답받을 때

 

 JSP(Java Server Page)

반응형

'java(2)↗' 카테고리의 다른 글

Java Templates (Mybatis 적용 20240711)  (0) 2024.07.11
JSP를 활용해서 웹사이트 만들기  (0) 2024.06.05
java 알고리즘 보물창고  (0) 2024.05.29
java Stream  (0) 2024.05.29
java 2차원배열 및 알고리즘  (0) 2024.05.14