위로 아래

Form, Input 태그

<form name="frmLogin" method="get" action="Login">
	아이디 : <input type="text" name="user_id"><br>
	비밀번호 : <input type="password" name="user_pw"><br>
	<input type=submit value="전송">
</form>

form

  1. name : form 태그의 식별용 이름. 여러 개의 form이 있을 경우 구분해준다.
  2. method : get, post 전송 방식 선택
  3. action : 데이터를 전송할 서블릿이나 JSP 파일 이름. 서블릿으로 전송 시 에너테이션 매핑 사용.

input

  1. type : input 기능 타입
  2. name : key(키) 역할.
  3. value : value(값) 역할.

 

 


서블릿으로 유저 요청 받기

  1. HttpServletRequest 사용

 

메소드 목록 (HttpServletRequest API)

  1. 사용자 입력 데이터 처리 ( 폼 데이터 ) 
  2. 한글 인코딩
  3. 요청 header 얻기
  4. 세션 처리
  5. 쿠키 처리
  6. 요청 scope에 데이터 저장
  7. forward 처리
메소드 기능 반환형
request.getParameter(String name) name의 값을 알고 있을 때, 그리고 name에 대한 전송된 값을 받아오는 데 사용. String
request.getParameterValues(String name) 같은 name에 대해 여러 개의 값을 얻을 때 사용 String[]
request.getPararmeterNames() name을 모를 때 사용 enumeration
더보기
메소드 기능 반환형
authenticate(HttpServletResponse response) 현재 요청한 사용자가 ServletContext 객체에 대한 인증을 하기 위한 컨테이너 로그인 메커니즘을 사용 boolean
changeSessionId() 현재 요청과 연관된 현재 세션의 id를 변경하여 새 세션 id를 반환 String
getContextPath() 요청한 컨텍스트를 가리키는 URI 반환 String
getCookies() 클라이언트가 현재의 요청과 함께 보낸 쿠키 객체들에 대한 배열을 반환 Cookie[]
getHeader(String name) 특정 요청에 대한 헤더 정보를 문자열로 반환 String
getHeaderNames() 현재의 요청에 포함된 헤더의 name 속성을 enumeration으로 반환 enumeration<String>
getMethod() 현재 요청이 GET, POST 또는 PUT 방식 중 어떤 HTTP 요청인지 반환 String
getRequestURI() 요청한 URL의 컨텍스트 이름과 파일 경로까지 반환 String
getServletPath() 요청한 URL에서 서블릿이나 JSP 이름을 반환 String
getSession() 현재의 요청과 연관된 세션을 반환. 없으면 새로 만들어서 반환. HttpSession

 

request.getParameter(String name) 예시

더보기
<!-- HTML 파일 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form name="frmLogin" method="get" action="../lg">
	아이디 : <input type="text" name="user_id"><br>
	비밀번호 : <input type="password" name="user_pw"><br>
	<input type=submit value="전송">
</form>
</body>
</html>
<!-- Servlet 파일 -->
import java.io.IOException;
import javax.servlet.ServletConfig;
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("/lg")   // 매핑
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	public void init(ServletConfig config) throws ServletException {
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// name이 user_id인 input 태그의 value 불러오기
		String user_id = request.getParameter("user_id");
		String user_pw = request.getParameter("user_pw");
		System.out.println(user_id);
		System.out.println(user_pw);
	}
	
	public void destroy() {
	}

}

 

request.getParameterValues(String name) 예시

더보기
<!-- HTML 파일 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form name="frmLogin" method="get" action="../lg2">
	선택 과목 : <input type="checkbox" name="subject" value="java" checked>자바
	<input type="checkbox" name="subject" value="c언어">c언어
	<input type="checkbox" name="subject" value="JSP">JSP
	<input type="checkbox" name="subject" value="안드로이드">안드로이드<br>
	<input type=submit value="전송">
