JSP 란 무엇입니까? JavaServer 페이지 소개

JSP (JavaServer Pages)는 Java 웹 애플리케이션을위한 동적 데이터 기반 페이지를 작성할 수있는 Java 표준 기술입니다. JSP는 Java Servlet 사양을 기반으로 구축되었습니다. 두 기술은 일반적으로 특히 이전 Java 웹 응용 프로그램에서 함께 작동합니다. 코딩 관점에서 볼 때 가장 분명한 차이점은 서블릿을 사용하면 Java 코드를 작성한 다음 해당 코드에 클라이언트 측 마크 업 (예 : HTML)을 포함하는 반면 JSP에서는 클라이언트 측 스크립트 또는 마크 업으로 시작한 다음 포함한다는 것입니다. 페이지를 자바 백엔드에 연결하기위한 JSP 태그.

JSP는 또한 MVC (model-view-controller) 웹 애플리케이션을 빌드하기위한 Java 사양 인 JSF (JavaServer Faces)와 밀접한 관련이 있습니다. JSP는 Eclipse Mojarra, MyFaces 및 PrimeFaces와 같은 Java 웹 프레임 워크의 표준 인 JSF보다 비교적 간단하고 오래된 기술입니다. 이전 JSF 애플리케이션의 프론트 엔드로 JSP가 사용되는 것은 드문 일이 아니지만 Facelets는 최신 JSF 구현에 선호되는보기 기술입니다.

JSP가 동적 웹 페이지를 구축하기위한 첫 번째 선택은 아니지만 핵심 Java 웹 기술입니다. JSP 페이지는 비교적 빠르고 쉽게 구축 할 수 있으며 Tomcat과 같은 서블릿 컨테이너의 Java 서블릿과 원활하게 상호 작용합니다. 이전 Java 웹 응용 프로그램에서 JSP를 접하게되며 때때로 단순하고 동적 인 Java 웹 페이지를 구축하는 데 유용 할 수 있습니다. Java 개발자는 최소한 JSP에 대해 잘 알고 있어야합니다.

이 기사는 JSTL (JSP Standard Tag Library)을 포함한 JavaServer Pages에 대한 간략한 소개입니다. 예제는 간단한 HTML 페이지를 작성하고, JSP 태그를 포함하여 Java 서블릿에 연결하고, 서블릿 컨테이너에서 페이지를 실행하는 방법을 보여줍니다.

Java 서블릿 및 JavaServer Faces에 대해 자세히 알아 보려면이 시리즈의 이전 기사를 참조하십시오.

자카르타 EE의 JSP

Java EE 8 릴리스 이후 Oracle은 Java EE (Java Enterprise Edition)의 관리 권한을 Eclipse Foundation으로 이전했습니다. 앞으로 Java 엔터프라이즈 플랫폼은 Jakarta EE로 리 브랜딩되었습니다. Java Servlet 및 JSF 사양과 함께 JSP는 Jakarta EE의 지속적인 지원 및 업그레이드를 위해 포함 된 Java 웹 기술 중 하나입니다.

JSP 페이지 작성

간단한 JSP 페이지 (.jsp)는 JSP 태그가 포함 된 HTML 마크 업으로 구성됩니다. 파일이 서버에서 처리 될 때 HTML은 웹 페이지 인 애플리케이션보기로 렌더링됩니다. 포함 된 JSP 태그는 서버 측 코드 및 데이터를 호출하는 데 사용됩니다. 그림 1의 다이어그램은 HTML, JSP 및 웹 애플리케이션 서버 간의 상호 작용을 보여줍니다.

매튜 타이슨

목록 1은 간단한 JSP 페이지를 보여줍니다.

Listing 1. 간단한 JSP 페이지

${2 * 2} should equal 4

Listing 1에는 EL (Expression Language)을 사용하여 작성된 Java 서버에 대한 명령어 인 JSP 표현식 이 포함 된 HTML 블록이 있습니다. " ${2 * 2}" 표현식 에서 " ${}"는 코드를 HTML로 보간하기위한 JSP 구문입니다. 실행되면 JSP는 표현식 안에있는 모든 것을 실행 한 결과를 출력합니다. 이 경우 출력은 숫자 4가됩니다.

