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">암 &nbsp; 호: </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">암 &nbsp; 호: </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>
	암 &nbsp; 호: <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>

 

결과