計算機通過統一資源定位符實現資源訪問,URL:Uriform Resource Locator
Tomcat服務器的目錄結構
- /bin:存放各種平台下用於啟動和停止Tomcat的腳本文件
- /conf:存放Tomcat服務器的各種配置文件
- /lib:存放Tomcat服務器所需要的各種JAR文件
- /logs:存放Tomcat的日志文件
- /temp:Tomcat運行時用於存放臨時文件
- /webapps:當發布Web應用時,默認情況下會將Web應用的文件存放於此目錄中
- /work:Tomcat把由JSP生成的Servlet放於此目錄下
web應用的目錄結構
- /:Web應用的根目錄,該目錄下所有文件在客戶端都可以訪問(JSP、HTML等)
- /WEB-INF:存放應用使用的各種資源,該目錄及其子目錄對客戶端都是不可以訪問
- /WEB-INF/classes:存放Web項目中所有的class文件
- /Web-INF/lib:存放Web項目使用的JAR文件
在Tomcat的運行過程中,首先加載classess目錄下的class文件,再加載lib目錄下的類。如果兩個目錄下存在同名的類,classes目錄下的類具有優先權。
JSP(Java Server Pages)是運行在服務器端的Java頁面,使用HTML嵌套Java代碼實現。
其工作原理可以總結為:Java代碼嵌入在JSP頁面,然后JSP頁面編譯執行到服務器端,與服務器進行數據交互,然后返回頁面信息到客戶端。
Web容器處理JSP請求的三個階段
- 翻譯階段:生成Java文件
- 編譯階段:生成class文件
- 執行階段
當二次請求頁面時,Web容器會直接執行上次編譯好的字節碼文件,而不會重復編譯。
JSP中的page指令
- 通過設置內部的多個屬性定義整個頁面的屬性
- 語法:
<%@page 屬性1=“屬性值” 屬性2=“屬性值1,屬性值2”...屬性值n=“屬性值n”%>
- 實例
%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
常用屬性
- language:指定JSP頁面使用的腳本語言,默認值為java
- import:通過該屬性來引用腳本語言使用到的類文件,沒有默認值
- contentType:用來指定JSP頁面所采用的編碼方式,默認值為text/html,ISO-8859-1
JSP中的小腳本和表達式
小腳本語法:<% 代碼 %>
表達式語法:<%= 代碼 %
小腳本實例:
<% //嵌套的是java代碼 int sum=10+20; //輸出到控制台 System.out.println("sum="+sum); //輸出到頁面 out內置對象 out.println("sum="+sum); %>
其中,System.out.println()為輸出到控制台,out.println()為輸出到頁面
表達式實例:
<%=sum %>
此例sum的值為30,表達式輸出的值為30。
輸出當前日期的小腳本和表達式實例:
<% SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日"); String time=format.format(new Date()); %> <br/> <!-- 輸出當前時間 --> <%=time %>
在上例中,simpleDateFormat方法對日期進行格式化,使其格式成為yyyy年MM月dd日。
JSP頁面中定義方法
語法:
<%! Java代碼%>
與小腳本不同的是多了一個感嘆號。
小實例:編寫jsp頁面,計算1-100之間的所有偶數之和
<% int oushusum=0; for(int a=0;a<=100;a=a+2){ oushusum=a+oushusum; } %><br> <%="1-100偶數的和:"+oushusum %>
對以上“輸出當前時間”的頁面進行改進,使格式化時間的代碼封裝到一個方法中。如下:
<%! public String formatDate(Date d){ SimpleDateFormat fma=new SimpleDateFormat("yyyy-MM-dd"); return fma.format(d); } %> <%=formatDate(new Date())%>
當方法有返回值的時候,可以使用表達式進行輸出,當方法沒有返回值時,可以用小腳本進行直接調用。方法聲明以后,可以在頁面中進行多處調用。
注釋
頁面中HTML代碼的注釋是可以在客戶端看到的,而JSP注釋在客戶端不可見。
<!--客戶端可以查看到--> <%--客戶端不能查看到--%>
JSP內置對象
JSP內置對象是Web容器創建的一組對象,比如out對象,沒有出現new關鍵字,但可以使用。
<% int[] value={56,65,45,65}; for(int i:value){ out.println(i); } %>
常用的JSP內置對象
out、request、response、session、application、pageContext(頁面上下文對象)、config(配置對象)、page(頁面對象)、exception(異常對象)
- out對象
out對象是JSP的內置對象,無需實例化就可以使用,可以實現數據的輸出顯示。其方法有:print(向頁面輸出顯示),println(向頁面輸出顯示,在結尾處添加換行)
- request對象
request對象主要用於處理客戶端的請求
常用的方法
- String getParameter(String name):根據表單組件名稱獲取提交數據
- String[] getParameterValues(String name):獲取表單組件對應多個值時的請求數據
- void setCharacterEncoding(String charset):指定每個請求的編碼
- RequestDispatchergetRequestDispatcher(String path):返回一個RequestDispatcher對象,該對象的forward()方法用於轉發請求
實例:
獲取用戶表單用戶提交的信息(用戶名、密碼、多選框的值),用到的方法:String getParameter(String name),String[] getParameterValues(String name)
//獲得用戶名 String username=request.getParameter("username"); //獲得密碼 String pwd=request.getParameter("password"); //獲得愛好 String[] hobbys=request.getParameterValues("hobby");
亂碼處理
無論使用get方法或post方法傳值,值為中文,頁面都會產生亂碼。get方法亂碼的處理方法之一是修改tomcat服務器的配置文件。路徑為:Tomcat目錄結構\conf\server.xml,追加URLEncoding="UTF-8"。見下方代碼塊:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
post方法亂碼的處理方式之一是在處理表單的java代碼最前面,增添以下代碼,指定為UTF-8。
request.setCharacterEncoding("UTF-8");
使用屬性保存數據
語法
request.setAttribute(String name, Object obj);
其中,name為屬性名稱,obj為屬性的值,實例:
request.setAttribute("name", username);
從屬性中讀取數據
語法
request.getAttribute(String name);
其中,name為屬性名稱,實例:
request.getAttribute("name");
使用屬性存取數據時,要確保數據在保存時必須是Object類型,而在取出時還要轉換為原先自己的類型。
- response對象
response對象用於響應客戶請求並向客戶端輸出信息
常用的方法
- void sendRedirect(String localtion):將請求重新定位到一個不同的URL,即頁面重定向
實例:
response.sendRedirect("login.jsp");
頁面轉發
利用轉發可以攜帶信息到其他頁面,在登錄案例中,利用頁面轉發可以實現在登錄成功頁面輸出相關信息。
語法
request.getRequestDispatcher(到達的頁面地址).forward(request, response);
實例
request.getRequestDispatcher("success.jsp").forward(request, response);
轉發與重定向的比較
轉發:Web服務器調用內部方法實現請求處理,在同一個Web應用中,共享request請求數據。
重定向:Web服務器返回一個響應后,瀏覽器再次發送一個新的請求,重定向后數據無法共享。
轉發:服務器端發揮作用,通過forward()方法在多個頁面間傳遞數據。
重定向:在客戶端發揮作用,通過新的請求完成頁面跳轉。
轉發:內部控制的轉移,地址欄不會發生變化。
重定向:新的請求導致地址欄會發生變化。