JavaWeb - EL,JSTL,過濾器,filter映射,通配符

下載時 ,文件名亂碼問題:

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{requestScope.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

  • 過濾器鏈
    可以配置多個過濾器,過濾器的先後順序 是由 的位置 決定

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章