jsp指令
page指令:<%@ page language="java"import="java.util*,java.io*,..." contentType="text/html;charset="utf-8" %>
include指令:<%@ include file="controller.jsp"%>
taglib指令:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
jsp編寫
jsp聲明:<%! java方法(或者變量,一般不用,涉及線程安全)%>
jsp小腳本:<% java語句%>
jsp表達式:<%=result***(無分號)***%>(相當于out.print(result))
html注釋:
<!--html注釋-->
jsp注釋:
jsp外部注釋:<%--jsp外部注釋--%>
jsp內部注釋:<%//內部單行注釋 %>
jsp內部多行注釋:<%/*內部多行注釋*/%>
jsp運行原理
第一次訪問時:
1.用戶通過瀏覽器訪問jsp的時候,tomcat負責把jsp轉化為java文件:
jsp聲明->java文件的成員方法;
jsp腳本->java文件中的_jspServices方法中的一段代碼;
jsp表達式->_jspServices方法中的一段代碼 out.write(html標簽);
2.服務器再把java文件編譯成class文件;
3.服務器執(zhí)行class文件:
首先對生成的java類進行實例化;
調用實例化后對象的_jspServices()方法輸出html給瀏覽器;
4.瀏覽器渲染html數據.
第二次訪問時:
1.服務器執(zhí)行class文件:
首先對生成的java類進行實例化;
調用實例化后對象的_jspServices()方法輸出html給瀏覽器;
2.瀏覽器渲染html數據:
jsp內置對象
1.不經常使用的內置對象:
pageContext:(內置對象的集大成者pageContext.getOut(),可以獲得其他內置對象)
config:(指定jsp頁面初始配置的)
page:(當前jsp實例化的對象,object類型)
exception:(處理頁面異常,使用java代碼處理異常errorpage="true"或"false")
2.經常使用的內置對象:
out
out.print(Object c);//向瀏覽器打印數據(將各種類型的數據轉換成字符串)
out.write(charset);//向瀏覽器打印數據(字符,字符數組,字符串(不能打印空字符))
out.println(Objct c); //向瀏覽器打印數據(將各種類型的數據轉換成字符串)并換行(源代碼換行相當是頁面回車,瀏覽器渲染是空格)頁面的換行用
out.print(null); // 頁面打印的是null
out.write(null) ; //出現空指針異常的報錯
request
String getParameter(String name);//根據表單組件名稱獲取提交數據
String getParanmeterValues(String name);//獲取表單組件對應多個值時的請求數據
void setCharacterEncoding(String charset);//指定每個請求的編碼
RequestDispatcher getRequestDispatcher(String path);//返回RequestDispatcher 對象,該對象的forward()方法用于轉發(fā)請求
編碼:
jsp頁面本身的編碼 utf-8
1. pageEncoding:頁面本身的編碼
2. contentType:瀏覽器渲染頁面的時候采用的編碼格式
一旦其中一種pageEncoding或contentType編碼格式已經指定,另外 一種編碼格式如果不進行指定,默認都采用已經指定的編碼格式。
服務器保存數據采用的編碼(resquest)
使用utf-8編碼來保存數據
(1)以POST方式提交數據
1.設置讀取請求數據的字符編碼為UTF-8:request.setCharterEncoding("UTF-8");
2.設置的request內部保存數據的格式,不包括url
(2)以GET方式提交數據
對請求的數據進行字符編碼:
第一種處理方式:
String name=request.getParameter("name");
name=new String(name.getBytes("ISO-8859-1"),"utf-8");
第二種處理方式:
tomcat/config/server.xml下的找到URIEncoding="ISO-8859-1"設置為URIEncoding="UTF-8"。
response
void sendRedirect(String location);//重定向
客戶端將重新發(fā)送到請求到指定的url,即【重定向】(客戶端通過發(fā)送一個新的請求實現頁面轉向,在地址欄中可以顯示轉向后的地址):通過響應告訴瀏覽器請求一個地址,瀏覽器訪問指定url(瀏覽器發(fā)出至少兩次請求,會導致第一次請求失效,狀態(tài)碼302告訴瀏覽器該重定向了)
第一次請求失效的兩種解決方法:
1.當第一次請求失效的時候,把數據進行保存,使用數據作為參數發(fā) 起第二次請求。
2.只發(fā)出一次請求完成頁面的跳轉(使用轉發(fā)取代頁面完成實現頁面跳轉)【轉發(fā):服務器端將同一請求在服務器資源之間進行傳遞,地址欄不會顯示轉 向后的地址)】:將請求發(fā)送給服務器上的其他資源,以完成一次請求的處理。
轉發(fā):request.getRequestDispatcher(String path).forward(request,respons);
session
一個會話就是在一段時間內,一個客戶端與Web服務器的一連串相關的交互過程。
String getId();//獲取sessionid
void setMaxInactiveInterval(int interval);//設定session的最大空閑時長(單位:秒)
int getMaxInactiveInterval();//獲取session的最大空閑時長(單位:秒)
void invalidate();//設置session對象失效
void setAttribute(String key, object value);//以key/value的形式保存對象值
object getAttribute(String key);//通過key獲取對象值
void removeAttribute(String key);//從session中刪除指定名稱(key)所對應的對象
設定session的最大空閑時長:
第一種方式:硬編碼:void setMaxInactiveInterval(int interval);
第二種方式:配置項目的web.xml或者tomcat/conf/web.xml,tomcat/conf/web.xml默認時長30分鐘
項目的web.xml(比tomcat的web.xml優(yōu)先)和tomcat的web.xml(全局配置)1(單位:分鐘)
application
實現用戶之間的數據共享
void setAttribute(String key,Object value);//以key/value的形式保存對象值
Object getAttribute(String key);//通過key獲取對象值
String getRealPath(String path);//返回相對路勁的真實路徑
網站訪問量(application應用):
Integer count=(Integer)application.getAttribute("count");
if(count==null){
application.setAttribute("count", 1);
}else{
application.setAttribute("count", count+1);
}
四大作用域(用于數據的保存)
application作用域:對應整個應用的上下文
session:對應一個用戶會話
request:對應一次請求
page:本jsp頁面的范圍(pageContext.getAttribute();pageContext.setAttribute();pageContext.include(String filename))
cookie(瀏覽器緩存cookie)
cookie是web服務器保存在客戶端的一系列文本信息
cookie作用:
1. 對特定對象的追蹤
2. 實現各種個性化服務
3. 簡化登錄
安全性能:容易泄露信息
Cookie newCookie=new Cookie(String key,String value); //創(chuàng)建 cookie對象
respose.addCokie(newCookie); //寫入cookie
Cookie[] cookies=request.getCookies();//讀取cookie