본문 바로가기
멀티캠퍼스 풀스택 과정/백엔드

백엔드1-4. JSP-3: 내장객체 request 사용해서 서버로 데이터 보내기

by 이쟝 2022. 3. 3.
Request객체: JSP 페이지에서 가장 많이 사용되는 객체로
웹 브라우저와 같은 클라이언트로부터의 요청 정보를 담아 제공하는 객체

 

request 메서드(javax.servlet.http.HttppServletRequest의 메서드)

 

request.getRemoteAddr( ) 접속자 컴퓨터의 ip
request.request.getCharacterEncoding() 인코딩 코드값
request.getContentType() contentType
request.getMethod()  전송방식(get or post 방식 구분)
request.getProtocol() 해당 Protocol
request.getRequestURI() 현재 URI 주소
request.getContextPath() contextPath
request.getServerPort() port벊호
request.getServletContext().getRealPath("/") 절대주소

 

URI와 URL의 차이: URI가 URL의 상위개념으로 URI는 URL에서 Context Path 이하의 나머지 부분을 의미한다. 
URL에서 도메인을 제외한 부분이라고 할 수 있다. 

 

 

Parameter 메서드

getParameter(name)  name에 해당하는 value를 가져온다.
getParameterValues(name) name에 해당하는 value들을 가져온다.(예, checkbox)
getParameterNames 파라미터 name들을 가져온다.

 

1. a 태그를 이용해 서버로 데이터 보내기

a 태그는 get 방식만 가능하다.(검색어 처리 할 때 주로 사용)

 

기본 HTML 파일 생성하고 a 태그를 이용해서 데이터 생성하기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>link to send data</title>
</head>
<body>
<h3>a 태그를 이용해 서버로 데이터 보내기</h3>
<a href="alinkOk.jsp?name=이아무개&num=1106&강동구 천호동">Click!!</a>
</body>
</html>

 

a 태그로 연결되는 alinkOk.jsp 파일 생성해서 클라이언트가 보낸 데이터를 서버로 가져오기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	//클라이언트가 보낸 데이터를 서버로 가져오기
	String name = request.getParameter("name");

	// 네트워크로 전송되는 데이터는 기본적으로 문자열이다. 
    // 숫자도 문자열로 들어오기 때문에 숫자로 쓰려면 변환해주어야 한다.
	int num = Integer.parseInt(request.getParameter("num"));
	String addr = request.getParameter("addr");
	
	out.println("이름->"+name);
	out.println("<br/>번호->"+num);
	System.out.println("<br/>주소->"+addr);  
	
%>

 

더보기
  • System.out.println은 Console창에서 확인할 수 있다.
  • Click!!을 누르면 이름과 번호를 볼 수 있다.
  • 데이터가 URL에 보인다면 -> get 방식!!!
  • 주의할 점은 jsp 파일로 서버를 실행하려면 오류가 난다 -> 앞페이지에서 전달받은 parameter가 없기 때문이다. 

2. Java Script의 location객체로 링크 전송하기

기본 HTML 파일 생성하고 button을 이용해서 onClick이벤트가 실행될 때 dataSend( )호출. location 객체로 jsp파일로 이동

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>link to send data</title>
<script>
	function dataSend(){
		location.href="locationOk.jsp?pageNum=7&searchWord=컴퓨터"; 
	}
</script>
</head>
<body>
<h2>JavaScript location으로 링크 전송</h2>
<button onClick="dataSend()">Click!!!</button>
</body>
</html>

 

dataSend안에 있는 location객체로 연결되는 locationOk.jsp 파일 생성

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	int pageNum = Integer.parseInt(request.getParameter("pageNum"));
	String searchWord = request.getParameter("searchWord");
	
	out.print("page number:"+pageNum);
	out.print("<br/>search word:"+searchWord);
%>


3. Form으로 데이터 보내기

 

기본 HTML 파일 생성하기

id는 없어도 되지만 서버로 데이터를 보내기 위해서는 name이 있어야 한다. 

multiple은 두 개 checked 가능하다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>link to send data</title>
<script>
	function dataSend(){
		location.href="locationOk.jsp?pageNum=7&searchWord=컴퓨터"; // 내장객체를 만나면서 jsp 파일로 이동
	}
