반응형
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 |