下載時 ,文件名亂碼問題:
edge:
URLEncoder.encode(fileName,“UTF-8”)
firefox:
給文件名 加:
前綴 =?UTF-8?B?
String構造方法
Base64.encode
後綴 ?=
示例:
response.addHeader(“content-Disposition”,“attachment;filename==?UTF-8?B?”+ new String( Base64.encodeBase64(fileName.getBytes(“UTF-8”)) ) +"?=" );//fileName包含了文件後綴:abc.txt
EL :爲了消除jsp中的Java代碼
語法:
${EL表達式}
a. EL不需要導包
b.在el中調用屬性,其實是調用的getXxx()方法
${範圍.對象.屬性.屬性的屬性 }
操作符:操作:屬性,不是對象
.
: 使用方便
[]
: 如果是常量屬性,需要使用雙引號/單引號 引起來;比點操作符更加強大
[]強大之處:
a.可以容納一些 特殊符號 (. ? -)
b.[]可以容納 變量屬性 (可以動態賦值)
String x = “a”;
{requestScope[“a”]}等價於KaTeX parse error: Expected '}', got 'EOF' at end of input: {{requestScope[x]}
c.可以處理數組
${requestScope.arr[0] }
普通對象、map中的變量
通過EL獲取JSP 九大內置對象
${pageContext }
${pageContext.request }
${pageContext.sessoin }
JSTL:比EL更加強大
需要引入2個jar :jstl.jar
standard.jar
引入tablib
:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
其中prefix=“c” :前綴
核心標籤庫: 通用標籤庫、條件標籤庫 迭代標籤庫
a.通用標籤庫
<c:set>
賦值
i:
在某個作用域之中(4個範圍對象),給某個變量賦值
<c:set var="name" value="zhangsan" scope="request"/>
//等價於request.setAttribute("name", "zhangsan") ;
<c:set var="變量名" value="變量值" scope="4個範圍對象的作用域"/>
ii:
- 給普通對象賦值
在某個作用域之中(4個範圍對象),給某個對象的屬性複製 (此種寫法,不能指定scope屬性)
<c:set target="${requestScope.student}" property="sname" value="zxs" />
- 給
map
對象賦值
<c:set target="${requestScope.countries}" property="cn" value="中國" />
<c:set target="對象" property="對象的屬性" value="賦值" />
注意 <c:set>可以給不存在的變量賦值 (但不能給不存在的對象賦值)
<c:out> :顯示
- true:<c:out value=‘百度’ default=“當value爲空的,顯示的默認值” escapeXml=“true” />
- false: <c:out value=‘百度’ escapeXml=“false” />
<c:remove >:刪除屬性
<c:remove var="a" scope="request"/>
選擇:
if(boolean)
單重選擇
<c:if test="" >
if else if… esle if… else /switch
<c:choose>
<c:when test="..."> </c:when>
<c:when test="..."> </c:when>
<c:when test="..."> </c:when>
<c:otherwise> </c:otherwise>
</c:choose>
- 在使用 test="" 一定要注意後面是否有空格
例如:
test="${10>2 }" true
test="${10>2 } " 非true
循環(迭代標籤庫)
for(int i=0;i<5;i++)
<c:forEach var="name" items="${requestScope.names }" >
-${name }-
</c:forEach>
for(String str:names)
<c:forEach var="student" items="${requestScope.students }" >
${student.sname }-${student.sno }
</c:forEach>
過濾器:
- 實現一個Filter接口
- init()、destroy() 原理、執行時機 同Servlet
- 配置過濾器,類似servlet
- 通過doFilter()處理攔截,並且通過chain.doFilter(request, response);放行
filter映射
- 只攔截 訪問MyServlet的請求
/MyServlet - 攔截一切請求(每一次訪問 都會被攔截)
/*
通配符
dispatcher請求方式:
REQUEST
:攔截HTTP請求 get post
FORWARD
:只攔截 通過 請求轉發方式的請求
-
INCLUDE:只攔截攔截通過 request.getRequestDispatcher("").include() 、通過<jsp:include page="…" />此種方式發出的請求
ERROR:只攔截髮出的請求 -
過濾器中doFilter方法參數:ServletRequest
在Servlet中的方法參數:HttpServletRequest -
過濾器鏈
可以配置多個過濾器,過濾器的先後順序 是由 的位置 決定