JSP實現系統登錄


計算機通過統一資源定位符實現資源訪問,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對象主要用於處理客戶端的請求

常用的方法

  1. String getParameter(String name):根據表單組件名稱獲取提交數據
  2. String[] getParameterValues(String name):獲取表單組件對應多個值時的請求數據
  3. void setCharacterEncoding(String charset):指定每個請求的編碼
  4. 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對象用於響應客戶請求並向客戶端輸出信息

常用的方法

  1. 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()方法在多個頁面間傳遞數據。

重定向:在客戶端發揮作用,通過新的請求完成頁面跳轉。

轉發:內部控制的轉移,地址欄不會發生變化。

重定向:新的請求導致地址欄會發生變化。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM