WEB/JSP
[JSP] servlet, action tag form
hvoon
2022. 9. 9. 19:08
servlet
예전 자료처리 방식
-정보입력 페이지(jsp) → 정보처리페이지(jsp) → 처리결과페이지(jsp)
-주로 윈도우 서버(Window NT)에서 ASP 언어를 사용할 때 많이 사용하던 방식
다른 방식으로 JAVA&JSP로 넘어오면서 자바 프로그램 코드가 실행가능해지는 WAS 서버를 사용하고 이 서버에서는 정보처리페이지(jsp)를 사용하지 않는 대신 Servlet이라는 웹용 클래스(서버에 생성하고 서버에서 실행하는)를 생성하여 정보 처리 명령을 실행하게함
-서블릿을 사용한다는 의미는 앞선 예제(081~083, 071~073)의 XXX_do.jsp 파일의 역할을 서버 내부에 감춰져서 공개되지 않을 웹클래스를 일임하는 것과 같음
-프로그래밍 명령등의 로직과 알고리즘이 공개되는 것이 부담스럽거나 자료이동을 감추고 싶다면 위와 같은 서블릿에 그 동작을 일임하듯 이름 불러 사용함. Forward_useServlet: 서블릿 이름
-사용할 서블릿의 위치는 파일들이 저장되는 최상단 위치한 것으로 인식하기 때문에 현재 페이지에서의 상대 위치는 (../)로 연결하여 지정함
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>101_Forward_UseServlet.jsp</title>
</head>
<body>
<form method="post" action="../Forward_useServlet">
<label for="useid">아이디: </label>
<input type="text" id="id" name="useid"><br>
<label for="usepwd">암 호: </label>
<input type="password" id="pwd" name="usepwd"><br>
<input type="submit" value="로그인">
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>102_Forward_UseServlet_ok.jsp</title>
</head>
<body>
<h1><%=request.getAttribute("name") %>님 로그인하셨습니다.</h1>
<h1>저희 사이트에 방문해 주셔서 감사합니다</h1>
</body>
</html>
Servlet 파일 생성


package com.forward.servlet;
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;
@WebServlet("/Forward_useServlet")
public class Forward_useServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public Forward_useServlet() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
// form에서 get 방식으로 서블릿으로 이동되었을 때
// 실행될 명령이 적힘
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
// form에서 post 방식으로 서블릿으로 이동되었을 때
// 실행될 명령이 적힘
// doGet(request, response);
// 서블릿을 호출할 때 방식이 post이든 get이든
// 실행할 명령이 똑같다면 doGet에 코드를 쓰고
// doPost에서는 doGet을 재호출해서 사용함
// 전달된 파라미터에 한글이 있다면
// 또는 다시 내보내질 데이터에 한글이 있다고 인코딩 방식을 설정함
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
// 전달된 파라미터 변수에 저장
String id=request.getParameter("id");
String pwd=request.getParameter("pwd");
if(id.equals("hong")&&pwd.equals("1234")) {
request.setAttribute("name", "홍길동");
RequestDispatcher dp
=request.getRequestDispatcher("02/102_Forward_UseServlet_ok.jsp");
dp.forward(request, response);
}else {
response.sendRedirect("02/101_Forward_UseServlet.jsp");
// 아이디와 암호가 틀리면 리셋됨
}
}
}
servlet을 이용하여 회원정보 입력
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>111_JSP_Servlet_Ex01.jsp</title>
</head>
<body>
<form method="post" action="../Join_Servlet">
<label for="id">아이디: </label>
<input type="text" id="id" name="id"><br>
<label for="pwd">암 호: </label>
<input type="password" id="pwd" name="pwd"><br>
<label for="gender">성별: </label>
<input type="radio" id="gender" name="gender" value="남자"> 남자
<input type="radio" id="gender" name="gender" value="여자"> 여자 <br><br>
<label for="chk_mail"> 메일 정보 수신 여부: </label>
<input type="radio" id="chk_mail" name="chk_mail" value="수신">수신
<input type="radio" id="chk_mail" name="chk_mail" value="거부">거부<br><br>
<label for="content"> 간단한 가입 인사를 적어주세요. </label><br>
<textarea name="content" rows="3" cols="35"></textarea><br><br>
<label for="item">구입항목</label><br><br>
<input type="checkbox" name="item" value="신발"> 신발
<input type="checkbox" name="item" value="가방"> 가방
<input type="checkbox" name="item" value="벨트"> 벨트 <br>
<input type="checkbox" name="item" value="모자"> 모자
<input type="checkbox" name="item" value="시계"> 시계
<input type="checkbox" name="item" value="쥬얼리"> 쥬얼리 <br><br>
<span style="float:left; margin-right:20px">
<label for="job">직업</label>
<select id="job" name="job" size="1">
<option value="">선택</option>
<option value="학생">학생</option>
<option value="컴퓨터/인터넷">컴퓨터/인터넷</option>
<option value="언론">언론</option>
<option value="공무원">공무원</option>
<option value="군인">군인</option>
<option value="서비스업">서비스업</option>
<option value="교육">교육</option>
</select> </span>
<label for="interest" style="float:left;">관심분야</label><br>
<select id="interest" name="interest" size="5" multiple="multiple">
<option value="1">에스프레소</option>
<option value="2">로스팅</option>
<option value="3">생두</option>
<option value="4">원두</option>
<option value="5">핸드드립</option>
</select><br><br>
<input type="submit" value="회원가입">
</form>
</body>
</html>


