JSP: Tutorial

0
post-thumbnail

JSP

Java Server Page
HTML 코드와 Java 코드를 함께 사용하여 동적인 페이지를 만든다.


구조

웹 어플리케이션 이름

  • src
    • main
      • java
      • webapp
        • html
        • jsp
        • css
        • js
        • img
        • META-INF
        • WEB-INF
          • bin
          • conf
          • classes
          • src
          • lib
          • web.xml

구조를 갖추지 않고 톰캣 서버(톰캣 컨테이너)에서 웹 애플리케이션을 실행하면 오류가 발생한다.
다행히, Eclipse에서 기본적인 디렉터리 구조를 설정해주기 때문에 필요에 따라 추가만 해주면 된다.


컨테이너에 웹 애플리케이션 등록

Eclipse

지금까지 해왔던 방법
매우 간편하다

CATALINA_HOME

Tomcat root 디렉터리의 webapps/ 에, 웹 애플리케이션을 넣은 다음 Tomcat restart
→ Tomcat이 자동으로 웹 애플리케이션 인식 후 실행

server.xml

Tomcat Root 디렉터리의 conf/ 에서 찾을 수 있다
여기에 컨텍스트를 등록해주면 된다
태그를 사용한다

  • path: 컨텍스트 이름 / 브라우저에서 실제 웹 어플리케이션을 호출하는 이름
  • docBase: 컨텍스트에 연결된 웹 어플이 실제 위치한 경로 / WEB-INF 상위까지의 경로를 나타냄
  • reloadable: 실행 중 소스 코드가 수정될 경우 바로 갱신할지 설정

Eclipse ProjectExplorer의 Servers/ 에서도 확인 가능하다.


웹 애플리케이션 요청

  http://127.0.0.1:8080/컨텍스트 이름/리소스 경로
  • 컨텍스트 이름은 프로젝트 이름이다.
  • 리로스 경로는 기본적으로 webapp/ 으로 잡혀 있다
    예를 들어, Shop프로젝트의 webapp/hello.html의 URL은 다음과 같다
    http://localhost:8080/Shop/hello.html

컨텍스트?

웹 애플리케이션은 Eclipse로 따지면 프로젝트다.
프로젝트의 이름이 웹 어플이다.
컨텍스트는 웹 어플의 이름이다. 이게 무슨 소리냐?
컨텍스트는 특정 웹 어플리케이션의 심볼 정도로 해석할 수 있다.

  1. 중복 될 수 없으며
  2. 웹 어플의 의미를 가장 잘 나타내는 명사형으로 지정하며(대소문자 구별)
  3. 웹 어플 하나당 하나의 컨텍스트만 가지기 때문이다

물론, 웹 어플이름과 컨텍스트는 다르게 지정할 수 있으나 똑같이 만드는 것이 일반적이다.
보안상의 이유 또는 웹 어플의 이름이 현저하게 길 때는 다르게 만들 수도 있다고 한다.


튜토리얼 코드

<form> 내부의 데이터를 'name'속성을 통해 식별하는 코드를 통해 기본적인 부분을 알아본다.

login.html

/* login.html */
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>login</title>
	</head>
	<body>
		<form method="post" action="../process/data_process.jsp">
			<label for="id">ID</label>
			<input type="text" name="id">
			
			<label for="id">PW</label>
			<input type="password" name="pw">
			
			<input type="submit" value="login">
		</form>
	</body>
</html>
  • <input>태그의 값들에 각각의 name속성이 붙고(식별자 역할), key:value 형식으로 전송된다.(Requset)

  • action 속성은 데이터가 도착할 페이지를 명시한다.


process.jsp

/* process.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>
		<%
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		
		if(id.equals("user01") && pw.equals("2345")){
			response.sendRedirect("success.jsp");
		}else{
				response.sendRedirect("fail.jsp");
			}
		%>
	</body>
</html>

<% %> 이 영역 안에서 Java 코드가 작동한다.
PHP와 동일한 형태다.

  • request 객체는 HTML 요청과 관련된 여러 메소드를 제공한다.

    • requst.getParameter("태그이름")
      태그 이름에 해당하는 value를 가져온다.
      반환값 타입은 String이다.
    • requst.getParameter("태그이름")를 통해 가져온 데이터와 원하는 데이터를 비교하는 if문을 볼 수 있다.
  • response객체는 HTML 응답과 관련된 여러 메소드를 제공한다.

    • response.sendRedirect("경로")는 해당 경로로 요청을 발생시킨다.
      기존의 request가 파기되며 새로운 요청으로 취급된다는 점이 특징이다.

success / fail .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>
  	<h1>Login... Ok</h1>
  </body>
</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>
  	<h1>Login Failed</h1>
  </body>
</html>

0개의 댓글