亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP程序運行原理、文檔結構及簡單輸入輸出實例分析

2020-07-27 21:31:20
字體:
來源:轉載
供稿:網友

本文實例講述了JSP程序運行原理、文檔結構及簡單輸入輸出。分享給大家供大家參考。具體如下:

目標:

掌握Web應用的文檔結構;
掌握JSP的運行原理;
掌握JSP的簡單輸入和輸出。

主要內容:

通過一個簡單實例介紹Web應用的文檔結構和運行原理;
通過一個簡單的注冊功能介紹基本的輸入輸出。

實現內容:客戶端驗證。

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);  } }}

返回給客戶端的信息(通過瀏覽器的查看源文件功能可以看到):

DDDDDDDDDDDDDDDDDDDDDDDD
FFFFFFFFFFFFFFFF

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、 實訓:完成圖書添加界面,并把用戶添加的信息重新顯示出來。

希望本文所述對大家的JSP程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧中文字幕| 亚洲国产91精品在线观看| 中文字幕日韩在线播放| 中文在线资源观看视频网站免费不卡| 神马久久桃色视频| 精品福利在线观看| 最近2019免费中文字幕视频三| 亚洲一区二区三区在线视频| 国产视频亚洲精品| 欧美在线欧美在线| 91精品视频在线免费观看| 日韩精品久久久久久久玫瑰园| 精品久久久久久亚洲国产300| 国产美女91呻吟求| 精品国产自在精品国产浪潮| 欧美色图在线视频| 4438全国亚洲精品在线观看视频| 日韩av免费在线观看| 亚洲日韩欧美视频一区| 亚洲电影免费观看高清| 中文字幕欧美精品在线| 久久视频在线播放| 欧美综合在线第二页| 韩剧1988在线观看免费完整版| 91精品国产91久久久久久| 日韩精品欧美国产精品忘忧草| 亚洲精品免费一区二区三区| 欧美自拍视频在线| 国产美女91呻吟求| 日本精品va在线观看| 久久91超碰青草是什么| 亚洲欧美国产日韩中文字幕| 成人免费福利在线| 九九久久国产精品| 久久久久国色av免费观看性色| 欧美中文字幕精品| 中国china体内裑精亚洲片| 亚洲精品999| 亚洲欧美日韩爽爽影院| 中国日韩欧美久久久久久久久| 亚洲一区二区在线| 亚洲欧美国产制服动漫| 国产精品国产三级国产aⅴ浪潮| 国产精品视频999| 日韩欧美在线一区| 第一福利永久视频精品| 91美女片黄在线观看游戏| 久久久99久久精品女同性| 国产欧美亚洲视频| 亚洲色图激情小说| 中文精品99久久国产香蕉| 91精品久久久久久久久久久久久| 亚洲曰本av电影| 色哟哟入口国产精品| 尤物99国产成人精品视频| 亚洲女人初尝黑人巨大| 欧美激情视频网| 国产91精品久久久久| 国模吧一区二区三区| 亚洲午夜未删减在线观看| 欧美精品一本久久男人的天堂| 亚洲福利视频网站| 精品国偷自产在线视频| 亚洲片在线资源| 亚洲香蕉伊综合在人在线视看| 欧美黑人又粗大| 亚洲日韩第一页| 深夜福利日韩在线看| 久久久国产精彩视频美女艺术照福利| 91精品久久久久久综合乱菊| 日韩视频免费观看| 一本色道久久综合亚洲精品小说| 一个人www欧美| 精品少妇一区二区30p| 成人精品视频久久久久| 日韩欧美一区视频| 中文字幕亚洲欧美| 日韩电影在线观看中文字幕| 中文字幕精品久久| 色综合天天狠天天透天天伊人| 欧美日韩国产在线看| 亚洲福利视频网站| 成人免费高清完整版在线观看| 国产精品久久中文| 欧美亚洲在线观看| 国产一区二区三区高清在线观看| 国产美女直播视频一区| 日韩福利视频在线观看| 性欧美暴力猛交69hd| 日韩欧美在线网址| 亚洲精品国产免费| 日本在线精品视频| 亚洲男人天堂2019| 成年人精品视频| 亚洲国产精彩中文乱码av在线播放| 成人国产亚洲精品a区天堂华泰| 亚洲欧美国产日韩天堂区| 国产成人亚洲综合91| 日本欧美一二三区| 久久天天躁狠狠躁夜夜躁2014| 欧美亚州一区二区三区| 欧洲日本亚洲国产区| 国产在线不卡精品| 亚洲精品二三区| 91在线观看免费高清完整版在线观看| 国语自产精品视频在线看一大j8| 欧美高清电影在线看| 亚洲成人三级在线| 亚洲精品国产精品乱码不99按摩| 狠狠久久五月精品中文字幕| 亚洲精品国产精品自产a区红杏吧| 亚洲人成77777在线观看网| 国语自产精品视频在线看抢先版图片| 国精产品一区一区三区有限在线| 欧美激情国产精品| 日韩av电影手机在线| 久久精品电影一区二区| 国产精品一久久香蕉国产线看观看| 久久频这里精品99香蕉| 国产精品视频永久免费播放| 亚洲一区美女视频在线观看免费| 欧美日韩国产丝袜美女| 国产精品亚洲激情| 成人在线中文字幕| 第一福利永久视频精品| 久久夜精品va视频免费观看| 欧美最猛黑人xxxx黑人猛叫黄| 最近2019好看的中文字幕免费| 久久久精品久久| 久久中文字幕在线视频| 91精品国产高清自在线| 色婷婷**av毛片一区| 亚洲香蕉伊综合在人在线视看| 国产一区二区三区高清在线观看| 5252色成人免费视频| 国产精品视频一区国模私拍| 国产精品久久网| 精品五月天久久| 欧美国产中文字幕| 日韩精品免费在线观看| 国产精品视频中文字幕91| 久久影视电视剧免费网站清宫辞电视| 亚洲欧美一区二区激情| 欧美午夜精品久久久久久浪潮| 欧美日韩成人精品| 午夜精品一区二区三区视频免费看| 亚洲福利在线观看| 国产丝袜一区二区三区免费视频| 国产97色在线| 国产91精品不卡视频| 久久精品人人做人人爽| 日韩中文字幕久久| 国产精品海角社区在线观看| 欧美中文在线免费| 国产精品美女久久久免费| 精品久久久久久久久久久久久久| 亚洲国产91精品在线观看| 中文字幕亚洲精品| 日韩美女免费观看| 精品久久久久久久久久国产| 国产精品欧美亚洲777777| 国产精品video| 91精品国产91久久久久久| 久久精品视频99|