TIL

230213 [JSP, Servlet] (데이터 전달)

하차모 2023. 2. 13. 23:10

1. JSP -> JSP로 데이터 전달

 

1-1. form 태그

  form 태그 안에 있는 input 태그의 value 값을 가지고 action 속성의 페이지로 간다.

  input 태그의 name 속성에 이름을 설정해야 다음 페이지에서 호출할 수 있다.

  submit 타입의 input 태그로 다음 페이지로 이동한다.

<form action="a_test2.jsp" method="get">
	이름 <input type="text" name="name"><br>
	나이 <input type="text" name="age"><br>
    	연락처
	<select name="tel">
		<option value="010">010</option>
		<option value="011" selected>011</option>
	</select>
	<input type="text" name="tel"><br>
	<input type="submit" value="확인">
</form>

+) JSP 이름은 통상적으로 카멜 케이스보다 언더바와 소문자를 사용한다.

 

1-2. a 태그

  a 태그 href 속성에 페이지 경로 작성 후 ? 뒤에 전달할 정보를 작성한다.

  ? 뒤에는 이름=값 형태로 데이터를 전달할 수 있다. 마찬가지로 전달된 데이터를 받을 때는 이름으로 전달받는다.

  전달하는 데이터가 여러 개일 경우에는 &로 연결한다.

<a href="a_test2.jsp?name=java">데이터 하나 전달</a>
<a href="a_test2.jsp?name=java&age=20">데이터 두개 전달</a>

 

  전달된 데이터를 ${param.데이터이름 }으로 받아올 수 있다. 받은 데이터를 다시 넘길 때에도 문법은 같다.

  2개 이상의 데이터를 전달받은 경우 ${paramValues.데이터이름[인덱스번호] }로 받을 수 있다.

${param.name }<br>
${param.age }<br>
<a href="a_test3.jsp?name=${param.name }">이름값 전달</a>
${paramValues.tel[0] }
${paramValues.tel[1] }

 

 

2. JSP -> Servlet -> JSP -> Servlet ...로 데이터 전달

  JSP는 눈에 보이는 화면을, Servlet은 실행되는 기능을 담당한다.

  

  2-1. JSP -> Servlet

  이동할 페이지명에 확장자가 없으면 입력값과 똑같은 이름의 Servlet을 찾아간다. 페이지가 이동되어 Servlet이 실행되면 doGet(), doPost() 메소드 중 하나가 실행된다. form 태그의 method 속성값이 post일 경우에만 doPost()가 실행되고, 이 외에는 무조건 doGet() 메소드가 실행된다.

<%@ 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 action="Servlet01" method="get">
	이름 <input type="text" name="name"><br>
	나이 <input type="text" name="age"><br>
	<input type="submit" value="전송">
</form>
</body>
</html>

 

Servlet에서는 request.getParameter(데이터의 이름)으로 데이터를 받을 수 있다.

데이터를 다음 jsp로 보내고 싶을 때는 request.setAttribute(보낼 데이터의 이름, 데이터)로 보낼 수 있다.

public class Servlet01 extends HttpServlet {
private static final long serialVersionUID = 1L;
    
    public Servlet01() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//데이터 받기
		String name = request.getParameter("name");
		String age = request.getParameter("age");

		//데이터 적재
		request.setAttribute("id", "java");
		request.setAttribute("score", 80);
		
		request.setAttribute("name", name);
		
        	//jsp로 페이지 이동
        
		//페이지 이동(데이터 전달 X)
		//response.sendRedirect("result1.jsp");
		
		//데이터를 전달할 수 있는 페이지 이동 기법
		RequestDispatcher dispatcher = request.getRequestDispatcher("result1.jsp");
		dispatcher.forward(request, response);	
	}

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

 

 

+) taglib : JSTL(JSP 표준 태그 라이브러리). 공통으로 사용하는 코드를 태그 형식으로 사용할 수 있다.

   jar 파일을 다운받아 프로젝트 webapp/WEB-INF/lib에 옮겨 놓고 선언한 후 사용할 수 있다.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

 

c 태그는 자바 언어로 해석된다. (c 태그 내부에서 주석 사용 시 주의!)

<!-- if문 -->
<c:if test="${3 > 1 }">
	참입니다.
    <%-- c 태그 주석 처리 --%>
</c:if>

<!-- for-each문 -->
<!-- items : 반복을 돌릴 변수
	 var : 여러 데이터가 들어있는 변수에서 데이터를 하나씩 가져 왔을 때의 이름 -->
<c:forEach items="${list }" var="member">
	이름 : ${member.memName }
</c:forEach>