서블릿 컨테이너의 JSP

JSP 페이지는 Java 서블릿 컨테이너 내에 배포되어야합니다. JSP 및 서블릿을 기반으로 Java 웹 애플리케이션을 배포하려면 .jsp 파일, Java 코드 및 애플리케이션 메타 데이터를 웹 애플리케이션에 대한 일반적인 구조를 가진 간단한 .zip 파일 인 .war 파일로 패키징합니다.

JSP를 서블릿 컨테이너에로드하면 서블릿으로 컴파일됩니다. JSP 및 Java 서블릿은 요청 객체에 액세스하고 이에 응답하는 기능을 포함하여 유사한 특성을 공유합니다. Apache Tomcat 9x는 Servlet 4.0 및 JSP 2.3 사양에 대한 참조 구현입니다. (JSP 2.2와 2.3 사이의 업데이트는 상대적으로 적습니다.)

서블릿 컨테이너와 애플리케이션 서버

자바 세계에서 웹 서버라고도 하는 서블릿 컨테이너 는 애플리케이션 서버의 라이트 (맥주) 버전과 같습니다. 서블릿 컨테이너는 요청 및 응답 상호 작용을 처리하고 이러한 상호 작용이 웹 애플리케이션을위한 Java 엔터프라이즈 기능의 하위 집합과 상호 작용할 수 있도록합니다. Java 애플리케이션 서버에는 EJB, JPA, JMS 등을 포함한 전체 Java 엔터프라이즈 스택의 일부로 서블릿 컨테이너가 포함됩니다.

JSP 용 예제 앱

JavaServer Pages를 시작하기 위해 Tomcat의 예제 애플리케이션을 사용합니다. Tomcat이 아직 설치되지 않은 경우 Tomcat 다운로드 페이지로 이동하여 운영 체제에 맞는 Tomcat 설치를 선택합니다. 이 글을 쓰는 시점에서 Tomcat 9는 Servlet 4.0 및 JSP 2.3과 호환되는 현재 릴리스입니다.

당신은 Windows 서비스로 Tomcat을 설치하거나 명령 행에서 실행할 수 있습니다 /bin/catalina.sh start또는 /bin/catalina.bat. 어느 쪽이든 Tomcat을 시작한 다음 localhost:8080그림 2에 표시된 Tomcat 시작 페이지 로 이동합니다 .

매튜 타이슨

Tomcat의 암시 적 개체

Tomcat 시작 페이지에서 예제 링크를 클릭 한 다음 JSP 예제 를 클릭하십시오 .

다음으로 Implicit Objects Execute 웹 애플리케이션을 엽니 다 . 그림 3은이 애플리케이션의 출력을 보여줍니다. 잠시 시간을내어이 결과를 연구하십시오.

매튜 타이슨

요청 매개 변수

암시 적 객체 는 JSP 페이지를 통해 액세스 할 수있는 내장 객체입니다. 웹 페이지 개발자는 이러한 객체를 사용 하여 HTTP 요청을 발행 할 때 브라우저에서 전송되는 데이터 인 요청 매개 변수 와 같은 항목에 대한 액세스를 생성합니다 . 암시 적 객체에 대한 브라우저 URL을 고려하십시오.

 //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar 

매개 변수는 ?foo=bar이며 웹 페이지의 출력에 반영된 것을 볼 수 있습니다. 여기서 표에는 "EL 표현식"이 표시되고 값은 "bar"입니다. 이 밖을 테스트하기에 URL 변경 //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=zork을 명중 입력 하고 출력에 반영의 변화를 볼 수 있습니다.

This example is a very simple introduction to using JSP tags to access server-side request parameters. In this case, the JSP page uses the built-in (implicit) object called param to access the web application's request parameters. The param object is available inside the JSP expression syntax that you saw in Listing 1.

In that example, we used an expression to do some math: ${2 * 2}, which output 4.

In this example, the expression is used to access an object and a field on that object: ${param.foo}.

JSP in a web application

On the Implicit Objects page, click the back arrow, followed by the Source link. This will lead you to the JSP code for the Implicit Objects web app, which is shown in Listing 2.

Listing 2. JSP code for the Implicit Objects web app

     JSP 2.0 Expression Language - Implicit Objects   
    
This example illustrates some of the implicit objects available in the Expression Language. The following implicit objects are available (not all illustrated here):
  • pageContext - the PageContext object
  • pageScope - a Map that maps page-scoped attribute names to their values
  • requestScope - a Map that maps request-scoped attribute names to their values
  • sessionScope - a Map that maps session-scoped attribute names to their values
  • applicationScope - a Map that maps application-scoped attribute names to their values
  • param - a Map that maps parameter names to a single String parameter value
  • paramValues - a Map that maps parameter names to a String[] of all values for that parameter
  • header - a Map that maps header names to a single String header value
  • headerValues - a Map that maps header names to a String[] of all values for that header
  • initParam - a Map that maps context initialization parameter names to their String parameter value
  • cookie - a Map that maps cookie names to a single Cookie object.
Change Parameter foo =

EL Expression Result
\${param.foo} ${fn:escapeXml(param["foo"])}
\${param["foo"]} ${fn:escapeXml(param["foo"])}
\${header["host"]} ${fn:escapeXml(header["host"])}
\${header["accept"]} ${fn:escapeXml(header["accept"])}
\${header["user-agent"]} ${fn:escapeXml(header["user-agent"])}

JSP functions

If you're familiar with HTML, then Listing 2 should look pretty familiar. You have the expected HTML elements, followed by the ${ } JSP expression syntax introduced in Listing 1. But notice the value for param.foo: ${fn:escapeXml(param["foo"])} . The "fn:escapeXML()" is a JSP function.

A JSP function encapsulates a chunk of reusable functionality. In this case, the functionality is to escape XML. JSP offers a variety of functions, and you can also create functions yourself. To use a function, you import its library into your JSP page, then call the function.

In Listing 2, the escapeXML function is included with the line:

The syntax is pretty clear: it imports the required functions and assigns them a prefix (in this case "fn") that can be used in all following expressions.

The JSP Standard Tag Library (JSTL)

The import line in Listing 2 calls taglib, which is short for tag library, or (in this case) JSP Standard Tag Library (JSTL). Tag libraries define reusable bits of functionality for JSP. JSTL is the standard tag library, containing a collection of taglibs that ship with every servlet and JSP implementation, including Tomcat.

The "functions" library is just one of the taglibs included with JSTL. Another common taglib is the core library, which you import by calling:

Like "fn", the "c" designation is conventional, and you will see it across most JSP pages.

Securing JSP pages

An example tag from the core library is


    

which outputs the tag with the XML already escaped. This function is important because outputting content directly to a web page via ${variable} opens the door to script injection attacks. This simple function is used to protect web pages from such attacks.

The core library also includes various tags for iteration and flow control (like IF/ELSE handling).

JSTL tag classifications

There are five sets of tags included in JSTL, each designed for a specific area of web application functionality:

  • JSTL core: Dealing with logic and execution flow; conventional tag: "c"
  • JSTL formatting: Dealing with formatting (like dates) and internationalization; conventional tag: "fmt".
  • JSTL SQL: Dealing with querying SQL databases (this is usually discouraged in the view layer); conventional tag: "sql".
  • JSTL XML: Dealing with working with XML documents; conventional tag: "x".
  • JSTL functions: Dealing primarily with String manipulations; conventional tag: "fn".

Calling taglibs in JSP pages

Now that you've got a handle on JSP basics, let's make a change to the example application. To start, locate the Implicit Object app in your Tomcat installation. The path is: apache-tomcat-8.5.33/webapps/examples/jsp/jsp2/el.

Open this file and locate the functions include:

just below this line, add a new line:

Hit Return and add another new line:

Now reload the page at //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar.

출력에 반영된 업데이트를 볼 수 있습니다.