1. 什麼是JSP
l JSP
– 簡單的說,就是嵌入了Java代碼的HTML,由靜態HTML、專用的JSP標簽和Java代碼組成
– 服務器端的技術。在後台被自動轉換成servlet
– 僅在修改後的第一次被訪問時,才會被轉換成servlet並進行編譯,創建JSP唯一的一個一實例,並調用_jspInit完成初始化,之後每個用戶請求都會創建一個調用JSP實例的_jspService方法的線程。因而多個並發請求會導致多個線程同時調用_jspService
– Tomcat中,默認目錄下的JSP文件被轉換生成的servlet文件及編譯後生成的class文件被放在install_dir/work/ Catalina/ localhost/ _/org/apache/jsp目錄下
JSP頁面page指令的15個常用屬性
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Date date = new Date();
out.print(date);
%>
1. include指令
在JSP的用法中,經常通過Include指令來包含另外一個頁面。
當我們對這些頁面進行編譯時,當前的頁面會與include指令指定的頁面進行合並。
這就是JSP的include的運行機制
2. taglib指令
可以通過taglib指令標識申明該頁面中所使用的標簽庫,如jstl,struts2
4. JSP的動作標簽
在JSP中的動作指令包括:Include、 Forward、 UseBean、 GetProperty、 SetProperty、 Plugin。
一、Include指令
語法:
or
注:
1、page="path" 為相對路徑,或者代表相對路徑的表達式。
2、flush="true" 必須使用flush為true,它默認值是false。
3、
二、Forward指令
語法:
or
注:
1、page="path" 為一個表達式,或者一個字符串。
2、
三、UseBean指令
語法:
其中typeSpec有以下幾種可能的情況:
class="className" | class="className" type="typeName" | beanName="beanName" type="typeName" | type="typeName" |
注:
你必須使用class或type,而不能同時使用class和beanName。beanName表示Bean的名字,其形式為“a.b.c”。
四、GetProperty指令
語法:
注:
1、在使用
2、不能使用
3、能夠和JavaBeans組件一起使用
五、SetProperty指令
語法:
其中prop_expr有以下幾種可能的情形:
property="*" | property="propertyName" | property="propertyName" param="parameterName" | property="propertyName" value="propertyValue"
注:
使用 jsp:setProperty 來為一個Bean的屬性賦值;可以使用兩種方式來實現。
1、在jsp:useBean後使用jsp:setProperty:
…
在這種方式中,jsp:setProperty將被執行。
2、jsp:setProperty出現在jsp:useBean標簽內:
…
在這種方式中,jsp:setProperty只會在新的對象被實例化時才將被執行。
* 在
六、Plugin指令
語法:
code="classFileName"
codebase="classFileDirectoryName"
[ name="instanceName" ]
[ archive="URIToArchive, ..." ]
[ align="bottom | top | middle | left | right" ]
[ height="displayPixels" ]
[ width="displayPixels" ]
[ hspace="leftRightPixels" ]
[ vspace="topBottomPixels" ]
[ jreversion="JREVersionNumber | 1.1" ]
[ nspluginurl="URLToPlugin" ]
[ iepluginurl="URLToPlugin" ] >
[
[
[
注:
當Jsp文件被編譯,送往浏覽器時,
Request對象
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
<%="傳遞方式:"+request.getMethod()
%>
<%="字符編碼方式:"+request.getCharacterEncoding()%>
<%="使用的協議:"+request.getProtocol()
%>
<%="客戶端地址:"+request.getRequestURI()
%>
<%="客戶端地址:"+request.getRequestURL()
%>
<%="客戶端IP地址:"+request.getRemoteAddr()
%>
<%="獲取服務器端口:"+request.getServerPort()
%>
<%="獲取服務器名稱:"+request.getServerName()
%>
<%="獲取主機名:"+request.getRemoteHost()
%>
<%="獲取腳本文件路徑:"+request.getServletPath()
%>
<%="獲取協議頭部信息:"+request.getHeader("host")
%>
<%="獲取協議頭部信息:"+request.getHeader("user-agent")
%>
<%="獲取協議頭部信息:"+request.getHeader("accept-language")
%>
Response
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//重定向頁面
response.sendRedirect("out.jsp");
//禁止使用緩存
response.setHeader("Cache-Contral","no-store");
//禁用緩存
response.setHeader("Expires","0");
//設置頁面自動刷新
response.setHeader("refresh","1");
//定時跳轉頁面
response.setHeader("refresh","5;URL=out.jsp");
//強制將緩沖區內容輸出客戶端
response.flushBuffer();
//獲取緩沖區大小
response.getBufferSize();
//設置緩沖區大小
response.setBufferSize(1023);
//清除緩沖區大小
response.reset();
//檢查服務器端是否已經把數據寫入到了客戶端
response.isCommitted();
%>
Session
1.test1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String name = "felayman";
session.setAttribute("username",name);
%>
3. test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String username = (String)session.getAttribute("username");
%>
session:<%=username %>
PageContext對象
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//跳轉頁面
pageContext.forward("out.jsp");
%>