<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
<% String path = request.getContextPath();%>jsp裏面用到意思是:css
1.request.getContextPath() 得到當前的項目根目錄路徑;html
2.聲明一個字符串變量path;java
3.將當前項目的根目錄複製給變量path。web
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";面試
得到應用的根url,好比說你的應用的根路徑是 http://localhost:8080,那麼你列出的代碼就是爲basePath賦值爲 http://localhost:8080。瀏覽器
具體點:緩存
一、request.getScheme() 返回協議的名稱 http,和後面的"://" 拼起來就成了 http://tomcat
二、request.getServerName() 這是獲取你的服務器的名稱,若是你的應用部署在本機那麼其就返回localhost或者127.0.0.1 ,這2個是等價的服務器
三、request.getServerPort() 是你應用使用的端口,好比8080或者80session
一、HTML:靜態頁面,不能包含java代碼,只能有HTML有關的標記
二、Servlet:寫java代碼,作頁面的輸出,不是很方便(開發效率很低)
三、JSP:HTML+java
一、JSP就是Servlet,學習好JSP的關鍵(語法),時刻想到他對應的Servlet。
指JSP中的那些HTML。開發時先編寫模板元素,由於他們決定頁面的外觀。
語法:<%java程序%>
出如今JSP對應Servlet的service方法中。
<%聲明的變量:局部%>
語法:<%=表達式%>
<!-- 以表格的形式打印出來 --> <table border = "1" width = "438"> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> <% for(student s : stu){ %> <tr> <td><%=s.getName()%></td> <td><%=s.getGender()%></td> <td><%=s.getAge()%></td> </tr> <% } %>
語法:<%!
%>
做用:定義JSP對應Serlvet的成員(變量和方法、靜態方法)全局變量
注意:開發中不多用。面試和考試常常考。
語法:<%--這是註釋--%>
做用:註釋掉的代碼,JSP引擎不會翻譯到Servlet源碼中。要注意和HTML註釋的區別。
指令是爲JSP引擎設計的。而只是告訴引擎如何處理JSP頁面中的其他部分(非指令部分);
基本語法格式:<%@指令 屬性1=」值1」 ....%>.
通常把指令放在JSP頁面的頂部(不是必須的)
指令的屬性能夠寫在一個指令的中,也能夠分開寫:好比:
<%@指令 屬性1=」值1」 屬性2=」值2」%>.
等價於:
<%@指令 屬性1=」值1」 %>.
<%@指令 屬性2=」值2」%>.
屬性:
language:告知引擎,腳本用的是java。默認java,支持java。不寫也行。
extends:告知引擎,JSP對應的Servlet的父類是哪一個。不須要寫,也不要改。
*import:告知引擎,導入哪些包。
注意:引擎自動導入: java.lang.;javax.servlet.;javax.servlet.http.;javax.servlet.jsp.;
<%@page import=」java.util.Date,java.util.UUID」%>或者: <%@page
import=」java.util.Date」%> <%@page import=」java.util.UUID」%>
用Eclipse:Alt+/ 自動導入
*session:告知引擎是否產生HttpSession對象,便是否在代碼中調用request.getSession()。默認值true。 buffer:JspWriter用於輸出JSP的內容到頁面上。告知引擎,設定他的緩存大小。默認8Kb。
*errorPage:告知引擎,當前頁面出現了異常,應該轉發到哪一個頁面上(路徑寫法:/表明着當前應用,相對路徑)
配置全局錯誤頁面:web.xml
isErrorPage:告知引擎,是否抓住異常。若是該屬性爲true,頁面中就可使用exception隱含對象,打印異常的詳細信息。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%> <body> <%=exception.getMessage() %> <h1>服務器出錯了</h1> <h1>服務器出錯了</h1> <h1>服務器出錯了</h1> <h1>服務器出錯了</h1> <h1>服務器出錯了</h1> <h1>服務器出錯了</h1> <h1>服務器出錯了</h1> <h1>服務器出錯了</h1> <h1>服務器出錯了</h1> </body>
contentType:告知引擎,響應正文的MIME類型。
contentType=」text/html;charset=UTF-8」 至關於response.setContentType(「<%=exception.getMessage() %>」);
pageEncoding:告知引擎,翻譯JSP時(要從磁盤上讀JSP文件)所用的碼錶。要和存的時候編碼一致
pageEncoding=」UTF-8」:至關於,告知了引擎用UTF-8讀jsp,還response.setContentType(「text/html;charset=UTF-8」);
isELIgnored:告知引擎,是否忽略EL表達式。默認值是false,不忽略。
包含屬性:file,以」/」開頭,就表明着當前應用。
引入外部的標籤。實現視圖代碼重用,不多量的代碼就能實現很複雜的效果
要使用標籤功能必須先聲明標籤庫以及標籤前綴
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
uri:外部的標籤的uri地址,比如名稱空間
prefix:前綴。
一、轉發:<jsp:forward page="/10forward.jsp"></jsp:forward>
<jsp:forward page="/10forward.jsp"> <jsp:params value="124" name="username" </jsp:forward>
forward不只能夠跳轉到本應用的另外一個servlet jsp頁面,也能夠跳轉到另一個文件,甚至WEB-INF文件夾下的文件
當使用forward進行跳轉時, 地址欄會顯示跳轉前的訪問地址,跳轉是在服務器端實現的
重定向是利用服務器返回的狀態碼來實現的。客戶端瀏覽器請求服務器的時候,服務器會返回一個狀態碼
進行重定向時,跳轉是在客戶端實現的。也就是客戶端實際上請求了服務器兩次。第一次得到重定向狀態碼和重定向的網址,第二次訪問真實網址,
JSP的內置標籤。
二、參數:不能單獨使用
向目標傳遞請求參數
三、包含:(面試題)
靜態包含:<%@include %> 在編譯的時候,將源碼加了進去
動態包含:其他的
<jsp:include page=」」/>
總結:用標籤能夠少些java腳本。
一、自己是一個域(範圍)對象,還能操做其餘3個域對象中的屬性
頁面範圍:
void setAttribute(String name,Object value);
void removeAttribute(String name);
Object getAttribute(String name);
操做其餘域對象中的屬性:
void setAttribute(String name,Object value,int scope);
void removeAttribute(String name,int scope);
Object getAttribute(String name,int scope);
int scope:常量,PageContext PAGE_SCOPE(頁面) REQUEST_SCOPE(請求)SESSION_SCOPE(會話)APPLICATION_SCOPE(應用)
在四個範圍中依次查找指定名稱對象的方法:
PAGE(頁面) REQUEST(請求)SESSION(會話)APPLICATION(應用)
超出頁面範圍結果爲null,若是是同一個對象,那麼就會輸出value值。
Object findAttribute(String name); 從四個對象中依次查找
二、獲取其餘八個JSP隱含對象(自定義標籤時用)
PageContext.getRequest();
getServletContext();
getServletConfig();
getException();
get...
三、提供轉發和包含的簡易方法
pageContext.include(String url);
參數必須以「/」開始,「/」表示本web應用程序的根目錄(WebRoot)
pageContext demo
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>pageContext demo</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% pageContext.setAttribute("p", "pp"); %> <% pageContext.setAttribute("p", "pp", pageContext.PAGE_SCOPE); %> <% request.setAttribute("p", "rp"); %> <% pageContext.setAttribute("p", "rp", pageContext.REQUEST_SCOPE); %> <% session.setAttribute("p", "sp"); %> <% pageContext.setAttribute("p", "sp", pageContext.SESSION_SCOPE); %> <% application.setAttribute("p", "ap"); %> <% pageContext.setAttribute("p", "ap", pageContext.APPLICATION_SCOPE); %> <%-- <jsp:forward page = "2.jsp"></jsp:forward> --%> <%-- response.sendRedirect("2.jsp"); --%> <% pageContext.forward("/test/2.jsp"); %> <%-- <%=pageContext.getAttribute("p")%> <%=request.getAttribute("p")%> <%=session.getAttribute("p")%> --%> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>2</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> page:<%=pageContext.getAttribute("p")%></br> request:<%=request.getAttribute("p")%></br> session:<%=session.getAttribute("p")%></br> application:<%=application.getAttribute("p")%></br> </body> </html>
實際開發中:存放數據的。
PageContext:頁面範圍。最小。開發中不多用。演示代碼。
ServletRequest:請求範圍。不一樣的資源,只有用轉發。
HttpSession:會話範圍。屢次請求共享數據,但不一樣的客戶端不能共享。
ServletContext:應用範圍。最大。儘可能少用。用時要作同步處理。
Servlet:擅長寫Java代碼邏輯,不擅長輸出html的內容。
開發中做爲:控制器。
JSP:不擅長寫Java代碼邏輯,擅長顯示結果。
開發中做爲:視圖(顯示結果)
一、JavaBean又稱之爲POJO(Plain Old Java Object)、VO(Value Object)、DO(Data Object)
二、JavaBean的書寫規範
a、必須是public的
b、提供默認的構造方法
c、字段都是私有的: private String username;
d、提供公有的getter或setter方法:屬性。
getUsername():讀屬性,屬性名:username.
setUsername(String username):寫屬性,屬性名:username。
注意:private boolean married; getMarried()===isMarried()
e、通常須要實現java.io.Serializable接口。
結論:JavaBean在JavaEE開發中,主要擔當封裝數據用的。