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.