JSP培訓(2)——運行原理、文檔結構、簡單輸入輸出

來源:互聯網
上載者:User
 

目標:l         掌握Web應用的文檔結構;l         掌握JSP的運行原理;l         掌握JSP的簡單輸入和輸出。主要內容:l         通過一個簡單一實例介紹Web應用的文檔結構和運行原理;l         通過一個簡單的註冊功能介紹基本的輸入輸出。下次課內容:用戶端驗證。1、 文檔結構每個應用都有一個根目錄,例如ch2;理論上可以放在任何地方,但是需要配置,簡單的做法,直接放在了webapps這個目錄下,在這個目錄的應用會被自動載入。在根目錄下會有一個WEB-INF目錄,這個目錄中的檔案不能被遠端存取,主要存放設定檔和類檔案、資源檔。在WEB-INF中的設定檔是web.xml,每個web應用都會有這樣一個設定檔。在WEB-INF有兩個檔案用於存放類檔案和資源檔,lib和classes,lib下面存放以壓縮包jar形式存在的類庫,classes直接存放類檔案(包含包的資訊)。分頁檔(包括jsp檔案、html檔案、圖片檔案)可以放在根目錄(ch2)下面,或者下面的子檔案夾(不能放在WEB-INF)中。2、 運行方式訪問方式:http://192.168.0.222:8080/ch2/ch2.jsp前提:把Web應用部署到伺服器上,啟動伺服器。下面以ch2.jsp為例介紹訪問過程:1)用戶端通過瀏覽器發送請求;2)Web伺服器接收這個請求,然後轉給應用伺服器;3)應用伺服器會尋找客戶要訪問的檔案,假設訪問的檔案為ch2.jsp;分兩種情況:第一次訪問:應用伺服器把JSP檔案轉換成Java檔案;然後編譯成class檔案;然後載入類;執行個體化對象並初始化;後續訪問:JSP檔案對應的頁面對象已經存在,直接尋找到這個對象;4)應用伺服器封裝請求資訊,然後調用相應的方法;5)應用伺服器把方法執行結果(響應客戶的內容)傳遞給Web伺服器;6)Web伺服器把這個結果發給用戶端;7)用戶端瀏覽器把接收到的html代碼解析成網頁。這個就是我們看到的結果。下面是運行過程中的幾個檔案內容。源檔案Ch2.jsp的內容:DDDDDDDDDDDDDDDDDDDDDDDD<%="FFFFFFFFFFFFFFFF"%> 轉換後的檔案ch2_jsp.java:package org.apache.jsp; import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*; public final class ch2_jsp extends org.apache.jasper.runtime.HttpJspBase    implements org.apache.jasper.runtime.JspSourceDependent {  private static java.util.List _jspx_dependants;  private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.AnnotationProcessor _jsp_annotationprocessor;  public Object getDependants() {    return _jspx_dependants; }  public void _jspInit() {    _el_expressionfactory = JspFactory.getDefaultFactory().getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();    _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName()); }  public void _jspDestroy() { }  public void _jspService(HttpServletRequest request, HttpServletResponse response)        throws java.io.IOException, ServletException {     JspFactory _jspxFactory = null;    PageContext pageContext = null;    HttpSession session = null;    ServletContext application = null;    ServletConfig config = null;    JspWriter out = null;    Object page = this;    JspWriter _jspx_out = null;    PageContext _jspx_page_context = null;      try {      _jspxFactory = JspFactory.getDefaultFactory();      response.setContentType("text/html");      pageContext = _jspxFactory.getPageContext(this, request, response,                       null, true, 8192, true);      _jspx_page_context = pageContext;      application = pageContext.getServletContext();      config = pageContext.getServletConfig();      session = pageContext.getSession();      out = pageContext.getOut();      _jspx_out = out;       out.write("DDDDDDDDDDDDDDDDDDDDDDDD/r/n");      out.print("FFFFFFFFFFFFFFFF");    } catch (Throwable t) {      if (!(t instanceof SkipPageException)){        out = _jspx_out;        if (out != null && out.getBufferSize() != 0)          try { out.clearBuffer(); } catch (java.io.IOException e) {}        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);      }    } finally {      if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);    } }} 返回給用戶端的資訊(通過瀏覽器的查看源檔案功能可以看到):DDDDDDDDDDDDDDDDDDDDDDDDFFFFFFFFFFFFFFFF 3、 無狀態的請求接聽模式使用者通過用戶端發送請求,可以通過地址欄、超連結、按鈕或者表單元素的事件請求。不管採用什麼方式發送請求,這些請求資訊都會被封裝成HttpServletRequest對象,伺服器會把這個對象作為參數去調用頁面對象,這個方法執行完會對用戶端響應,之後這個HttpServletRequest對象就被刪除了。如果再次發送請求,會建立新的HttpServletRequest對象,上一次訪問時候的資訊都不存在了。所以伺服器不會儲存用戶端以前訪問的資訊,稱為無狀態的請求接聽模式。接下來介紹JSP技術的基本問題:輸入輸出。首先看如何完成輸入。4、 輸入元素輸入通過表單元素完成。常用的表單元素如下:1)form要提交資訊,首先需要一個表單form,只有在form內的資訊才可以提交。開始標識<form>結束標識</form>主要的屬性:action屬性:是目標檔案的位置,要提交給誰處理;method屬性:請求方式,有get和post注意:form不能嵌套。2)單行文字框基本文法格式:<input type=”text” name=”username” value=”請輸入使用者名稱”>type=”text” 就說明這是單行文字框;name表示文字框的名字,非常重要,在伺服器需要根據名字取值;value給出初始值。3)密碼框基本文法格式:<input type=”password” name=”userpass” >用法與單行文字框基本相同。4)隱藏欄位基本文法格式:<input type=”hidden” name=”userpass” >用於在多個頁面之間傳值,與當行文字框的用法也基本相同。5)選項按鈕文法格式:<input type=”radio” name=”sex” value=”男”>男<input type=”radio” name=”sex” value=”女”>女一組選項按鈕的名字應該保持一致,這樣能夠保證多個選項只選擇一個。注意:單選按紐之後顯示的內容與單選按紐沒有關係,只是告訴使用者這個單選按紐表示什麼。6)複選框文法格式:<input type=”checkbox” name=”fav” value=”音樂”><input type=”checkbox” name=”fav” value=”體育”>同一組複選框的值也應該保持一致,可以採用統一的方式取值。7)下拉式清單文法格式:開始標識:<select name=”select”>結束標識:</select>下拉框中的每個選項:<option value=”1”>顯示的資訊</option>性別下拉框:<select name=”sex”>   <option value=”男”>男</option>   <option value=”女”>女</option></select>8)多行文本域文法格式:<textarea name=””>sdsfsddddddddd</textarea>要對文本域初始化,需要把初始值放在標籤的開始和結束標識之間。注意:這一點與其它元素通過value屬性賦值是不一樣的。9)提交按鈕<input type=”submit” value=”提交”>通常不需要名字。10)重設按鈕<input type=”reset” value=”重設”>通常不需要名字。11)普通按鈕也可以通過普通按鈕完成表單提交,需要編寫JavaScript代碼。文法格式:<input type=”button” value=”提交” onClick=”…”>5、 輸入執行個體:註冊頁面參考代碼register.jsp:<%@ page contentType="text/html;charset=gb2312"%>請註冊<br><form method="post" name="fi1" action="process.jsp">   使用者ID:<input type="text" name="userid"><br>   口令:<input type="password" name="userpass"><br>   確認口令:<input type="password" name="userpass1"><br>   性別:<input type="radio" name="sex" value="男" checked>男         <input type="radio" name="sex" value="女">女<br>   愛好:<input type="checkbox" name="fav" value="運動">運動         <input type="checkbox" name="fav" value="音樂">音樂         <input type="checkbox" name="fav" value="編程">編程<br>   學曆:       <select name="degree">           <option value="本科">本科</option>           <option value="碩士">碩士</option>           <option value="專科">專科</option>           <option value="博士">博士</option>       </select><br>   備忘:       <textarea name="comment"></textarea><br>       <input type="submit" value="提交"><input type="reset" value="重設"></form>該頁面能夠完成使用者資訊的提交,當使用者輸入和選擇完之後點擊提交按鈕,瀏覽器會把這個請求發送到伺服器,根據form中的action屬性的值,我們知道伺服器會調用process.jsp進行處理。下面介紹如何編寫process.jsp來擷取使用者輸入資訊。6、 擷取資訊前面介紹運行原理的時候說過,客戶的請求資訊,包括輸入的和選擇的資訊,都會被封裝在HttpServletRequest對象中,所以在process.jsp中只需要訪問這個對象即可,如何得到這個對象呢?在JSP中提供了若干內部對象,其中之一是request,直接使用這個對象即可。對於內部對象,我們可以直接使用,不需要聲明和執行個體化。擷取請求資訊可以通過下面的兩個方法:getParameter(元素名字)getParameterValues(元素名字)前者用於擷取單值元素的值,例如文字框、選項按鈕、密碼框等。後者用於擷取多值元素的值,例如複選框、允許多選的列表框。7、 執行個體:註冊資訊顯示process.jsp的源檔案:<%@ page contentType="text/html;charset=gb2312"%>註冊資訊如下:<%   String userid = request.getParameter("userid");    String userpass = request.getParameter("userpass");    String userpass1 = request.getParameter("userpass1");    String sex = request.getParameter("sex");    // 對性別進行編碼轉換   sex = new String(sex.getBytes("8859_1"));      String[] fav = request.getParameterValues("fav");   // 該方法用於擷取多值元素的值      String degree = request.getParameter("degree");    String comment = request.getParameter("comment");     out.println("使用者ID:"+userid);%><br>口令:<%=userpass%><br>確認口令:<%=userpass1%><br>性別:<%=sex%><br>愛好:<%   if(fav!=null)   for(String s:fav)   {      s=new String(s.getBytes("8859_1"));      out.print(s);   }%><br>學曆:<%=degree%><br>備忘:<%=comment%> 註:此種方式的代碼(Java代碼與HTML代碼嵌套)不提倡,這裡僅僅是為了讓這個程式比較完整。但是擷取值和編碼轉換的代碼需要掌握,以後在Servlet中會用,沒有什麼變化。8、 實訓:完成圖書添加介面,並把使用者添加的資訊重新顯示出來。參考教材:《Java Web程式設計基礎教程》

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.