</script>
</head>
<body>
<h2>form으로 서버에 데이터 보내기</h2>
<form method="post" action="formOk.jsp">
	이름 : <input type="text" name="username"/><br/>
	아이디 : <input type="text" name="userid"/><br/>
	비밀번호 : <input type="password" name="userpwd"/><br/>
	운동 : <input type="checkbox" name="exercise" value="swimming"/>swimming
		  <input type="checkbox" name="exercise" value="climming"/>climbing
		  <input type="checkbox" name="exercise" value="hiking"/>hiking
		  <input type="checkbox" name="exercise" value="dancing"/>dancing
		  <input type="checkbox" name="exercise" value="surffing"/>surfing<br/>
	관심분야 : <select name="interest" multiple> 
				<option value="music">music</option>
				<option value="art">art</option>
				<option value="math">math</option>
				<option value="athletic">athletic</option>
				<option value="english">english</option>
			</select><br/>
	<input type="submit" value="등록"/>
</form>
</body>
</html>

 

이전페이지에 있는 폼의 데이터를 폼으로 가져오기(복수선택)(fromOk.jsp 파일 생성)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Arrays, java.util.Enumeration"%>
<!-- 이전페이지에 있는 폼의 데이터를 폼으로 가져오기 -->
<%

	request.setCharacterEncoding("UTF-8"); 
	String username = request.getParameter("username");
	String userid = request.getParameter("userid");
	String userpwd = request.getParameter("userpwd");
	
	// 변수 1개에 여러개의 데이터가 전송될때는 배열로 전송한다.
	String exercise[] = request.getParameterValues("exercise");
	String interest[] = request.getParameterValues("interest"); 
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
username : <%=username %><br/>
userid : <%=userid %><br/>
userpwd : <%=userpwd %><br/>
exercise :
<%  // 반복문 사용
	for(int i=0; i<exercise.length; i+=1){
		%>
			<%=exercise[i] %>
		<% 
	}
%>
<br/>

interest : <%=Arrays.toString(interest)%> <!-- array의 toString 사용 -->

<h3>request객체에 메서드</h3>
<%
	Enumeration<String> paraNames = request.getParameterNames();
	while(paraNames.hasMoreElements()){ // 있으면 true, 없으면 false
		//out.println(paraNames.nextElement());
		%>
			<li><%=paraNames.nextElement() %></li>
		<%
	}
%>
</body>
</html>
더보기
  • setCharacterEncoding으로 utf-8로 세팅할 수 있다. POST 방식으로 전송될 때 UTF-8이 아니면 깨진다. (데이터 가져오기 전에 맨 위에 먼저 인코딩)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!-- 이전페이지에 있는 폼의 데이터를 폼으로 가져오기 -->
<%
	//post 방식 전송일 때 request객체에 한글을 utf-8로 세팅 후 정보를 얻어온다.
	request.setCharacterEncoding("UTF-8");
    
	String username = request.getParameter("username");
	String userid = request.getParameter("userid");
	String userpwd = request.getParameter("userpwd");
%>
...
<body>
username : <%=username %><br/>
userid : <%=userid %><br/>
userpwd : <%=userpwd %><br/>
</body>
</html>
  • 변수 1개에 여러 데이터가 전송될 때는 배열로 처리한다. (checked된 것만 넘어오게 된다.)
    • 반복문 사용
    • Array클래스의 toString 메서드 사용
<%@ page import="java.util.Arrays"%>
<%
    String exercise[] = request.getParameterValues("exercise");
	String interest[] = request.getParameterValues("interest"); 
%>
...
<body>
username : <%=username %><br/>
userid : <%=userid %><br/>
userpwd : <%=userpwd %><br/>
exercie : <!-- 반복문 사용 -->
	<% 
	for(int i=0; i<exercise.length; i+=1){
	%>
		<%=exercise[i] %>
	<%
	}
	%>
<br/>     <!-- Arrays 클래스를 import해서 사용 -->
interest : <%= Arrays.toString(interest) %>
</body>
</html>
  • Enumeration 사용
<%@ page import="java.util.Arrays, java.util.Enumeration"%>

...

<h3>request객체에 메서드</h3>
<%
	Enumeration<String> paraNames = request.getParameterNames();
	while(paraNames.hasMoreElements()){ // 있으면 true, 없으면 false
		//out.println(paraNames.nextElement());
		%>
			<li><%=paraNames.nextElement() %></li>
		<%
	}
%>

 


https://everysmallstep.tistory.com/148

https://dololak.tistory.com/140