編輯:關於Android編程
jsp的核心語法: jsp表達式 <%=%>和 jsp腳本<% %>。
以後開發jsp的原則: 盡量在jsp頁面中少寫甚至不寫java代碼。
使用EL表達式替換掉jsp表達式
EL表達式作用: 向浏覽器輸出域對象中的變量值或表達式計算的結果!!!
語法: ${變量或表達式}
1 輸出基本數據類型變量
從四個域獲取
${name}
指定域獲取
${pageScope.name}
域范圍: pageScoep / requestScope / sessionScope / applicationScope
<% String name = "rose"; //放入域中 //pageContext.setAttribute("name",name); pageContext.setAttribute("name",name,PageContext.REQUEST_SCOPE); %> <%=name %>
<%-- 1)從四個域自動搜索 --%> EL表達式: ${name } <%-- ${name } 等價於 <%=pageContext.findAttribute("name")%> --%> <%-- 2) 從指定的域中獲取數據 --%> EL表達式: ${pageScope.name } <%-- ${pageScope.name } 等價於 <%= pageContext.getAttribute("name",PageContext.PAGE_SCOPE)%> --%>
2 輸出對象的屬性值
3 輸出集合對象 List 和Map
<%-- 1)EL輸出對象的屬性 --%> <% //保存數據 Student student = new Student("eric",20); //放入域中 pageContext.setAttribute("student",student); //List List list = new ArrayList(); list.add(new Student("rose",18)); list.add(new Student("jack",28)); list.add(new Student("lucy",38)); //放入域中 pageContext.setAttribute("list",list); //Map Map map = new HashMap(); map.put("100",new Student("mark",20)); map.put("101",new Student("maxwell",30)); map.put("102",new Student("narci",40)); //放入域中 pageContext.setAttribute("map",map); %> <%--使用EL獲取對象 --%> ${student.name} - ${student.age } <%-- ${student.name} 等價於 (點相對於調用getXX()方法) <%=((Student)pageContext.findAttribute("student")).getName()%> --%>
<%--使用EL獲取List對象 --%> ${list[0].name } - ${list[0].age }
${list[1].name } - ${list[1].age }
${list[2].name } - ${list[2].age } <%-- list[0]等價於 (中括號相對於調用get(參數)方法) ((List)pageContext.findAttribute("list")).get(0) --%>
<%--使用EL獲取Map對象 --%> ${map['100'].name } - ${map['100'].age }
${map['101'].name } - ${map['101'].age }
${map['102'].name } - ${map['102'].age }
4 EL表達式計算
<%-- 1)算術表達式 + - * / --%> ${10+5 }
${10*5 }
<%-- 2)比較運算 > < >= <= == != --%> ${10>5 }
${10<5 }
${10!=10 }
<%-- 3)邏輯運算 && || ! --%> ${true && false }
${true || false }
${!false }
<%-- 4)判空 null 或 空字符串: empty --%> <% //String name = "eric"; //String name = null; String name = ""; pageContext.setAttribute("name",name); %> 判斷null: ${name==null }
判斷空字符: ${name=="" }
判空: ${name==null || name=="" } 另一種判空寫法: ${empty name }
jsp標簽作用:替換jsp腳本。
1)流程判斷(if for循環)
2)跳轉頁面(轉發,重定向)
3)。。。。。
Jsp標簽分類
1)內置標簽(動作標簽): 不需要在jsp頁面導入標簽
2)jstl標簽: 需要在jsp頁面中導入標簽
3)自定義標簽 : 開發者自行定義,需要在jsp頁面導入標簽
動作標簽
轉發標簽:
參數標簽:
包含標簽:
原理: 包含與被包含的頁面先各自翻譯成java源文件,然後再運行時合並在一起。(先翻譯再合並),動態包含
靜態包含 vs 動態包含的區別:
1) 語法不同
靜態包含語法: <%@inclue file="被包含的頁面"%>
動態包含語法:
2)參數傳遞不同
靜態包含不能向被包含頁面傳遞參數
動態包含可以向被包含頁面傳遞參數
3)原理不同
靜態包含: 先合並再翻譯
動態包含: 先翻譯再合並
<%--轉發 --%> <% //request.getRequestDispatcher("/09.action2.jsp?name=eric").forward(request,response); %> <%-- 參數 --%> <%-- --%> <%--包含 --%> <%-- --%> <%@include file="common/header.jsp" %> 主頁的內容
JSTL (全名:java standard tag libarary - java標准標簽庫 )
核心標簽庫 (c標簽庫) 天天用
國際化標簽(fmt標簽庫)
EL函數庫(fn函數庫)
xml標簽庫(x標簽庫)
sql標簽庫(sql標簽庫)
使用JSTL標簽步驟
1) 導入jstl支持的jar包(標簽背後隱藏的java代碼)
注意:使用javaee5.0的項目自動導入jstl支持jar包
2)使用taglib指令導入標簽庫
<%@taglib uri="tld文件的uri名稱" prefix="簡寫" %>
3)在jsp中使用標簽
核心標簽庫的重點標簽:
保存數據:
獲取數據:
單條件判斷
多條件判斷
循環數據
重定向
<%@ page language="java" import="java.util.*,gz.itcast.b_entity.*" pageEncoding="utf-8"%>
<%--導入標簽庫 --%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%--使用標簽 --%> <%--set標簽 :保存數據(保存到域中)默認保存到page域 --%> <% String msg = null; pageContext.setAttribute("msg",msg); %> ${msg }
<%--out標簽: 獲取數據(從域中) default: 當value值為null時,使用默認值 escapeXml: 是否對value值進行轉義,false,不轉義,true,轉義(默認) --%>
<%--if標簽 :單條件判斷--%> 條件成立
<%--choose標簽+when標簽+otherwirse標簽: 多條件判斷 --%> 優秀 良好 一般 及格 不及格 <%-- forEach標簽:循環 --%> <% //List List list = new ArrayList(); list.add(new Student("rose",18)); list.add(new Student("jack",28)); list.add(new Student("lucy",38)); //放入域中 pageContext.setAttribute("list",list); //Map Map map = new HashMap(); map.put("100",new Student("mark",20)); map.put("101",new Student("maxwell",30)); map.put("102",new Student("narci",40)); //放入域中 pageContext.setAttribute("map",map); %>
<%-- begin="" : 從哪個元素開始遍歷,從0開始.默認從0開始 end="": 到哪個元素結束。默認到最後一個元素 step="" : 步長 (每次加幾) ,默認1 items="": 需要遍歷的數據(集合) var="": 每個元素的名稱 varStatus="": 當前正在遍歷元素的狀態對象。(count屬性:當前位置,從1開始) --%> 序號:${varSta.count} - 姓名:${student.name } - 年齡:${student.age}
${entry.key } - 姓名: ${entry.value.name } - 年齡:${entry.value.age }
<%-- forToken標簽: 循環特殊字符串 --%> <% String str = "java-php-net-平面"; pageContext.setAttribute("str",str); %> ${s }
<%--redrict:重定向 --%>
1 編寫一個普通的java類,繼承SimpleTagSupport類,叫標簽處理器類
/**
* 標簽處理器類
* @author APPle
* 1)繼承SimpleTagSupport
*
*/
public class ShowIpTag extends SimpleTagSupport{
private JspContext context;
/**
* 傳入pageContext
*/
@Override
public void setJspContext(JspContext pc) {
this.context = pc;
}
/**
* 2)覆蓋doTag方法
*/
@Override
public void doTag() throws JspException, IOException {
//向浏覽器輸出客戶的ip地址
PageContext pageContext = (PageContext)context;
HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
String ip = request.getRemoteHost();
JspWriter out = pageContext.getOut();
out.write("使用自定義標簽輸出客戶的IP地址:"+ip);
}
}
2 在web項目的WEB-INF目錄下建立itcast.tld文件,這個tld叫標簽庫的聲明文件。(參考核心標簽庫的tld文件)
1.1
itcast
http://gz.itcast.cn
showIp
gz.itcast.a_tag.ShowIpTag
scriptless
3 在jsp頁面的頭部導入自定義標簽庫
<%@taglib uri="http://gz.itcast.cn" prefix="itcast"%>
4 在jsp中使用自定義標簽
問題: http://localhost:8080/day14/01.hellotag.jsp 如何訪問到自定義標簽?
前提: tomcat服務器啟動時,加載到每個web應用,加載每個web應用的WEB-INF目錄下的所有文件!!!例如。web.xml, tld文件!!!
1)訪問01.hellotag.jsp資源
2)tomcat服務器把jsp文件翻譯成java源文件->編譯class->構造類對象->調用_jspService()方法
3)檢查jsp文件的taglib指令,是否存在一個名為http://gz.itcast.cn的tld文件。如果沒有,則報錯
4)上一步已經讀到itcast.tld文件
5)讀到 到itcast.tld文件中查詢是否存在為showIp的標簽
6)找到對應的標簽,則讀到內容
7)得到 gz.itcast.a_tag.ShowIpTag
構造ShowIpTag對象,然後調用ShowIpTag裡面的方法
SimpleTag接口:
void setJspContext(JspContext pc) --設置pageContext對象,
傳入pageContext(一定調用)通過getJspCotext()方法得到pageContext對象
void setParent(JspTag parent) --設置父標簽對象,傳入父標簽對象,
如果沒有父標簽,則不調用此方法。通過getParent()方法得到父標簽對象。
void setXXX(值) --設置屬性值。
void setJspBody(JspFragment jspBody) --設置標簽體內容。標簽體內容封裝到JspFragment對象中,然後傳入JspFragment對象。
通過getJspBody()方法得到標簽體內容。如果沒有標簽體內容,則不會調用此方法
void doTag() --執行標簽時調用的方法。(一定調用)
控制是否輸出標簽體內容
輸出: this.getJspBody().invoke(null)
不輸出: 不調用invoke(null)方法
控制標簽余下內容是否輸出
輸出: 什麼不都做!
不輸出: 拋出SkipPageException異常
重復輸出標簽體內容
重復調用: this.getJspBody().invoke(null)
修改標簽體內容
StringWriter sw = new StringWriter();
this.getJspBody().invoke(sw);
String content = sw.toString();
//修改內容
//手動輸出到浏覽器
this.getJspContext().getOut().writer(修改過的內容);
帶屬性的標簽
a)在標簽處理器類中聲明成員變量和setter方法,用於給屬性變量賦值。
b)在tld文件中聲明屬性
c)使用屬性
JSP: 在傳統標簽中使用的。可以寫和執行jsp的java代碼。
scriptless: 標簽體不可以寫jsp的java代碼
empty: 必須是空標簽。
tagdependent : 標簽體內容可以寫jsp的java代碼,但不會執行。
一、 看效果二、上代碼package com.framework.widget;import android.app.Activity;import android.co
LruCache以鍵-值對的形式存儲(內部定義了一個LinkedHashMap)數據,通過new LruCache(int size)實例化,參數使指定分配給LruCac
說到黑白,我就想起小時候家裡的黑白電視機,顯示效果比起現在的液晶顯示器不知道差到哪裡去了,但是一放假就看電視依然成為周末必做的是。那麼,在Android中要怎麼實現黑白濾
知識點:1.使用SQL Helper創建數據庫2.數據的增刪查改(PRDU:Put、Read、Delete、Update)背景知識:上篇文章學習了android保存文件,