JSP技術
時間:2023-09-26 02:24:01 | 來源:網(wǎng)站運營
時間:2023-09-26 02:24:01 來源:網(wǎng)站運營
JSP技術:
java052
jsp
jsp的概念:1)全名稱為Java Server Pagas,中文名稱為java服務器頁面,其根本就是一個簡化的servlet設計,JSP是一種動態(tài)網(wǎng)頁技術標準。
2)參考了微軟ASP而來的。主要解決Servlet在界面展現(xiàn)上存在的不足(利用Servlet實現(xiàn)界面展示比較繁瑣)。
jsp的特點: 1)本質上還是 Servlet 。
2)跨平臺,一次編寫處處運行 。
3)組件跨平臺 。
4)健壯性和安全性。
jsp的使用: JSP 負責頁面展現(xiàn),Servlet 負責業(yè)務邏輯處理。
JSP的本質:JSP的本質就是一個Servlet.
JSP的執(zhí)行過程: 3)執(zhí)行字節(jié)碼。將JSP翻譯成java源文件(Servlet)。
2)編譯階段:將JSP編譯成class文件(字節(jié)碼文件)。
3)執(zhí)行字節(jié)碼。
JSP頁面的組成部分:1.指令元素:page指令,include指令, taglib指令。
語法:<%@ 指令元素的名稱 屬性1="值1" 屬性2="值2"...%>
page指令:設置頁面的信息 <%@ page language="腳本語言" import="包名.類名" pageEncoding="頁面編碼集"%>
eg:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
include指令: 靜態(tài)引入(靜態(tài)包含)<%@include file="url" %>
eg:<%@include file="commons.jsp"%>
2.小腳本:<% java代碼%>
在小腳本中的代碼屬于java代碼,java的注釋(單行注釋,多行注釋,文檔注釋) 在小腳本中可以正常使用
<%
//獲取當前日期
Date date = new Date();
%>
3.前端靜態(tài)元素:HTML+CSS+JS...
4.表達式: 輸出小腳本中變量的值<%= 表達式%>
<%=date%>
5.聲明: 在頁面上聲明變量,方法等內容。(不建議使用)
<%! 聲明的元素內容%>
eg:
<%!int a=10; %>
<%!
public int max(int a,int b){
return a>b?a:b;
}
%>
6.注釋:
a.HTML注釋:<!--注釋內容--> 運行在客戶端的(可以通過查看網(wǎng)頁源代碼看到)
b.小腳本的注釋: //單行注釋 /*多行注釋*/ 運行在服務器端的(可以通過查看網(wǎng)頁源代碼無法看到)
c.JSP注釋:<%--注釋內容--%> 運行在服務器端的(可以通過查看網(wǎng)頁源代碼無法看到)
7.動作元素:
<jsp:動作名稱 屬性="值"..></jsp:動作名稱>
常見的動作元素:
請求轉發(fā): <jsp:forward page="url"></jsp:forward>
forward動作元素:等同于請求轉發(fā)request.getRequestDispatcher(url).forward(request,response)
動態(tài)包含:
<jsp:include page="url"></jsp:include>
eg:
<jsp:include page="index2.jsp"></jsp:include>
面試題:動態(tài)包含和靜態(tài)包含的區(qū)別?
相同點: 都可以實現(xiàn)頁面包含(引入)的效果。
不同的:1)語法不同靜態(tài)包含:<%@include file="包含的頁面"%>
動態(tài)包含:<jsp:include page="包含的頁面"/>
2)編譯的文件個數(shù)不同動態(tài)包含最終編譯輸出的文件為2個(被包含的頁面單獨編譯), 包含頁面和被包含的頁面的變量名可用相同。
靜態(tài)包含最終編程輸出的文件為1個,不允許包含頁面和被包含的頁面的變量名相同。
代碼示例:include.jsp類<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%--問題: 發(fā)現(xiàn),不同的jsp頁面會使用相同的資源。如果將資源在每個jsp頁面都單獨聲明 則會造成代碼的冗余量過高,不易于代碼的維護和升級。解決: 使用靜態(tài)引入和動態(tài)引入的方式使用: 靜態(tài)引入: <%@include file="要引入的資源的相對路徑"%> 特點: 被引入的jsp文件和原有jsp文件被轉譯成一個java文件使用。 注意:靜態(tài)引入的相關jsp文件中不能聲明同名變量。 動態(tài)引入: <jsp:include page="要引入的資源的相對路徑"></jsp:include> 特點: 被引入的文件會被單獨轉譯,原有jsp文件會調用被引入的jsp文件。 注意:動態(tài)引入的相關jsp文件中可以聲明同名變量。 靜態(tài)引入/靜態(tài)引入 作用:實現(xiàn)了不同jsp之間的資源共享。 --%><html><head></head><body><h2>靜態(tài)引入和動態(tài)引入的學習</h2><hr/><%-- <i>©網(wǎng)站聲明,手機號:77889900,網(wǎng)站備案號等</i> --%> <%int a=3; %> <!-- 1.靜態(tài)引入 --><%-- <%@include file="static.jsp"%> --%><!-- 2.動態(tài)引入 --><jsp:include page="static.jsp"></jsp:include></body></html>
static.jsp類<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><% int a=3;%><i>©網(wǎng)站聲明,手機號:114,網(wǎng)站網(wǎng)站備案號</i>
JSP的內置對象(九個內置對象/隱式對象)1.request對象(HttpServletRequest):封裝用戶請求數(shù)據(jù),通過該對象可以獲取用戶請求的相關數(shù)據(jù)。常用的方法:request.getParameter(String name)--->String: 根據(jù)參數(shù)的名稱獲取參數(shù)的值。
request.getParameterValues(String name)--->String[]:根據(jù)參數(shù)的名稱獲取參數(shù)值。主要用于復選框。
request.setAttribute(String name,Object value):將指定的值存到request范圍中.
request.getAttribute(String name):通過名稱從request返回中獲取值。
request.getRequestDispatcher(String url).forward(request,response):請求轉發(fā)
request.setCharacterEncoding(String encoding):設置請求編碼集,可以解決post提交的亂碼問題。
request.getSession():獲取會話對象。
需要了解的方法request.getScheme():獲取協(xié)議 --->http
request.getServerName():獲取服務器名稱或IP地址
request.getServerPort():獲取服務器端口號
request.getContextPath():獲取上下文路徑(默認是項目名)
2.response對象(HttpServletResponse):封裝響應數(shù)據(jù)。常用的方法:
response.setContentType(String content);--->response.setContentType("text/html;charset=utf-8");
response.sendRedirect(String url):重定向
response.getWriter()--->JspWriter:獲取輸出流進行輸出
3.session對象(HttpSession):封裝會話信息(瀏覽器和服務器之間的會話),一個會話中多次請求數(shù)據(jù)共享。常用的方法
session.setAttribute(String name,Object value):存值
session.getAttribute(String name):取值
session.invalidate():銷毀會話
4.application對象(ServletContext):封裝Servlet上下文信息,整個應用程序共享。常用的方法
application.setAttribute(String name,Object value):存值
application.getAttribute(String name):取值
5.out對象(PrintWriter):在頁面輸出信息out.print(Object content)/out.println(Object content);
out.write(Object content)
6. pageContext對象:頁面上下文對象,可以通過該對象獲取其他8個內置對象
pageContext.setAttribute(String name,Object value):存值
pageContext.getAttribute(String name):取值
7.page對象(this):當前頁面8.config對象(ServletConfig):封裝配置信息9.exception(Exception):封裝異常信息面試題:page(pageContext)|request|session|application作用域的區(qū)別:
1)page:作用域范圍僅限于當前頁面。
2)request:作用域范圍僅限于一次請求之間(包含當前頁面)。注意:如果在A頁面存值,在B頁面取值,則A頁面跳轉B頁面必須使用請求轉發(fā)。
3)session:作用域范圍僅限于一次會話之間(包含當前頁面和多次用戶請求)。
4)application:作用域范圍是整個應用程序(項目)共享。
其范圍大小:application>session>request>pageJsp 的訪問原理: 瀏覽器發(fā)起請求,請求 JSP,請求被 Tomcat 服務器接收,執(zhí)行 JspServlet 將請求的 JSP 文件轉義成為對應的 java 文件(也是 Servlet),然后執(zhí)行轉義好的 java 文件。
資源路徑總結: Jsp 中路徑:
相對路徑:../../資源
絕對路徑:/虛擬項目名/資源路徑
路徑問題(基礎路徑:主要解決跳轉時目錄路徑問題,通過基礎路徑每次從項目的根目錄開始查找,可以省去相對路徑之間的進退文件夾的問題)。