</form>
</body>
</html>
<!-- Servlet 파일 -->
import java.io.IOException;
import javax.servlet.ServletConfig;
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("/lg2")   // 매핑
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	public void init(ServletConfig config) throws ServletException {
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String[] user_subject = request.getParameterValues("subject");
		for(String x:user_subject) {
			System.out.println(x);
		}
	}
	
	public void destroy() {
	}

}

 

request.getParameterNames() 예시

더보기
<!-- HTML 파일 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form name="frmLogin" method="get" action="../lg3">
	선택 과목 : <input type="checkbox" name="subject" value="java" checked>자바
	<input type="checkbox" name="subject" value="c언어">c언어
	<input type="checkbox" name="subject" value="JSP">JSP
	<input type="checkbox" name="subject" value="안드로이드">안드로이드<br>
	<input type=submit value="전송">
</form>
</body>
</html>
<!-- Servlet 파일 -->
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
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("/lg3")
public class inputServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	public void init(ServletConfig config) throws ServletException {
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Enumeration enu = request.getParameterNames();
		while(enu.hasMoreElements()) {
			String name = (String) enu.nextElement();
			String[] values = request.getParameterValues(name);
			for(String x:values) {
				System.out.println("name : "+name+", value : "+x);
			}
		}
	}

	public void destroy() {
	}

}

 

 

 


서블릿으로 유저에게 응답하기

  1. HttpServletResponse 사용
  2. request.setCharaterEncoding("utf-8") : 웹 브라우저에서 전송된 데이터의 인코딩 설정
  3. response.setContentType("text/html;charset=utf-8") : 웹 브라우저로 전송할 데이터의 종류(html)과 인코딩 설정
  4. PrintWriter out = response.getWriter() : HttpServletResponse 객체의 getWriter를 이용해, 출력 스트림 PrintWriter 객체 받아오기
  5. out.print(<html> 코딩 들어간 문자열) : PrintWriter의 메소드 print().

 

메소드 목록(HttpServletResponse API)

  1. 응답처리
  2. Header에 저장
  3. 쿠키 저장
  4. redirect 처리
메소드 이름 기능 반환형
addCookie(Cookie cookie) 응답에 쿠키를 추가 void
addHeader(String name, String value) name과 value를 헤더에 추가 void
encodeURL(String url) 클라이언트가 쿠키를 지원하지 않을 때 세션 id를 포함한 특정 URL을 인코딩 String
getHeaderNames() 현재 응답의 헤더에 포함된 name을 반환 Collection<String>
sendRedirect (String location) 클라이언트에게 리다이렉트 응답을 보낸 후 특정 URL로 다시 요청 void
getPathInfo() 클라이언트가 요청 시 보낸 URL과 관련된 추가 경로 정보 반환 String

 

 

 

response 예시 (받은 요청 html로 응답)

더보기
<!-- HTML 파일 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form name="frmLogin" method="get" action="../lg4">
	아이디 : <input type="text" name="user_id"><br>
	비밀번호 : <input type="password" name="user_pw"><br>
	<input type=submit value="전송">
</form>
</body>
</html>
// 서블릿 파일
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
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("/lg4")
public class inputServlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public inputServlet2() {
        super();
    }

	public void init(ServletConfig config) throws ServletException {
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");   // 요청 받은 정보의 인코딩 설정
		response.setContentType("text/html;charset=utf-8");   // 응답할 정보가 html임을 알림"
		PrintWriter out = response.getWriter();
		String user_id = request.getParameter("user_id");
		String user_pw = request.getParameter("user_pw");
		
		String data = "<html>";
				data += "<body>";
				data += "아이디" + user_id;
				data += "<br>";
				data += "비밀번호" + user_pw;
				data += "</body>";
				data += "</html>";
		out.print(data);					
	}
	public void destroy() {
	}
}

 

 

 

 

 


서블릿으로 jsp 호출하기

 

request - response 관계에서 페이지를 호출하는 2가지 방법

  1. forward : A.jsp -> Servlet -> B.jsp (파라미터 정보를 B까지만 가지고 간 후 다음 단계에서 삭제한다)
  2. sendRedirect : 파라미터 정보는 제외하고, 단순 페이지 호출만 한다

 

