'서블릿' 태그의 글 목록 :: 잡다한 프로그래밍
반응형

1. JSP란?

Java Server Pages로서 정적 HTML과 동적인 컨텐츠를 섞어놓은 기술 서블릿 처럼 동적인 페이지를 기술 할 수 있다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Order Confirmation</TITLE>
<LINK REL=STYLESHEET
	HREF="JSP-Style.css"
    TYPE="text/css">
</HEAD>
<BODY>
Thanks for ordering <%= request.getParameter("title") %>!
</BODY>
</HTML>

다음은 JSP예시이다. <%= request.getParameter("title")%> 부분이 HTML 내부에 동적인 JAVA코드가 삽이되어있는 부분이다. JSP 가 실행되면 서블릿(Servlet) 으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고

그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다.


2. JSP 와 Servlet의 차이

JSP는 HTML 내부에 JAVA코드를 넣어 처리하고 Servlet은 JAVA코드내에 HTML을넣어 표시한다. 따라서 Servlet은 JSP보다 코드를 읽고 사용하기에 불편하다는 단점이 존재한다 따라서 Servlet은 데이터를 프로세싱 하기에 적합하고, JSP는 데이터를 보여주기에 적합하다


3. JSP 문법

1) JSP Expression

<%= 내용 %> 으로서 out 객체를 통해 print해주는 역할을 한다.

 

2) JSP Scriptlets

<% Java Code %> 로서 좀 더 복잡한 기능 구현을 하고 싶다면 <%  %>사이에 JAVA코드를 넣어서 사용가능하다

ex) <% if(a == 1) out.println("aa"); %>

 

3) JSP Declarations

<%! private int count = 0; %> 처럼 필드, 메소드를 정의하는 방법이다. 사용자는 정의한 count 를

<%= count %>를 통해 출력하거나 사용할 수 있다.

 

4)JSP Directive

JSP전체 구조에 영향을 미친다

JSP 서블릿 컨테이너에 지시를 하는 역할을한다

 

#1 page Directive

페이지 지시는 JSP페이지의 가장 위에 적어주며  import하거나 페이지에 명령을 내리는곳에 사용한다

<%@ page import = "java.util.*" %>

<%@ page contentType = "text/html" %>

 

#2 include Directive

<%@ include file = "test_url"> 모든 페이지 하단부에 있는 주소같은 부분을 복사 붙여넣기 하여 사용하는것은 좋지않은 방법이다 따라서 이러한 include를 통하여 사용하는것이 좋다.

 

#3 taglib Directive

태그를 모아놓은 라이브러리로서 외부의 라이브러리 파일을 JSP내에 HTML이나 XML태그처럼 사용할 수 있게 함

<%@ taglib   uri=http://java.sun.com/jsp/jstl/core    prefix=c"  %> 이처럼 prefix로 c라고 등록해놓고 사용

<c:out value="Hello World"> </c:out>

 

5) JSP Action

XML 구분의 문법을 사용하여 서블릿 엔진을 컨트롤한다

 

#1 <jsp:include>action

현재 JSP 페이지에 다른 리소스를 포함시키는데 사용.

<jsp:include page="/jsp/common/uppermenu.jsp" flush="true">

</jsp:include>

 

#2 <jsp:forward>action

다른 리소스(JSP, html 또는 Servlet)로 요청을 전달하는데 사용.

<jsp:forward page=“/display.jsp" />

 

#3 <jsp:useBean>action

자바의 Bean(객체)를 생성한다.

<jsp:useBean id="customer" class=“package.class  scope="request"> </jsp:useBean>

Scope = 언제까지 유효한지를 의미 Request오면 만들고 끝나면 사라짐

 

#4 <jsp:setProperty>action

자바 Bean(객체)의 속성을 정의한다

<jsp:setProperty name="myName" property="someProperty" value=“abc”/>

 

#5 <jsp:getProperty>action

자바 Bean(객체)의 값을 가져온다

<jsp:getProperty name="myName" property="someProperty" />

반응형
반응형

1. 정적(Static) 페이지란?

정적 페이지

다음 사진과 같이 사용자의 request가 있을 때 (index.html을 요청하는 것) 웹 서버는 파일 시스템의 index.html을 사용자에게 response 해주는 방식이 정적 페이지 방식이다.


2. 동적(Dynamic) 페이지란?

동적 페이지

위 사진과 같이 사용자의 request를 웹 애플리케이션 서버(톰캣)에서 Servlet에 전달한다

Servlet내부에서는 요청에 맞는 재정의 된 함수(doGet)를 실행하고 얻은 결과를 response 해준다

이때 DB와 함께 연동된 처리일 수 있으며 사용자는 함수에 따라 동적인 결과를 얻게 된다.


3. 웹 애플리케이션 서버 구성도

웹 어플리케이션 서버 설명

