jsp 출력에서 ​​공백 제거


110

jsp 페이지 출력에서 ​​추가 공백을 제거하려면 어떻게해야합니까? web.xml에서 뒤집을 수있는 스위치가 있습니까? Tomcat 특정 설정이 있습니까?

답변:


172

이를 수행해야하는 trimWhiteSpaces 지시문이 있습니다.

JSP에서 :

<%@ page trimDirectiveWhitespaces="true" %>

또는 jsp-config 섹션에서 web.xml (서블릿 사양 2.5부터 작동합니다.) :

<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <trim-directive-whitespaces>true</trim-directive-whitespaces>
  </jsp-property-group>
</jsp-config>

안타깝게도 필요한 공간이있는 경우 스트립이 필요할 수도 있으므로 일부 위치에서 중단되지 않는 공간이 필요할 수 있습니다.


2
이 두 옵션간에 성능면에서 차이가 있습니까?
jlb 2012

trimDirectiveWhitespaces는 JSP 2.1 이상을 지원하는 서블릿 컨테이너 또는 Tomcat, Tomcat 6의 경우에만 지원됩니다 (및 Tomcat 6.0.10과 같은 일부 버전은 제대로 구현하지 않음-다른 버전에 대해 알지 못함). trimDirectiveWhitespaces에 대한 자세한 내용은 다음을 참조하십시오. java.sun.com/developer/technicalArticles/J2EE/jsp_21 및 여기 raibledesigns.com/rd/entry/trim_spaces_in_your_jsp1
wavetree

3
그리고 JSP 사용자 정의 .tag 파일에서 <% @ tag body-content = "scriptless"trimDirectiveWhitespaces = "true"%>를 사용하십시오.
Thomas W

Tomcat 7 web.xml: <init-param> <param-name> trimSpaces </ param-name> <param-value> true </ param-value> </ init-param>
Ujjwal Singh

Tomcat 8을 실행 중이며 작동하지 않는 것 같습니다. 누구에게나 효과가 있습니까?
glez

27

servletcontainer가 JSP 2.1 trimDirectiveWhitespaces속성을 지원하지 않는 JspServlet경우 초기화 매개 변수에 대한 설명서 를 참조해야합니다 . 예를 들어 Tomcat 에서는 trimSpacesinit-param을 Tomcat의 truein for 로 설정하여 구성 할 수도 있습니다 .JspServlet/conf/web.xml

<init-param>
    <param-name>trimSpaces</param-name>
    <param-value>true</param-value>
</init-param>

완전히 다른 대안은 JTidyFilter 입니다. 공백을 제거 할뿐만 아니라 올바른 들여 쓰기로 HTML 형식 을 지정합니다.


/conf/web.xml에서 trimSpaces init-param을 true로 설정하여 구성했지만 생성 된 html의 공백이 잘리지 않습니다. Tomcat 6.0을 사용하고 있습니다. 어떤 아이디어?
ria

7
@ria : JSTL 및 스크립틀릿과 같은 taglibs가 남긴 공백 만 제거한다는 점을 이해해야합니다. HTML에서 모든 공백을 제거하려면 다른 솔루션으로 향하십시오. 여기에서 필터 예를 찾을 수 있습니다. balusc.blogspot.com/2007/12/whitespacefilter.html
BalusC

내 사이트의 b / c 기사의 코드에서 몇 가지 문제가 잘못 표시되기 시작했습니다. html 소스를 복사하여 w3 유효성 검사기에 붙여 넣어 공백 필터가 때때로 속성을 연결하는 것을 확인했습니다. 예를 들어 ... <div onclick = "correct ()"class = "correct">는이 <div onclick = "wrong"class = "wrong">으로 바뀝니다. 또는이 <a class="correct">이 <aclass = "wrong">. 따라서 공백을 잃으면 요소에 대한 닫기 태그가 무효화됩니다. 이것에 대한 조언이 있습니까?
gmustudent

4

trimDirectiveWhitespaces는 JSP 2.1 이상을 지원하는 서블릿 컨테이너 또는 Tomcat, Tomcat 6의 경우에만 지원됩니다 (Tomcat 6.0.10과 같은 일부 버전은 제대로 구현하지 않습니다. 다른 버전에 대해서는 알지 못함). 여기에 trimDirectiveWhitespaces에 대한 자세한 정보가 있습니다.

http://www.oracle.com/technetwork/articles/javaee/jsp-21-136414.html

그리고 여기

http://raibledesigns.com/rd/entry/trim_spaces_in_your_jsp1


3

직접 요청하는 것이 아니라 HTML 주석 태그를 jsp 태그 주위에 영리하게 배치하고 서블릿 태그 (<% %>) 안에 공백을 넣는 것이 도움이됩니다.

${"<!--"}
<c:if test="${first}">
    <c:set var="extraClass" value="${extraClass} firstRadio"/>
</c:if>
<c:set var="first" value="${false}"/>
${"-->"}<%

%><input type="radio" id="input1" name="dayChooser" value="Tuesday"/><%
%><label for="input1" class="${extraClass}">Tuesday</label>

3

태그를 사용하는 경우 여기에도 적용 할 수 있습니다.

<%@ tag description="My Tag" trimDirectiveWhitespaces="true" %>

그리고 당신의 jsp에서 :

<%@ page trimDirectiveWhitespaces="true" %>

1

한 단계 더 나아가 빌드시 html 태그 사이의 줄 바꿈 (캐리지 리턴)을 제거 할 수도 있습니다.

예 : 변경 :

<p>Hello</p>
<p>How are you?</p>

으로:

<p>Hello</p><p>How are you?</p>

그렇게하고를 사용하고 다음 maven-replacer-plugin에서 설정하십시오 pom.xml.

<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <version>1.5.3</version>
    <executions>
        <execution>
            <id>stripNewlines</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>replace</goal>
            </goals>
            <configuration>
                <basedir>${project.build.directory}</basedir>
                <filesToInclude>projectname/WEB-INF/jsp/**/*.jsp</filesToInclude>
                <token>&gt;\s*&lt;</token>
                <value>&gt;&lt;</value>
                <regexFlags>
                    <regexFlag>MULTILINE</regexFlag>
                </regexFlags>
            </configuration>
        </execution>
    </executions>
</plugin>

이것은 빌드 디렉토리의 JSP 만 수정하고 소스의 JSP는 건드리지 않습니다.

<filesToInclude>JSP가 있는 경로 ( ) 를 조정해야 할 수 있습니다 .




0

실제 질문에서 약간 벗어났습니다. 출력하기 전에 무엇을했는지에 따라 빈 줄을 없애고 싶다면 다음을 사용할 수 있습니다.

out.clearBuffer();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.