ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JSP] servlet, action tag form
    WEB/JSP 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>

     

    결과

    댓글

Designed by Tistory.