위 사진과 같이 WAS가 구성된다 앞서 설명한 동적 페이지와 유사한 그림이다

사용자의 request를 web server가 jsp, servlet으로 전달하고 이를 동적으로 처리하고 (이때 DB와의 커넥션이 있을 수 있음) 이를 다시 Web Server로 다시 client에게 전달하는 방식으로 처리하게 된다


4. 구현하기

#1. 프로젝트 생성

프로젝트 생성

File > New > Dynamic Web Project를 선택하여 프로젝트를 생성한다.

프로젝트 생성

Project name을 설정한다 여기서는 servlettest로 설정하였다.

Target runtime은 톰켓 8.0 버전으로 진행하였다.

프로젝트 생성

설정해 줄 것이 없으므로 다음으로 넘어간다

프로젝트 생성

Web.xml을 생성하기 위해 체크를 해주고 Finish를 누른다

 

#2. index.html 생성

html 만들기

생성된 프로젝트에 WebContent를 우클릭하여 다음과 같이 html 파일을 생성한다.

html 만들기

index.html의 코드는 다음과 같다

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Servlet Test Page</title>
</head>
<body>
	<form action="DoLogin" method="POST">
		Username: <input type="text" name="username"> <br/>
		Password: <input type="password" name="password"> <br/>
		<input type="submit" value="제출"/>
	</form>
</body>
</html>

기본적인 흐름을 알기 위한 코드로 form 안에 username을 입력하기 위한 input과 password를 입력하기 위한 input이 존재한다 form은 POST방식으로 전달하기 위해 method = POST이며, action은 실제 서블릿에서 DoLogin이라는 함수에서 처리한다는 의미이다.

 

#3. index.html 결과 화면

html 결과

만약 html을 성공적으로 작성하고 실행하였다면 다음과 같은 결과가 확인된다.

이때 사용자가 제출 버튼을 누르게 된다면 다음과 같은 오류 화면이 발생할 것이다.

 

error 화면

왜냐하면 /DoLogin을 처리해줄 서블릿이 존재하지 않기 때문이다 따라서 /DoLogin을 처리해줄 서블릿을 생성해보자.

 

#4. 서블릿 생성 하기

서블릿 패키지 생성

생성된 프로젝트에 Src를 우클릭하여 다음과 같이 Package를 생성한다. 패키지명은 원하는 명으로 해도 상관없으나 이 프로젝트에서는 servlet이라고 패키지명을 작성하였다.

서블릿 생성

생성된 패키지를 우클릭하여 New > Servlet을 클릭하여 서블릿을 생성한다

서블릿 생성

서블릿 명은 DoLogin으로 작성 하였다 (이는 html form에서 action을 DoLogin으로 지정했기 때문)

서블릿 생성

다음은 자동으로 URL이 /DoLogin으로 매핑되어있으므로 건드리지 않고 넘어간다.

서블릿 생성

다음은 재정의 하여 사용할 함수의 목록을 보여준다 아래에 현재 doPostdoGet이 체크되어있지만 실습에서는 POST를 사용하기로 하였으므로 doPost만 체크하고 서블릿 생성을 완료한다.

 

생성된 DoLogin 서블릿의 코드는 다음과 같다.

package servlet;

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class DoLogin
 */
@WebServlet("/DoLogin") //URL에노테이션으로 되어 있음
public class DoLogin extends HttpServlet { //HttpServlet상속 받아야함
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DoLogin() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		PrintWriter out = response.getWriter();
		String htmlResponse = "<html>";
		htmlResponse += "<h2> Your name is : " + username + "<br/>";
		htmlResponse += "<h2> Your password is : " + password + "<br/>";
		htmlResponse += "</html>";
		
		out.println(htmlResponse);
	}
}

String username = request.getParameter("username")으로 form의 username input이 보낸 value를 저장하고

PrintWriter를 사용해 html을 response해준다.

 

@WebServlet("/DoLogin")이 부분이 form에서 /DoLogin으로 요청을 보낸 부분을 처리하겠다고 명시해주는 에노테이션 부분이다. 에노테이션에 대한 자세한 설명은 ~~에서 확인할 수 있다.

 

#5. 프로젝트 실행 결과

다음과 같이 서블릿을 생성을 완료하고 이전과 같이 html을 제출하였다면 다음과 같은 화면이 보이게 될 것이다.

프로젝트 성공

5. 설명

코드 구조

프로젝트에서 작성한 구성을 그림으로 표현하면 다음과 같다 사용자는 html폼을 이용하여 POST방식으로 /DoLogin이라는 요청을 보내고 서블릿에서는 DoLogin 클래스의 재정의된 doPost를 사용하여 이를 처리하여 사용자에게 다시 반환하는 방식이다.

 

간단한 서블릿을 활용한 웹 서버 애플리 케이션 예제였다

반응형

+ Recent posts