forward 방식 (RequestDispatcher 이용)

  1. RequestDispatcher rd = request.getRequestDispatcher(test.jsp);
  2. rd.forward(request, response);

 

Redirect 방식 

  1. response.sendRedirect(test.jsp);

 

JSP -> Servlet으로 보낸 데이터를 계산 후 다시 Servlet -> JSP로 보내기

  1. JSP -> 서블릿 : request.getParameter("jsp form태그의 name 이름") 사용
  2. 서블릿 : request.setAttribute("새로운 속성 이름", result)로 속성 저장 (result는 위의 Parameter를 이용해 계산한 값)
  3. 서블릿 -> JSP : request.getAttribute("속성 이름") 사용

 

예시

더보기
<!-- 입력 JPS 페이지 ResponseEx.jsp 파일 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form name="frmLog" method="post" action="../ex1">
	<p>아이디 : <input type="text" name ="id"></p>
	<p>비밀번호 : <input type="password" name ="pw"></p>
	<input type="submit" value="전송">
</form>
</body>
</html>
// 아이디에 11을 더해서 다음 JSP 페이지로 전송하는 Servlet 문서 ResponseEx.java
package com.beans;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
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("/ex1")
public class responseEx extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	public void init(ServletConfig config) throws ServletException {
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		String user_id = request.getParameter("id");
		String user_pw = request.getParameter("pw");
		
		user_id += "11"; //아이디에만 뒤에 11을 붙여서 출력.
		request.setAttribute("com_id", user_id);
		//아이디는 값을 변경했으니 다음 페이지로 넘기기 전에 setAttribute.
		//비밀번호는 이전 페이지 Parameter를 그대로 다음 페이지로 넘긴다
		
		RequestDispatcher rd = request.getRequestDispatcher("02ImplicitObject/ResponseEx2.jsp");
		rd.forward(request, response);
	}

	public void destroy() {
	}

}
<!-- Servlet으로부터 전송 받은 데이터를 출력하는 JSP 페이지 ResponseEx2.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>입력한 아이디 : <%=request.getAttribute("com_id")%></p>
<p>입력한 비밀번호 : <%=request.getParameter("pw")%></p>
</body>
</html>

 

 


매핑

에너테이션(annotation) 

web.xml 같은 설정을 건드리지 않고 @기호를 이용하여 소스코드에 직접 기능을 설정하는 방법

 

에너테이션 매핑 @WebServlet

반드시 HttpServlet 클래스를 상속 받아야 사용할 수 있다.

매핑
@WebServlet("/h")

매핑 호출
<form method="get" action="./h">
	<input type="text" name="name">
	<input type="submit" value="get 서블릿 전송">
</form>

예시

더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	String name
	=request.getParameter("name");
	System.out.println(name);
	out.print(name);
%>
package ex1;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/h")
public class Hello2 extends HttpServlet {
	
	@Override
	public void init() {
		System.out.println("여기는 init");
	}
	@Override
	public void doGet(HttpServletRequest request,
			HttpServletResponse response) throws IOException {
		System.out.println("한글 : GET");
		String name = request.getParameter("name");
		System.out.println(name);
	}
	@Override
	public void doPost (HttpServletRequest request,
			HttpServletResponse response) throws IOException {
		System.out.println("한글 : Post");
		response.getWriter().append("<h1>Haha</h1><br>");
		response.getWriter().append("<h1>한글</h1>");
	}	
	@Override
	public void destroy() {
		System.out.println("여기는 destroy");
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

    <%
    out.print("안녕");
    System.out.println("Hello");
    %>
    
    <form method="post" action="./h">
    	<input type="submit" value="post 전송">
    </form>
    <form method="get" action="NewFile.jsp">
    	<input type="text" name="name">
    	<input type="submit" value="get" name="name">
    </form>
    <form method="get" action="./h">
    	<input type="text" name="name">
    	<input type="submit" value="get 서블릿 전송">
    </form>