⑴ 怎麼讓jsp輸出無換行符
無換行符
<%@page contentType="text/html; charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%
String c="",x="",y="",isok="";
c=request.getParameter("Check");
if(c.equals("1")){
x=request.getParameter("x");
y=request.getParameter("y");
isok = "1";
}
out.println("isok="+isok+"&xv="+x+"yv="+y);
%>
⑵ 如何去除 JSP 生成的 HTML 中的空格和換行
在WEB應用中,如果使用jsp作為view層的顯示模板,都會被空格/空換行問題所困擾.
這個問題當年也困擾了我比較長的時間.因為在jsp內使用的EL標簽和其他標簽時,會產生大量的空格和換行符.例如:
復制代碼代碼如下:
------- start ----------
<c:choose>
<c:when test="${fn:length(mainPageList)>1&}">
Something
</c:when>
<c:otherwise>
Others
</c:otherwise>
</c:choose>
------- end -----------
這段代碼在Tomcat上輸出如下,多了幾行換行。
復制代碼代碼如下:
------- start ----------
Something
------- end -----------
當然,一般不去特別留意是不會發現有什麼問題的,畢竟輸出再多的空格和換行符,對於瀏覽器生成的最終效果是一樣的。也就是大部分開發人員忽略這個問題的原因;但實際上這些空格和換行會佔用了不少空間,我的經驗是30%左右是空格/換行。也有人說,當web伺服器以zip的方式來輸出html時,空格引起的帶寬問題就可以解決了;是的,當使用zip來輸出html時,空格/換行的空間會被節省回來,但這個增加zip的工作量,而且最大的問題是,瀏覽器生成頁面時,還是會還原所有的空格的換行符。對於前端開發人員來說這是個噩耗,面對大量的空格和冗長的html源碼,想要找到對應出問題的樣式所在的位置可不是容易的事情。
下面說一下解決方案,以Tomcat為例:
方案一,利用web伺服器的trimSpaces功能。
Tomcat5 以上版本都可以使用,這是最簡單的方法。
復制代碼代碼如下:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>trimSpaces </param-name>
<param-value>true </param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
這個方案有個缺點,它會去掉所有jsp EL標簽之間的空格的換行符,在部分情況下也來帶來不便。
如:Your name is ${firstName} ${lastName}. ==輸出為==> Your name is firstNamelastName.
兩個${}變數之間的空格也會消失。要解決這個問題是相當麻煩,要引入一個只有一個空格的變數。
<c:set var="one_space"> </c:set>
Your name is ${firstName}${one_space}${lastName}.
這樣就正常了,麻煩。雖然可以在一些全局變數的地方來增加一個one_space的變數,但代碼看上去還是不爽。
方案二,我比較喜歡。
這個方案只有在支持jsp 2.1的web伺服器上才可以使用,如Tomcat6。
Jsp2.1多了一個很有用的命令;
<%@ page trimDirectiveWhitespaces="true" %>
這個命令可以使jsp輸出的html時去除多餘的空行(jsp上使用EL和tag會產生大量的空格和空行),沒有使用trimSpaces的問題,現在jsp輸出html也可以很好地排版,看上去也專業;以前我一直都羨慕velocity的模板,輸出html十分干凈好看,現在jsp也可以了。
另外提一下,Tomcat6有一些兼容性問題,例如不能使用#{}這種代碼在jsp中,因為會被當成JSF腳本執行。
雖然這是一個很小的問題,但我們還是要注意細節。
⑶ 如何將JSP里的代碼換行除去
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringUtil {
public static void replaceBlank()
{
Pattern p = Pattern.compile("\\s*|\t|\r|\n");
String str="文字";
System.out.println("before:"+str);
Matcher m = p.matcher(str);
String after = m.replaceAll("");
System.out.println("after:"+after);
}
public static void main(String[] args) {
replaceBlank();
}
}
大體的思想就是直接去讀取那個文件賦值給String然後再用正則表達式去除之後輸出到文件或者打在控制台你再復制回去
⑷ jsp中操作資料庫,結果不換行了。
<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%>
<%@pageimport="java.sql.*"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<title>login</title>
</head>
<STYLETYPE="text/css">
<!--
h3{color:black;font-size:20px;font-family:impact}
P.first{color:green}
P.second{color:purple}
P.third{color:gray}
-->
</STYLE>
<bodybgcolor="#bbccdd">
<%
Stringusername=session.getAttribute("logname").toString();
if(username==null){out.print("未登錄");}
%>
<%!Stringg;%>
<center>
<h3><strong>學生管理系統</strong></h3>
<hrcolor="green"size="1"align="center"width="300"/>
<formname="form1"method="post">
<%
Stringc=session.getAttribute("a").toString();
Connectioncon;
Statementsql;
ResultSetrs;
try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(ClassNotFoundExceptione){out.print(e);}
try{Stringuri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=test";
Stringuser="sa";
Stringpassword="1234";
con=DriverManager.getConnection(uri,user,password);
sql=con.createStatement();
rs=sql.executeQuery("select*from學生表");
%>
<tableborder=2>
<tr>
<thwidth=50>學號</th>
<thwidth=50>姓名</th>
<thwidth=50>成績</th>
</tr>
<%
while(rs.next()){
%>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(4)%></td>
<td><%=rs.getString("ss")%></td>
</tr>
<%}%>
</table>
<%}
catch(SQLExceptione){out.print(e);}
%>
</form>
</center>
</body>
</html>
⑸ jsp 一個<td>里的兩個欄位不換行
這種條件下發生抄換行的因素是多樣的,你的頁面真像xiliantian的Demo代碼當然就簡單了,但是你實際應用中的代碼肯定是多因素綜合的。我建議你用firefox+firebug,看一下具體頁面在渲染出來以後的頁面模型,具體就是看對input外圍的這個td的起作用的CSS規則和元素屬性性質。估計問題可能是出在CSS規則上,因為其可以覆蓋nowrap屬性。