ฉันจะตัดช่องว่างพิเศษออกจากเอาต์พุตของหน้า jsp ได้อย่างไร มีสวิตช์ที่ฉันสามารถพลิกบน web.xml ของฉันได้หรือไม่ มีการตั้งค่าเฉพาะของ Tomcat หรือไม่?
ฉันจะตัดช่องว่างพิเศษออกจากเอาต์พุตของหน้า jsp ได้อย่างไร มีสวิตช์ที่ฉันสามารถพลิกบน web.xml ของฉันได้หรือไม่ มีการตั้งค่าเฉพาะของ Tomcat หรือไม่?
คำตอบ:
มีคำสั่ง trimWhiteSpaces ที่ควรทำให้สำเร็จ
ใน JSP ของคุณ:
<%@ page trimDirectiveWhitespaces="true" %>
หรือในส่วน jsp-config web.xml ของคุณ (โปรดทราบว่าการทำงานนี้เริ่มต้นจาก servlet specification 2.5):
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>
น่าเสียดายหากคุณมีพื้นที่ที่ต้องการก็อาจต้องใช้ระแนงด้วยดังนั้นคุณอาจต้องการพื้นที่ที่ไม่ทำลายในบางสถานที่
web.xml
: <init-param> <param-name> trimSpaces </param-name> <param-value> true </param-value> </init-param>
หาก servletcontainer ของคุณไม่รองรับtrimDirectiveWhitespaces
คุณสมบัติJSP 2.1 คุณต้องศึกษาJspServlet
เอกสารประกอบสำหรับพารามิเตอร์การเริ่มต้น ตัวอย่างเช่นTomcatคุณสามารถกำหนดค่าได้เช่นกันโดยการตั้งค่าtrimSpaces
init-param เป็นtrue
in for JspServlet
ใน Tomcat's /conf/web.xml
:
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
ทางเลือกที่แตกต่างอย่างสิ้นเชิงเป็นJTidyFilter ไม่เพียง แต่ตัดช่องว่างเท่านั้น แต่ยังจัดรูปแบบ HTML ในการเยื้องที่ถูกต้อง
trimDirectiveWhitespaces รองรับเฉพาะคอนเทนเนอร์ servlet ที่รองรับ JSP 2.1 และหลังหรือในเคสหรือ Tomcat, Tomcat 6 (และบางเวอร์ชันเช่น Tomcat 6.0.10 ใช้ไม่ถูกต้อง - ไม่รู้เกี่ยวกับเวอร์ชันอื่น) มีข้อมูลเพิ่มเติมเกี่ยวกับ trimDirectiveWhitespaces ที่นี่:
http://www.oracle.com/technetwork/articles/javaee/jsp-21-136414.html
และที่นี่
ไม่ใช่สิ่งที่คุณต้องการโดยตรง แต่สิ่งที่ช่วยฉันได้คือการใส่แท็กความคิดเห็น HTML อย่างชาญฉลาดรอบ ๆ แท็ก jsp ของฉันและการใส่ช่องว่างในแท็ก servlet (<%%>):
${"<!--"}
<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>
หากคุณใช้แท็กคุณสามารถใช้ที่นั่นได้เช่นกัน:
<%@ tag description="My Tag" trimDirectiveWhitespaces="true" %>
และบน jsp ของคุณ:
<%@ page trimDirectiveWhitespaces="true" %>
คุณสามารถก้าวไปอีกขั้นหนึ่งและลบบรรทัดใหม่ (การส่งคืนค่าขนส่ง) ระหว่างแท็ก 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>>\s*<</token>
<value>><</value>
<regexFlags>
<regexFlag>MULTILINE</regexFlag>
</regexFlags>
</configuration>
</execution>
</executions>
</plugin>
สิ่งนี้จะแก้ไขเฉพาะ JSP ในไดเร็กทอรี build และไม่แตะ JSP ในแหล่งที่มาของคุณ
คุณอาจต้องปรับเส้นทาง ( <filesToInclude>
) ที่ JSP ของคุณตั้งอยู่
กรุณาใช้ฟังก์ชั่นการตัดแต่งตัวอย่างเช่น
fn:trim(string1)
เพิ่ม / แก้ไขcatalina.properties
ไฟล์tomcat ของคุณด้วย
org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false
ดูเพิ่มเติม: https://confluence.sakaiproject.org/display/BOOT/Install+Tomcat+7
เพียงเล็กน้อยจากคำถามจริงหากคุณต้องการกำจัดบรรทัดว่างที่เกิดจากสิ่งที่คุณทำก่อนที่จะส่งออกคุณสามารถใช้
out.clearBuffer();