언제 JSP를 사용하고, 언제 서블릿을 사용합니까?[복제하다]

StackOverflow https://stackoverflow.com/questions/101579

  •  01-07-2019
  •  | 
  •  

문제

이 질문에는 이미 답변이 있습니다.

결제를 처리하기 위해 고객을 다른 사이트로 보내는 애플리케이션이 있습니다.고객이 아닌 다른 사이트에서는 당사 서버의 페이지를 호출하여 결제 상태를 알려드립니다.호출된 페이지는 결제 애플리케이션에서 제공한 매개변수를 확인하고 해당 거래가 당사에 알려져 있는지 확인합니다.그런 다음 데이터베이스를 업데이트하여 상태를 반영합니다.이 모든 작업은 고객과의 상호 작용 없이 수행됩니다.

파일을 컴파일하고 패키지한 다음 구성 파일에 항목을 추가하는 것보다 파일 시스템에 파일을 삭제하는 것이 더 쉽기 때문에 개인적으로 이 기능을 JSP로 구현하기로 선택했습니다.

페이지의 기능을 고려할 때 서블릿이 선호되는 옵션일 것이라고 가정합니다.질문은 다음과 같습니다:

  • 내 추측이 맞나요?
  • JSP 대신 서블릿을 사용하는 진짜 이유가 있나요?
  • 그 이유는 무엇입니까?
  • 도움이 되었습니까?

    해결책

    JSP는 처음 실행될 때 서블릿으로 컴파일됩니다.이는 둘 사이에 실제 런타임 차이가 없음을 의미합니다.

    그러나 대부분의 경우 컨트롤러에는 서블릿을, 뷰에는 JSP를 사용하는 전통이 있습니다.컨트롤러는 Java 클래스이므로 모든 IDE에서 전체 도구 지원(코드 완성 등)을 얻을 수 있습니다.이는 JSP에 비해 더 나은 품질과 더 빠른 개발 시간을 제공합니다.일부 고급 IDE(IntelliJ IDEA가 떠오릅니다)는 JSP를 훌륭하게 지원하므로 해당 인수가 더 이상 사용되지 않습니다.

    자신만의 프레임워크를 만들거나 간단한 JSP로 만드는 경우 JSP를 계속 사용해도 됩니다.성능 차이는 없으며 JSP가 작성하기 더 쉽다고 생각되면 계속 진행하세요.

    다른 팁

    JSP:사용자에게 데이터를 제공합니다.여기에는 비즈니스 논리가 없어야 하며 데이터베이스 액세스도 없어야 합니다.

    서블릿:양식이나 특정 URL의 입력을 처리합니다.일반적으로 사람들은 프로그래밍을 정리하기 위해 Servlet 위에 Struts/Spring과 같은 라이브러리를 사용합니다.관계없이 서블릿은 들어오는 데이터의 유효성을 검사한 다음 이를 백엔드 비즈니스 계층 구현(테스트 사례를 코딩할 수 있음)에 전달해야 합니다.그런 다음 요청이나 세션에 결과 값을 넣고 JSP를 호출하여 이를 표시해야 합니다.

    모델:웹사이트에서 처리하는 구조화된 데이터를 보유하는 데이터 모델입니다.서블릿은 인수를 가져와 모델에 넣은 다음 비즈니스 계층을 호출할 수 있습니다.그런 다음 모델은 백엔드 DAO(또는 Hibernate)와 인터페이스하여 데이터베이스에 액세스할 수 있습니다.

    모든 중요 프로젝트는 MVC 구조를 구현해야 합니다.물론 사소한 기능에 비해 과잉입니다.귀하의 경우에는 상태 등을 업데이트하거나 필요한 모든 것을 업데이트하기 위해 DAO를 호출하는 서블릿을 구현합니다.

    JSP는 프리젠테이션 계층, 비즈니스 로직용 서블릿, 백엔드(일반적으로 데이터베이스 계층) 코드에서 사용해야 합니다.

    설명하신 대로 JSP를 사용할 수 없는 이유는 모르겠지만(어쨌든 컨테이너에 의해 서블릿으로 컴파일됩니다), 맞습니다. 우선 JSP를 서블릿으로 만드는 것이 선호됩니다. .

    JSP는 서블릿을 작성하는 지름길입니다.실제로 컴파일 전에 서블릿 Java 코드로 변환됩니다.(이름이 기억나지 않는 일부 tomcat 하위 디렉토리에서 확인할 수 있습니다.)

    서블릿과 JSP 중에서 선택하려면 다음과 같은 간단한 규칙을 사용합니다.페이지에 Java 코드보다 더 많은 HTML 코드가 포함되어 있으면 JSP로 이동하고, 그렇지 않으면 그냥 서블릿을 작성하세요.일반적으로 이는 대략 다음과 같이 해석됩니다.콘텐츠 표현에는 JSP를 사용하고 제어, 검증 등에는 서블릿을 사용합니다.

    또한 일반 Java 클래스 구문을 사용하므로 서블릿 내에서 코드를 구성하고 구조화하는 것이 더 쉽습니다.JSP는 더 모놀리식인 경향이 있지만 JSP 내부에서 메서드를 만드는 것이 가능합니다.

    두 가지 매우 간단한 규칙이 있습니다.

    1. Java 코드(비즈니스 로직)를 작성하고 싶을 때마다 Java 클래스(서블릿)에서 작성하세요.
    2. HTML/CSS/JS 코드(뷰/템플릿 로직)를 작성하고 싶을 때마다 JSP에서 작성하세요.

    관련 질문:

    JSP는 본질적으로 서블릿 컨테이너에 의해 서블릿으로 자동 컴파일되는 마크업이므로 컴파일 단계는 두 인스턴스 모두에서 발생합니다.JSP를 지원하는 서블릿 컨테이너에는 JRE만 필요한 것이 아니라 전체 JDK를 사용할 수 있어야 하는 이유가 있습니다.

    따라서 JSP의 주된 이유는 페이지를 렌더링하는 데 필요한 코드의 양을 줄이는 것입니다.페이지를 렌더링할 필요가 없다면 서블릿이 더 좋습니다.

    나는 이것이 오늘날 대중적인 대답이 아니라는 것을 알고 있지만:저는 앱을 처음부터 디자인할 때 항상 JSP를 사용합니다.논리가 중요할 경우에는 JSP에서 호출하는 힘든 작업을 수행하기 위해 일반 Java 클래스를 만듭니다.나는 순수한 Java 클래스로서 유지 관리가 더 용이하기 때문에 서블릿을 사용해야 한다는 주장을 결코 이해하지 못했습니다.JSP는 순수 Java 클래스를 쉽게 호출할 수 있으며, 물론 일반 Java 클래스도 다른 서블릿과 마찬가지로 유지 관리가 가능합니다.여러 개의 println을 작성하는 대신 모든 마크업을 인라인에 넣을 수 있으므로 JSP에서 페이지 형식을 지정하는 것이 더 쉽습니다.그러나 JSP의 가장 큰 장점은 JSP를 디렉토리에 놓으면 직접 액세스할 수 있다는 것입니다.URL과 클래스 파일 간의 관계를 설정하는 데 어려움을 겪을 필요가 없습니다.모든 JSP가 보안 검사(단일 호출 문일 수 있음)로 시작함으로써 보안이 쉽게 처리되므로 보안을 디스패치 계층에 추가할 필요가 없습니다.

    서블릿을 사용하는 유일한 이유는 URL과 결과 실행 클래스 간의 복잡한 매핑이 필요한 경우입니다.예를 들어, URL을 검사한 다음 세션 상태 등에 따라 여러 클래스 중 하나를 호출하려는 경우입니다.개인적으로 저는 이 작업을 하고 싶지 않았으며, 그렇게 하는 앱은 유지 관리가 어려운 경향이 있습니다. 변경을 시작하기 전에 실제로 어떤 코드가 실행되고 있는지 파악해야 하기 때문입니다.

    요즘 대부분의 Java 애플리케이션은 MVC 패턴을 기반으로 구축됩니다.컨트롤러 측(서블릿)에서는 비즈니스 로직을 구현합니다.서블릿 컨트롤러는 일반적으로 실제 HTML 응답(MVC의 보기)을 생성하는 jsp로 요청을 전달합니다.목표는 우려사항을 분리하는 것입니다.그 주제에 관해 수천 권의 책이 저술되었습니다.

    MVC 아키텍처에서는 서블릿이 컨트롤러로, JSP가 뷰로 사용됩니다.그러나 둘 다 기술적으로 동일합니다.JSP는 컴파일 시(JDeveloper에서와 같이) 또는 처음으로 액세스할 때(Tomcat에서와 같이) 서블릿으로 변환됩니다.따라서 실제 차이점은 사용 편의성에 있습니다.나는 당신이 서블릿을 사용하여 HTML 페이지를 렌더링하는 데 어려움을 겪을 것이라고 확신합니다.그러나 상식과는 반대로 실제로 JSP 내에서 상당히 복잡한 논리라도 코딩하는 것이 꽤 쉽다는 것을 알게 될 것입니다(어쩌면 준비된 도우미 클래스의 도움을 받아).PHP 사용자들은 항상 이런 일을 합니다.그래서 그들은 스파게티 코드를 만드는 함정에 빠진다.그래서 귀하의 문제에 대한 나의 해결책은 다음과 같습니다.JSP로 코딩하는 것이 더 쉽고 코드가 너무 많이 필요하지 않다면 JSP로 코딩해도 됩니다.그렇지 않으면 서블릿을 사용하십시오.

    JSP와 서블릿의 차이점에 대한 위의 모든 사항에 동의하지만 여기에 몇 가지 추가 고려 사항이 있습니다.당신은 쓰기:

    지불을 처리하기 위해 고객을 다른 사이트로 보내는 응용 프로그램이 있습니다.고객 이외의 다른 사이트는 서버의 페이지를 호출하여 결제 상태가 무엇인지 알려줍니다.호출 된 페이지는 지불 응용 프로그램에서 제공하는 매개 변수를 확인하고 거래가 당사에 알려진지 확인합니다.그런 다음 상태를 반영하도록 데이터베이스를 업데이트합니다.이것은 모두 고객과의 상호 작용없이 이루어집니다.

    귀하의 애플리케이션이 다른 애플리케이션의 결제 서비스를 사용하고 있습니다.다른 애플리케이션의 결제 서비스가 변경되면 JSP 페이지가 손상되므로 솔루션이 취약합니다.또는 애플리케이션의 지불 정책을 변경하려면 페이지를 변경해야 합니다.간단히 대답하자면, 애플리케이션은 웹 서비스를 통해 애플리케이션의 결제 서비스를 사용해야 한다는 것입니다.서블릿이나 JSP 페이지는 소비 논리를 배치하기에 적합한 장소가 아닙니다.

    둘째, 이러한 맥락에서 지난 몇 년 동안 서블릿/JSP 페이지의 대부분의 사용은 Spring 또는 Struts와 같은 프레임워크의 컨텍스트 내에 배치되었습니다.Spring은 서버 페이지부터 웹 서비스 게이트웨이 로직, DAO까지 필요한 전체 스택을 제공하므로 Spring을 추천합니다.Spring의 기본 사항을 이해하고 싶다면 다음을 추천합니다. 봄의 활동.Java(또는 C#)와 같은 언어로 작성된 엔터프라이즈 아키텍처를 계층화하는 방법을 더 잘 이해해야 한다면 Fowler의 책을 추천합니다. 엔터프라이즈 애플리케이션 아키텍처의 패턴.

    응, 이건 서블릿이어야 해.JSP는 개발하기가 더 쉬울 수 있지만 서블릿은 유지 관리하기가 더 쉽습니다.6개월 안에 임의의 버그를 수정하고 그것이 어떻게 작동했는지 기억하려고 노력해야 한다고 상상해 보세요.

    Java 서블릿에서는 HTML 태그가 Java 코딩에 포함됩니다.JSP에서는 Java 코딩이 HTML 태그에 포함됩니다.

    큰 문제에 대한 대규모 애플리케이션의 경우 서블릿은 Java 코딩 내부에 더 많은 html 태그를 포함할 수 없기 때문에 읽기, 이해, 디버그 등이 복잡합니다. 그래서 우리는 jsp를 사용합니다. jsp에서는 이해, 디버그 등이 쉽습니다.

    감사합니다

    내 생각엔 그게 너에게 달린 것 같아?JSP는 HTML 내부의 Java이고 서블릿은 HTML을 내부에 수행 할 수있는 자바입니다.

    흠...서블릿은 jsp보다 안전합니다. 서블릿에 제출하고 다른 JSP로 전달하면 파일 확장자가 나타나지 않고 페이지가 무엇인지도 볼 수 없기 때문입니다.

    하지만 JSP의 장점은 쉽게 코딩할 수 있다는 것입니다.

    라이센스 : CC-BY-SA ~와 함께 속성
    제휴하지 않습니다 StackOverflow
    scroll top