<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>112_JSP_Servlet_Ex02.jsp</title>
</head>
<body>
<%
String id=(String)request.getParameter("id");
String pwd=(String)request.getParameter("pwd");
String gender=(String)request.getParameter("gender");
String chk_mail=(String)request.getParameter("chk_mail");
String content=(String)request.getParameter("content");
String [] item=(String[])request.getParameterValues("item"); // 배열로 저장
String job=(String)request.getParameter("job");
String interest []=(String[])request.getParameterValues("interest");
%>
아이디: <%=id %><br/>
암호: <%=pwd %><br/>
성별: <%=gender %><br/>
메일수신: <%=chk_mail %><br/>
하고싶은말: <%=content %><br/>
구입항목: <% for(String s: item) out.print(s+" "); %><br/>
직업: <%=job %><br/>
관심분야: <% for(String s: interest) out.print(s+" "); %><br/>
</body>
</html>
package com.join.servlet;
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;
@WebServlet("/Join_Servlet")
public class Join_Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public Join_Servlet() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String id=request.getParameter("id");
String pwd=request.getParameter("pwd");
String gender=request.getParameter("gender");
String chk_mail=request.getParameter("chk_mail");
String content=request.getParameter("content");
String [] item= request.getParameterValues("item"); // 배열로 저장
String job=request.getParameter("job");
String [] interest = request.getParameterValues("interest");
request.setAttribute("id",id);
request.setAttribute("pwd",pwd);
// if(Integer.parseInt(gender)==1)
// request.setAttribute("gender", "남성");
if(gender.equals("1")) request.setAttribute("gender", "남성");
else request.setAttribute("gender", "여자");
if(chk_mail.equals("1")) request.setAttribute("chk_mail", "수신");
else request.setAttribute("chk_mail", "거부");
request.setAttribute("content",content);
// item 처리
// 선택된 번호에 따른 물건 이름이 저장될 배열을 전달된 배열의 크기와 같은 크기로 생성함
String [] sItem=new String[item.length];
for(int i=0; i<item.length; i++) {
switch(item[i]) {
case "1": sItem[i]="신발"; break;
case "2": sItem[i]="가방"; break;
case "3": sItem[i]="벨트"; break;
case "4": sItem[i]="모자"; break;
case "5": sItem[i]="시계"; break;
case "6": sItem[i]="쥬얼리"; break;
}
}
request.setAttribute("item",sItem);
switch(job) {
case "1": request.setAttribute("job","학생"); break;
case "2": request.setAttribute("job","컴퓨터/인터넷"); break;
case "3": request.setAttribute("job","언론"); break;
case "4": request.setAttribute("job","공무운"); break;
case "5": request.setAttribute("job","군인"); break;
case "6": request.setAttribute("job","서비스업"); break;
case "7": request.setAttribute("job","교육"); break;
}
String [] inter=new String[interest.length];
for(int i=0; i<interest.length; i++) {
switch(interest[i]) {
case "1": inter[i]="에스프레소"; break;
case "2": inter[i]="로스팅"; break;
case "3": inter[i]="생두"; break;
case "4": inter[i]="원두"; break;
case "5": inter[i]="핸드드립"; break;
}
}
request.setAttribute("interest",inter);
RequestDispatcher dp=request.getRequestDispatcher("02/112_JSP_Servlet_Ex02.jsp");
dp.forward(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
doGet(request, response);
}
}
action tag form
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>121_ActionTagForm.jsp</title>
</head>
<body>
<form action="122_ActionTag_do.jsp">
아아디: <input type="text" name="userID"><br>
암 호: <input type="password" name="userPwd"><br>
<input type="radio" name="loginCheck" value="user" checked="checked"> 사용자
<input type="radio" name="loginCheck" value="manager"> 관리자<br>
<input type="submit" value="회원가입">
</form>
</body>
</html>
1. respose.sendRedirect로 사용한 경우
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.URLEncoder" %>
<%
String userID=request.getParameter("userID");
String userPwd=request.getParameter("userPwd");
String loginCheck=request.getParameter("loginCheck");
// 사용자 로그인일 경우...123_ActionUser.jsp로 이동
// 관리자 로그인일 경우...124_ActionManager.jsp로 이동
if(userID.equals("scott")&&userPwd.equals("1234")&&loginCheck.equals("user")){
response.sendRedirect(
"123_ActionUser.jsp?userID="+userID+"&userName="+URLEncoder.encode("홍길남","UTF-8")
);
} else if(userID.equals("scott")&&userPwd.equals("1234")&&loginCheck.equals("manager")){
response.sendRedirect(
"124_ActionManager.jsp?userID="+userID+"&userName="+URLEncoder.encode("홍길동","UTF-8")
);
} else{
response.sendRedirect("121_ActionTagForm.jsp");
}
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>123_ActionUser.jsp</title>
</head>
<body>
<h3>사용자로 로그인 성공</h3>
<% String userName=request.getParameter("userName");
%>
<%=userName %> ( <%=request.getParameter("userID") %> )님 환영합니다.
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>124_ActionManager</title>
</head>
<body>
<h3>관리자로 로그인 성공</h3>
<% String userName=request.getParameter("userName");
%>
<%=userName %> ( <%=request.getParameter("userID") %> )님 환영합니다.
</body>
</html>
2. forward를 사용한 경우
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.URLEncoder" %>
<%
String userID=request.getParameter("userID");
String userPwd=request.getParameter("userPwd");
String loginCheck=request.getParameter("loginCheck");
String url=null;
if(userID.equals("scott")&&userPwd.equals("1234")&&loginCheck.equals("user")){
url="123_ActionUser.jsp";
request.setAttribute("userName","홍길남");
RequestDispatcher dp=request.getRequestDispatcher(url);
dp.forward(request, response);
} else if(userID.equals("scott")&&userPwd.equals("1234")&&loginCheck.equals("manager")){
url="124_ActionManager.jsp";
request.setAttribute("userName","홍길동");
RequestDispatcher dp=request.getRequestDispatcher(url);
dp.forward(request, response);
} else{
response.sendRedirect("121_ActionTagForm.jsp");
}
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>123_ActionUser.jsp</title>
</head>
<body>
<h3>사용자로 로그인 성공</h3>
<%
String userName=(String)request.getAttribute("userName");
%>
<%=userName %> ( <%=request.getParameter("userID") %> )님 환영합니다.
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>124_ActionManager</title>
</head>
<body>
<h3>관리자로 로그인 성공</h3>
<%
String userName=(String)request.getAttribute("userName");
%>
<%=userName %> ( <%=request.getParameter("userID") %> )님 환영합니다.
</body>
</html>
3. Action 태그를 사용한 경우
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.URLEncoder" %>
<%
String userID=request.getParameter("userID");
String userPwd=request.getParameter("userPwd");
String loginCheck=request.getParameter("loginCheck");
if(userID.equals("scott")&&userPwd.equals("1234")&&loginCheck.equals("user")){
%>
<jsp:forward page="123_ActionUser.jsp">
<jsp:param name="userName" value='<%=URLEncoder.encode("홍길남","UTF-8") %>'/>
</jsp:forward>
<%
} else if(userID.equals("scott")&&userPwd.equals("1234")&&loginCheck.equals("manager")){
%>
<jsp:forward page="124_ActionManager.jsp">
<jsp:param name="userName" value='<%=URLEncoder.encode("홍길동","UTF-8") %>'/>
</jsp:forward>
<%
} else{
response.sendRedirect("121_ActionTagForm.jsp");
}
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.URLDecoder" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>123_ActionUser.jsp</title>
</head>
<body>
<h3>사용자로 로그인 성공</h3>
<%
String userName=URLDecoder.decode(request.getParameter("userName"),"UTF-8");
%>
<%=userName %> ( <%=request.getParameter("userID") %> )님 환영합니다.
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.URLDecoder" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>124_ActionManager</title>
</head>
<body>
<h3>관리자로 로그인 성공</h3>
<%
String userName=URLDecoder.decode(request.getParameter("userName"),"UTF-8");
%>
<%=userName %> ( <%=request.getParameter("userID") %> )님 환영합니다.
</body>
</html>
결과