Jsp çıktısından boşluk bırak


110

Jsp sayfalarının çıktısından fazladan boşlukları nasıl çıkarabilirim? Web.xml dosyamda çevirebileceğim bir anahtar var mı? Tomcat'e özgü bir ayar var mı?

Yanıtlar:


172

Bunu başarması gereken bir trimWhiteSpaces yönergesi var,

JSP'nizde:

<%@ page trimDirectiveWhitespaces="true" %>

Veya jsp-config bölümünde web.xml dosyanız (Bunun sunucu uygulaması 2.5'ten başlayarak çalıştığını unutmayın.):

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

Maalesef, gerekli bir alanınız varsa, onu da soymanız gerekebilir, bu nedenle bazı yerlerde kesintisiz bir alana ihtiyacınız olabilir.


2
Bu iki seçenek arasında performans açısından bir fark var mı?
— jlb

TrimDirectiveWhitespaces yalnızca JSP 2.1 ve sonrasını destekleyen sunucu uygulaması kapsayıcıları tarafından desteklenir veya bu durumda veya Tomcat, Tomcat 6 (ve bazı sürümler, örneğin Tomcat 6.0.10 düzgün bir şekilde uygulamaz - diğerleri hakkında bilmiyorum), burada trimDirectiveWhitespaces hakkında daha fazla bilgi: java.sun.com/developer/technicalArticles/J2EE/jsp_21 ve burada raibledesigns.com/rd/entry/trim_spaces_in_your_jsp1
— wavetree

3
JSP özel .tag dosyalarında, <% @ tag body-content = "scriptless" trimDirectiveWhitespaces = "true"%> kullanın.
— Thomas W

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

Tomcat 8'i çalıştırıyorum ve bu işe yaramıyor gibi görünüyor. Herkes için çalışıyor mu?
— glez

27

Sunucu kapsayıcınız JSP 2.1 trimDirectiveWhitespacesözelliğini desteklemiyorsa, JspServletherhangi bir başlatma parametresi için onun belgelerine bakmanız gerekir . Örnek için ise Tomcat , sen ayarlayarak yanı yapılandırabilirsiniz trimSpacesiçin init-param trueiçin de JspServletTomcat en in /conf/web.xml:

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

Tamamen farklı bir alternatif JTidyFilter'dir . Yalnızca boşlukları kesmekle kalmaz, aynı zamanda HTML'yi doğru girintide biçimlendirir .


/Conf/web.xml içinde trimSpaces init-param değerini true olarak ayarlayarak yapılandırdım, ancak oluşturulan html'deki boşluklar kırpılmadı. Tomcat 6.0 kullanıyorum. Herhangi bir fikir?
— ria

7
@ria: Bunun yalnızca JSTL ve betikler gibi taglib'lerin bıraktığı boşlukları kırptığını anlamanız gerektiğini unutmayın. TÜM beyaz boşlukları HTML'den kırpmak istiyorsanız, farklı bir çözüme gidin. Burada bir filtre örneği bulabilirsiniz: balusc.blogspot.com/2007/12/whitespacefilter.html
— BalusC

Sitemdeki b / c makalesinin koduyla ilgili birkaç sorun olduğunu fark ettim. Html kaynağını kopyaladım ve boşluk filtresinin ara sıra öznitelikleri birleştirdiğini bulmak için w3 doğrulayıcısına yapıştırdım. Örneğin bu ... <div onclick = "right ()" class = "right"> bu <div onclick = "false" class = "yanlış"> haline dönüşecektir. Veya bu <a class="correct"> bu <aclass = "yanlış"> içine. Dolayısıyla, boşluk bırakıldığında, öğenin kapatma etiketi geçersiz hale gelir. Bununla ilgili herhangi bir ipucu var mı?
— gmustudent

4

TrimDirectiveWhitespaces yalnızca JSP 2.1 ve sonrasını veya durumunda veya Tomcat, Tomcat 6'yı destekleyen sunucu uygulaması kapsayıcıları tarafından desteklenir (ve Tomcat 6.0.10 gibi bazı sürümler bunu düzgün bir şekilde uygulamaz - diğerlerini bilmiyorum). TrimDirectiveWhitespaces hakkında daha fazla bilgiyi burada bulabilirsiniz:

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

ve burada

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


3

Doğrudan istediğiniz şey değil, ama bana yardımcı olan şey, HTML yorum etiketlerini akıllıca bir şekilde jsp etiketlerimin etrafına yerleştirmek ve ayrıca bir sunucu uygulaması etiketinin (<%%>) içine boşluk koymak:

${"<!--"}
<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

Etiketleri kullanıyorsanız oraya da uygulayabilirsiniz:

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

Ve jsp'nizde:

<%@ page trimDirectiveWhitespaces="true" %>

1

Bir adım daha ileri gidebilir ve ayrıca derleme zamanında html etiketleri arasındaki yeni satırları (satır başları) kaldırabilirsiniz.

Örneğin, değişiklik:

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

içine:

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

Bunu yapın, kullanın maven-replacer-pluginve şurada kurun 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>

Bu, yalnızca yapı dizinindeki JSP'leri değiştirecek ve kaynaklarınızdaki JSP'lere dokunmayacaktır.

<filesToInclude>JSP'lerinizin bulunduğu yolu ( ) uyarlamanız gerekebilir .




0

Asıl sorudan biraz uzak, boş satırlardan kurtulmak istiyorsanız, çıktı vermeden önce ne yaptıysanız, kullanabilirsiniz.

out.clearBuffer();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.