jsp就是一個(gè)可以寫java代碼的html柒昏,jsp的本質(zhì)是一個(gè)Servlet谴轮,因?yàn)閠omcat會(huì)把jsp編譯成一個(gè)Servlet的實(shí)現(xiàn)類池户,通過打印看到頁面內(nèi)容
jsp的9大隱式對象
final javax.servlet.http.HttpServletRequest request
final javax.servlet.http.HttpServletResponse response
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
// 還有exception對象片吊,一共9個(gè)
①request:客戶端的請求信息被封裝在request對象中佩谣,通過它才能了解用戶的需求度帮,然后做出響應(yīng)
②response:包含了響應(yīng)客戶請求的有關(guān)信息,但在JSP中使用很少
③pageContext:頁面的上下文稿存,是PageContext的一個(gè)對象笨篷,可以從該對象中獲取到其他8個(gè)隱含對象,也可以獲取到當(dāng)前頁面的其他信息
④session:指的是客戶端與服務(wù)器的一次會(huì)話瓣履,從客戶端連到服務(wù)器的一個(gè)WebApplication開始率翅,知道客戶端與服務(wù)器斷開連接為止
⑤application:代表當(dāng)前web應(yīng)用,是ServletContext對象袖迎,能實(shí)現(xiàn)用戶間數(shù)據(jù)的共享冕臭,可存放全局變量,它開始于服務(wù)器的啟動(dòng)燕锥,直到服務(wù)器的關(guān)閉辜贵,在此期間,此對象一直存在归形;這樣在用戶的前后連接或不同用戶之間的連接中托慨,可以對此對象的同一屬性進(jìn)行操作;在任何地方對此對象屬性的操作暇榴,都將影響到其他用戶對此的訪問厚棵。服務(wù)器的啟動(dòng)和關(guān)閉決定了application對象的生命周期
⑥config:當(dāng)前JSP對應(yīng)的Servlet的ServletConfig對象,可獲取該Servlet的初始化參數(shù)(開發(fā)時(shí)基本不用)蔼紧,需要通過映射的地址才可以婆硬。
⑦out:JspWriter對象,調(diào)用out.println()可以直接把字符串打印到瀏覽器上
⑧page:page對象就是指向當(dāng)前JSP頁面本身奸例,類型為Object彬犯,有點(diǎn)類似于類中的this,幾乎不使用
⑨exception:該對象是一個(gè)例外對象,只有頁面是一個(gè)錯(cuò)誤頁面,即isErrorPage設(shè)置為true的時(shí)候(默認(rèn)為false)才能使用,否則無法編譯。
域?qū)ο?/h1>
pageContext:對屬性的作用域是當(dāng)前頁面
request:對屬性的作用域是同一個(gè)請求
session:對屬性的作用域是一次會(huì)話(默認(rèn)瀏覽器的一次打開到關(guān)閉)
application:對屬性的作用域是整個(gè)服務(wù)周期
域?qū)ο笞钪匾姆椒?br>
void setAttribute(String,Object) 設(shè)置屬性
Object getAttribute(String) 獲取屬性
請求轉(zhuǎn)發(fā)和請求重定向
pageContext:對屬性的作用域是當(dāng)前頁面
request:對屬性的作用域是同一個(gè)請求
session:對屬性的作用域是一次會(huì)話(默認(rèn)瀏覽器的一次打開到關(guān)閉)
application:對屬性的作用域是整個(gè)服務(wù)周期
域?qū)ο笞钪匾姆椒?br>
void setAttribute(String,Object) 設(shè)置屬性
Object getAttribute(String) 獲取屬性
它們都能實(shí)現(xiàn)資源跳轉(zhuǎn)
①請求轉(zhuǎn)發(fā)只有一次請求项棠,重定向有兩次
②請求轉(zhuǎn)發(fā)不能看見最終申請資源的URL,而重定向可以
③請求轉(zhuǎn)發(fā)只能轉(zhuǎn)發(fā)站內(nèi)資源‘备闲,重定向可以請求站外資源
請求轉(zhuǎn)發(fā)的方法:
request.getRequestDispatcher("/login_success.jsp").forward(request, response);
請求重定向的方法
response.sendRedirect("login_success.jsp");
絕對路徑的必要性
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Login3 Page</h1>
<a href="<%= request.getContextPath() %>/user/login3"></a>
<form action="<%= request.getContextPath() %>/user/login3" method="post">
<input type="text" name="username">
<input type="password" name="password">
<button>提交</button>
</form>
</body>
</html>
// 請求轉(zhuǎn)發(fā)/代表項(xiàng)目根目錄
request.getRequestDispatcher("/jsp/login_success.jsp").forward(request, response);
// 重定向request.getContextPath()獲取項(xiàng)目根目錄
response.sendRedirect(request.getContextPath()+"/jsp/login_fail.jsp");