簡單來講,javaweb技術就是讓服務器端可以執行Java代碼,以後返回數據給客戶端(瀏覽器)讓客戶端顯示數據css
jsp頁面中能夠嵌套java代碼(java小腳本)和嵌套Web前端(html,css,js)來顯示數據。html
服務器解析一個jsp,其實就是把jsp中的java代碼編譯並執行,以後再返回一個String,String包含着html等Web前端數據,瀏覽器(客戶端)就能夠像日常打開靜態網頁同樣,接受靜態網頁數據(html),解析並顯示給用戶。前端
<% //這裏面能夠寫java代碼 %> <%! //這裏面只能寫變量申明,不能寫java代碼 %> //通常這裏與html標籤聯用,輸出數據 <%= %>
page指令,主要用於jsp頁面的設置java
屬性 | 描述 |
---|---|
contentType | 編碼(設置爲UTF-8,防止中文出現亂碼顯示) |
language | 定義語言(java) |
ErrorPage="xx.jsp" | 當前頁面出現異常,跳轉處處理異常的jsp頁面 |
isErrorPage="true" | true,即爲當前的頁面是處理錯誤的頁面,能夠使用隱式對象獲取到信息excetion.getMessage() |
下面的代碼,就是index.jsp
頁面出現錯誤以後,就會跳轉處處理異常的界面catch_error.jsp
web
index.jsp瀏覽器
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="catch_error.jsp" %> <html> <head> <title>fitsr jsp</title> </head> <body> <% int a=10; int result = a/0; out.write("<h1>"+result+"</h1>"); %> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %> <html> <head> <title>處理異常</title> </head> <body> <% String message = exception.getMessage(); out.write("<h1>錯誤信息:" + message + "</h1>"); %> </body> </html>
包含其餘文件,如引入一個jsp頁面或者是html頁面服務器
用來引入標籤庫的定義(JSTL標籤),後面補充。cookie
本質上,就是定義的一些函數。
JSP行爲標籤使用XML語法結構來控制servlet引擎。它可以動態插入一個文件,重用JavaBean組件,引導用戶去另外一個頁面,爲Java插件產生相關的HTML等等.session
<jsp:action_name attribute="value" />
語法 | 描述 |
---|---|
jsp:include | 用於在當前頁面中包含靜態或動態資源 |
jsp:useBean | 尋找和初始化一個JavaBean組件 |
jsp:setProperty | 設置 JavaBean組件的值 |
jsp:getProperty | 將 JavaBean組件的值插入到 output中 |
jsp:forward | 從一個JSP文件向另外一個文件傳遞一個包含用戶請求的request對象 |
jsp:plugin | 用於在生成的HTML頁面中包含Applet和JavaBean對象 |
jsp:element | 動態建立一個XML元素 |
jsp:attribute | 定義動態建立的XML元素的屬性 |
jsp:body | 定義動態建立的XML元素的主體 |
jsp:text | 用於封裝模板數據 |
jsp:userBean
建立一個Bean實例,若是存在就不會建立
<jsp:userBean id="" class="" scope=""> </jsp:userBean>
以後能夠在java腳本中,使用定義的bean,id就是變量名
<jsp:setProperty name="" property="" value="" > </jsp:setProperty>
name是變量名(上面jsp:userBean標籤的id),value中的數值會自動轉型爲屬性對應的類型
<!-- 至關於請求轉發 --> <jsp:forword page=""> </jsp:forword>
<!-- 傳參--> <jsp:forword page=""> <jsp:param name="" value=""/> </jsp:forword>
指令<% @include 的jsp頁面不會被單獨的轉譯成java文件和編譯成class文件,不容許存在相同的變量
jsp:include 的jsp頁面會被單獨地轉譯成java文件和編譯成class文件,容許存在相同的變量
對象 | 描述 |
---|---|
request | HttpServletRequest類的實例 |
response | HttpServletResponse類的實例 |
out | PrintWriter類的實例,用於把結果輸出至網頁上 |
session | HttpSession類的實例 |
application | ServletContext類的實例,與應用上下文有關 |
config | ServletConfig類的實例 |
pageContext | PageContext類的實例,提供對JSP頁面全部對象以及命名空間的訪問 |
page | 相似於Java類中的this關鍵字 |
Exception | Exception類的對象,表明發生錯誤的JSP頁面中對應的異常對象 |
這裏面九大隱式對象,經常使用的就是前四個。能夠直接在JSP中的腳本,聲明和表達式中使用(<% %>
<%= %>
)
(瀏覽器)客戶端發出請求,就會建立一個request對象
request對象是javax.servlet.http.HttpServletRequest 類的實例
每當客戶端請求一個JSP頁面時,JSP引擎就會製造一個新的request對象來表明這個請求。
request對象提供了一系列方法來獲取HTTP頭信息,cookies,HTTP方法等等。
rquest還能夠得到表單提交以後傳來的參數值
//得到表單中的name="username"的標籤內容 String name = request.getParameter("username"); //設置編碼,防止出現中文亂碼 request.setCharacterEncoding("utf-8");
response對象是javax.servlet.http.HttpServletResponse類的實例。
當服務器建立request對象時會同時建立用於響應這個客戶端的response對象。
response對象也定義了處理HTTP頭模塊的接口。經過這個對象,開發者們能夠添加新的cookies,時間戳,HTTP狀態碼等等。
out對象是 javax.servlet.jsp.JspWriter 類的實例,用來在response對象中寫入內容或者是當前頁面直接輸出內容
某個jsp文件,下面的代碼就是表示該jsp文件打開以後,瀏覽器會顯示hello world
<% out.print("hello world"); //輸出一級標題 out.print("<h1>hello</h1>"); //實現換行 out.print("hello<br>"); %>
雖然有println方法,可是換行在輸出後面使用<br>
標籤
服務端能夠使用out對象的write
或者是print
方法,向客戶端返回數據
每當建立一個會話(即瀏覽器訪問當前網站,不關閉瀏覽器就是一個會話),就會產生一個session對象
通常存放用戶登陸信息,重定向以後的session存放的數據不會丟失
web.xml中設置session的有效時長,默認是30分鐘
<session-config> <timeout>單位爲9分鐘 </session-config>
//session過時,就會新建,不然,就返回存在的session getSenssion(true)
pageContext,request,session,application均可以經過setAttribute和getAttribute方法來存放和取出數據
pageContetxt表示數據只能存放在當前頁面,打開了新頁面就沒法得到以前存放的數據
request比pageContext的範圍稍大一些,能夠在新頁面獲取以前的存放的數據,不過,只能是請求轉發的新頁面才能得到。
session和application範圍較大,存放的數據幾乎所有頁面均可以取出來。
request.setAttribute("user",user); Object o = request.getAttribute("user");//取出來須要強制轉型