知乎專欄 | 多維度架構 | | | 微信號 netkiller-ebook | | | QQ群:128659835 請註明“讀者” |
JSP頁面中的註釋有以下幾種樣式的註釋方法:
JSP頁面中的HTML註釋 <!-- 註釋內容 --> JSP頁面中的普通註釋,不會再瀏覽器中輸出 <% // 註釋內容 %> <% /* 註釋內容 */ %> JSP頁面中的隱藏註釋,不會再瀏覽器中輸出 <%-- 註釋內容 --%>
new URL( request.getScheme(), request.getServerName(), request.getServerPort(), request.getContextPath() );
獲取主機名
<%=request.getServerName() %>
<% Enumeration paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) { String paramName = (String)paramNames.nextElement(); String paramValue = request.getParameter(paramName); out.println(paramName + ": " + paramValue + "<br/>\n"); } %>
<%= request.getParameter("first_name")%> <c:set var="UA" value="${param.first_name}" /> <c:out value="${param.first_name}"/>
獲取 cookie 值
<html> <head> <title>Reading Cookies</title> </head> <body> <center> <h1>Reading Cookies</h1> </center> <% Cookie cookie = null; Cookie[] cookies = null; // Get an array of Cookies associated with this domain cookies = request.getCookies(); if( cookies != null ){ out.println("<h2> Found Cookies Name and Value</h2>"); for (int i = 0; i < cookies.length; i++){ cookie = cookies[i]; out.print("Name : " + cookie.getName( ) + ", "); out.print("Value: " + cookie.getValue( )+" <br/>"); } }else{ out.println("<h2>No cookies founds</h2>"); } %> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="analytics.jsp" %>
<jsp:include page="telephone.jsp" /> <jsp:include page="address.jsp" flush="true"/> <jsp:include page="${request.getContentType()}/module/html.body.begin.html" flush="true" />
file 與 page 的區別是,file 將檔案包含進當前檔案,然後變成成servlet。 page 是運行的時候才會包含檔案輸出結果包含進當前檔案。
<pre> <%@include file="inc.html" %> ============= <%@include file="/inc.html" %> ============= <jsp:include page="inc.html" /> ============= <jsp:include page="inc.html" flush="true" /> ============== <jsp:include page="/inc.html" flush="true" /> ============== <jsp:include page="${request.getContentType()}/inc.html" flush="true" /> </pre>
注意上麵包含結果相同,使用上略有差異。
在 web.xml 中配置 error-page
<error-page> <error-code>400</error-code> <location>/error.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error.jsp</location> </error-page> <!-- java.lang.Exception異常錯誤,依據這個標記可定義多個類似錯誤提示 --> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page> <!-- java.lang.NullPointerException異常錯誤,依據這個標記可定義多個類似錯誤提示 --> <error-page> <exception-type>java.lang.NullPointerException </exception-type> <location>/error.jsp</location> </error-page> <error-page> <exception-type>javax.servlet.ServletException</exception-type> <location>/error.jsp</location> </error-page>
URL經常會出現 jsessionid,這是因為當你使用c:url的時候,它會判斷當前域下是否已經創建jsessionid的cookie變數,如果沒有並且你連結的是靜態頁面,那麼c:url將傳遞jsessionid變數,迫使Tomcat為當前域創建jsessionid cookie。
當你使用 Apache Nginx 作為Tomcat前端是,由於Apache Nginx不識別;jsessionid=7D25CE666FF437F2094AA945E97CEB37這種URL,會跳出404頁面。
解決方案一,放棄使用c:url,如果你需要保持context 的 path 設置,可以使用下面方法
<a href="${pageContext.request.contextPath}/test.html">Netkiller Test</a>
方案二,使用rewrite截取jsessionid做忽略處理
Apache:
ReWriteRule ^/(\w+);jsessionid=\w+$ /$1 [L,R=301] ReWriteRule ^/(\w+\.do);jsessionid=\w+$ /$1 [L,R=301]
Nginx:
rewrite ^(.*)\;jsessionid=(.*)$ $1 break;