java servlet驗證

    在Java EE應(yīng)用編程中Servlet是基礎(chǔ)憎夷,JSP是建立在Servlet基礎(chǔ)之上的拾给,其他Web框架如Struts、WebWork和Spring MVC都是基于Servlet的级及。本文主要講述MyEclipse和Tomcat配置Servlet的過程和簡單實現(xiàn)表單提交功能额衙。
    希望對大家有所幫助,參考書籍《Java EE企業(yè)級應(yīng)用開發(fā)實例教程》窍侧。
    Java+MyEclipse+Tomcat (一)配置過程及jsp網(wǎng)站開發(fā)入門

一. Servlet編程

    1.Web基礎(chǔ)知識
    在講述Servlet之前伟件,先了解下Web基礎(chǔ)知識。Web(World Wide Web斧账,萬維網(wǎng))本質(zhì)就是Internet所有文檔的集合咧织,Web文檔主要類型有HTML網(wǎng)頁、CSS拯爽、JavaScript、各種動態(tài)網(wǎng)頁逼肯、圖片、聲音和視頻等大刊。
    Web文檔保存在Web站點(Site)上三椿,Web站點駐留在Web服務(wù)器上。Web服務(wù)器是一種軟件系統(tǒng)伴郁,提供Web文檔的管理和請求服務(wù)蛋叼,常見的Web服務(wù)器軟件有Apache、IIS狐胎、WebLogic和Tomcat等歌馍。每個服務(wù)器都有一個唯一的IP地址,Web服務(wù)器對外都有一個服務(wù)端口镜粤,默認時80或8080端口玻褪。
    Web文檔都有一個唯一的地址公荧,通過URL格式來進行定位,其格式為:
    協(xié)議://IP地址:端口/站點名/目錄/文件名
    其中協(xié)議主要有HTTP窟社、HTTPS和FTP绪钥。根據(jù)不同的協(xié)議,默認端口可以省略匣吊,HTTP/HTTPS為80端口,F(xiàn)TP為21端口社痛。例:
    http://210.30.108.30:8080/test/admin/login.jsp
    Web服務(wù)器接收到請求后命雀,根據(jù)URL定位到相應(yīng)文檔,根據(jù)文檔類型進行對應(yīng)的處理撵儿,將文檔通過網(wǎng)絡(luò)發(fā)送到客戶端狐血,一般是瀏覽器,用戶即可查看或下載請求的文檔房匆。Web通過請求/響應(yīng)(Request/Response)模式進行工作报亩,即由瀏覽器使用URL對Web文檔進行請求,Web服務(wù)器接收并處理請求岳链,處理結(jié)束后將響應(yīng)內(nèi)容發(fā)送到瀏覽器劲件。
    Web請求方式主要包括GET、POST苗分、PUT牵辣、DELETE和HEAD。其中GET請求直接返回請求的文檔择浊,同時傳遞參數(shù)在URL中逾条;POST請求將傳遞到Web服務(wù)器的數(shù)據(jù)保存到數(shù)據(jù)流中,只有通過表單提交形式才能實現(xiàn)担孔。如下:

Get請求:
http://localhost:8080/web01/main.do?id=1&password=123456
POST請求:

    這些知識大家應(yīng)該都非常熟悉了,我就不再介紹了泳桦,引出表單就開始敘述Servlet娩缰。

    2.什么是Servlet
    在Sun公司制定Java EE規(guī)范初期,為實現(xiàn)動態(tài)Web而引入了Servlet浮毯,用于替代笨重的CGI(通用網(wǎng)關(guān)接口)泰鸡,實現(xiàn)了Java語言編程的動態(tài)Web技術(shù),奠定了Java EE的基礎(chǔ)饰迹。后來為進一步簡化動態(tài)Web網(wǎng)頁的生成余舶,并且在微軟公司推出了ASP(Active X服務(wù)系統(tǒng)頁面)技術(shù)的競爭下,Sun推出了JSP規(guī)范赠制,進一步簡化了Web網(wǎng)頁的編程挟憔。但JSP在進行HTTP請求處理方面不如Servlet方便和規(guī)范,Servlet在當(dāng)今的MVC模式Web開發(fā)中牢牢占據(jù)一地政恍。并且現(xiàn)在流行的Web框架基本基于Servlet技術(shù)达传,如Struts、WebWork和Spring MVC等。只有掌握了Servlet才能真正掌握Java Web編程的核心和精髓逊朽。
    那么曲伊,究竟Servlet是什么東東呢追他?
    Servlet是運行在Web容器的類岛蚤,能處理Web客戶的HTTP請求,并產(chǎn)生HTTP響應(yīng)单雾。
    Servlet是Java EE規(guī)范定義的Web組件她紫,運行在Web容器中贿讹。由Web容器負責(zé)管理Servlet的聲明周期,包括創(chuàng)建和銷毀Servlet對象民褂∩蘅埃客戶不能直接創(chuàng)建Servlet對象和調(diào)用Servlet的方法,只能通過向Web服務(wù)器發(fā)出HTTP請求雹食,間接調(diào)用Servlet的方法吃挑。這是Servlet與普通Java類的重要區(qū)別街立。
    Sun在如下兩個包中提供了Servlet的全部接口和類:
          1.javax.servlet包含支持所有協(xié)議的通用Web組件接口和類
          2.javax.servlet.http包含支持HTTP協(xié)議的接口和類
    Servlet可以完成Web組件具有的所有功能赎离,如下:
          1.接收HTTP請求
          2.取得請求信息,包括請求頭和請求參數(shù)數(shù)據(jù)
          3.調(diào)用其他Java類方法完成具體的業(yè)務(wù)功能
          4.生成HTTP響應(yīng)虽画,包括HTML和非HTML響應(yīng)
          5.實現(xiàn)到其他Web組件的跳轉(zhuǎn)荣病,包括重定向和轉(zhuǎn)發(fā)
    編寫Servlet需要引入的兩個包和Java I/O包:

import java.io.;
import javax.servlet.
;
import javax.servlet.http.*; 編寫接收HTTP請求并進行HTTP響應(yīng)的Servlet要繼承javax.servlet.http.HttpServlet。Servlet類的定義如下:
public class LoginAction extends HttpServlet {}
每個Servlet一般都需要重寫doGet方法和doPost方法脖岛。當(dāng)用戶使用GET方式請求Servlet時,Web容器調(diào)用doGet方法處理請求陨溅;當(dāng)用戶使用POST方法請求Servlet時绍在,Web容器嗲用doPost方法。

    Servlet是生命周期時序圖如上圖所示悯嗓,包括加載類和實例化階段卸察、初始化階段坑质、處理請求階段和銷毀階段。

二. 配置Servlet

    Servlet作為Web組件可以處理HTTP請求/響應(yīng)涡扼,因而對外要求一個唯一的URL地址吃沪。但由于Servlet是一個Java類文件,不像JSP那樣直接存放在Web目錄下就能獲得URL請求訪問地址红淡。Servlet必須在Web的配置文件/WEB-INF/web.xml中進行配置和映射才能響應(yīng)HTTP請求降铸。
    1.Servlet聲明
    它的任務(wù)是通知Web容器Servlet的存在,聲明語法如下:

HomePageAction
servlet.HomePageAction

    其中聲明Servlet的名字桶蝎,一般與Servlet的類名相同即可谅畅,要求在一個web.xml文件內(nèi)名字唯一毡泻。指定Servlet的全名,即包名.類型牙捉。Web容器會根據(jù)此定義載入類文件到內(nèi)容中邪铲,進而調(diào)用默認構(gòu)造方法創(chuàng)建Servlet對象。
    Servlet初始參數(shù)如數(shù)據(jù)庫Driver昧碉、URL揽惹、賬號和密碼等信息,在Servlet中可以讀取這些信息狭握,如下定義了一個初始參數(shù)疯溺,即數(shù)據(jù)庫的JDBC驅(qū)動。

HomePageAction
servlet.HomePageAction

driveName
sun.jdbc.odbc.JdbcOdbcDriver


    在Servlet中可以通過ServletConfig取得定義的初始化參數(shù)恃疯,取得以上定義的參數(shù)的代碼如下:

private Connection cn=null; //定義數(shù)據(jù)庫連接對象
private String driverName=null; //數(shù)據(jù)庫驅(qū)動器
//取得Servlet定義的初始參數(shù)
driverName=config.getInitParameter("driverName");
//根據(jù)Servlet初始參數(shù)連接數(shù)據(jù)庫
Class.forName(driverName);
cn=DriverManager.getConnection("jdbc:odbc:cityoa"); 其中config是在Servlet中定義的ServletConfig類型的屬性變量今妄,由init方法取得它的實例鸳碧。可見連接不同數(shù)據(jù)庫雁仲,直接修改配置文件即可琐脏,不需要代碼的修改和重新編譯。
2.Servlet映射
任何Web文檔在Internet上都要有一個URL地址才能被請求訪問吹艇,Servlet不能像JSP一樣直接放在Web的發(fā)布目錄下昂拂,因此Servlet需要單獨映射URL地址。在WEB-INF/web.xml中進行Servlet的URL映射鼻听。

HomePageAction
/loginAction.do
      上面代碼是絕對地址方式映射,只能映射到一個地址撑教。其中Servlet-name名稱和Servlet聲明中要一致醉拓,URL的格式如下:/目錄/目錄/文件名.擴展名亿卤。而匹配目錄模式映射方式如下,可以請求多個URL秆乳。

MainAction
/main/*
      只要是以/main為開頭的任何URL都能請求此Servlet钻哩。如下:
        http://localhost:8080/web01/main/login.jsp
        http://localhost:8080/web01/main/info/add.do
    同樣能你還能使用匹配擴展名模式映射方式,也可以響應(yīng)多地址的請求双藕。

MainAction
*.action
      以上配置中擴展名為action的任何請求均能被Servlet響應(yīng)阳仔。如:
        http://localhost:8080/web01/login.action
        http://localhost:8080/web01/main/info/add.action
    注意:你不能混合使用兩種匹配模式近范,否則會映射出錯,如/main/*.action這種是錯誤的混合模式叶堆。

三. 簡單實現(xiàn)表單提交功能

    創(chuàng)建Web Project項目斥杜,項目名稱為TestServlet。項目結(jié)構(gòu)如下圖所示:


    在WebRoot文件夾下創(chuàng)建images文件夾忘渔,并添加圖片logo.jpg缰儿。添加inc文件夾,新建style.css文件宣赔,代碼如下:

.main {
width: 1024px;
text-align:left;
}
.font {
font-family: "Trebuchet MS";
font-size: 14px;
font-weight: bold;
color: #FFFFFF;
}
.div {
margin: 0px;
padding: 0px;
width: 1014px;
}
.tdBgColor{
background-color:#6b1101;
}
a{
font-family: "Trebuchet MS";
font-size: 14px;
font-weight: bold;
color: #FFFFFF;
line-height:50px;
text-decoration:none;

}
a.hover{
font-family: "Trebuchet MS";
font-size:14px;
font-weight: bold;
color:#0000FF;
line-height:50px;
text-decoration:underline;
padding-bottom:1px;

}
a.visited{
font-family: "Trebuchet MS";
font-size:14px;
font-weight: bold;
color:#000066;
line-height:50px;
text-decoration:none;
}
a.active{
font-family: "Trebuchet MS";
font-size:14px;
font-weight: bold;
color:#0000FF;
line-height:50px;
text-decoration:none;
padding-bottom:1px;
} 然后修改index.jsp主頁儒将,代碼如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

                歡迎使用火車票訂票系統(tǒng)管理系統(tǒng) 椅棺,如有不足齐蔽,敬請指導(dǎo)! 

系統(tǒng)管理員登錄

                用戶名:


                密 碼:

關(guān)于我們 | 網(wǎng)站聲明

版權(quán)所有?2014-2015 北京理工大學(xué) Eastmount
京ICP備10009636號

    此時運行Web網(wǎng)站诱渤,點擊Run As=》MyEclipse Server Application谈况。如圖所示:


    此時碑韵,輸入用戶名和密碼登錄效果如下圖所示:

    然后在src中新建文件夾Servlet,新建HomePageAction.java文件占卧,代碼如下:

package servlet;

import java.io.IOException;
import java.sql.*; //導(dǎo)入數(shù)據(jù)庫處理所有庫
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JOptionPane;

//用戶登錄處理Servlet 系統(tǒng)登錄主頁處理表單
public class HomePageAction extends HttpServlet {

private Connection cn=null;     //定義數(shù)據(jù)庫連接對象
private String driverName=null; //數(shù)據(jù)庫驅(qū)動器
private String url=null;        //數(shù)據(jù)庫地址URL

//初始化方法联喘,取得數(shù)據(jù)庫連接對象
public void init(ServletConfig config) throws ServletException
{
    super.init(config);
    driverName=config.getInitParameter("driverName");
    url=config.getInitParameter("url");
    
    try {
        Class.forName(driverName);
        cn=DriverManager.getConnection(url);
    } catch(Exception e) {
        System.out.println("取得數(shù)據(jù)庫連接錯誤:"+e.getMessage());
    }
}

//處理GET請求方法
public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
{
    //取得用戶注冊表單提交的數(shù)據(jù)
    String userid=request.getParameter("userid");
    String password=request.getParameter("password");
    //判斷登錄賬號為空豁遭,則自動跳轉(zhuǎn)到注冊頁面
    if(userid==null||userid.trim().length()==0) {
        response.sendRedirect("index.jsp");
        JOptionPane.showMessageDialog(null, "User name or password can't be empty!");
    }
    //判斷登錄密碼為空
    if(password==null||password.trim().length()==0) {
        response.sendRedirect("index.jsp");
        JOptionPane.showMessageDialog(null, "User name or password can't be empty!");
    }
    //查詢數(shù)據(jù)庫和跳轉(zhuǎn)到登錄主界面
    try {
        //查詢數(shù)據(jù)庫操作
        
        //跳轉(zhuǎn)到主界面
        response.sendRedirect("success.jsp");
    } catch(Exception e) {
        System.out.println("錯誤:"+e.getMessage());
        response.sendRedirect("index.jsp");
    }
}

//處理POST請求方法
public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
{
    doGet(request,response);
}

//銷毀方法
public void destroy() {
    super.destroy();
    try {
        cn.close();
    }catch(Exception e) {
        System.out.println("關(guān)閉數(shù)據(jù)庫錯誤:"+e.getMessage());
    }
}       

} 同時在WEB-INF文件夾web.xml文件中配置Servlet蓖谢,代碼如下:

index.jsp

HomePageAction
servlet.HomePageAction

driveName
sun.jdbc.odbc.Jdbc0dbcDriver


url
jdbc:odbc:cityoa



HomePageAction
/loginAction.do


    最后新建success.java文件闪幽,跳轉(zhuǎn)后顯示的頁面。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

    界面表單提交跳轉(zhuǎn)成功 

    返回

   顯示效果如下圖所示:


    此時Servlet配置成功委可,而且表單跳轉(zhuǎn)功能也實現(xiàn)了。你可能遇到如下錯誤:

    解決方案如下:

    最后希望文章對你有所幫助拾酝,下一篇文章準備講述JSP網(wǎng)站的一種經(jīng)典網(wǎng)站模型和MyEclipse數(shù)據(jù)庫配置相關(guān)知識卡者。如果文章有不足或錯誤的地方,還請海涵材诽!
    (By:Eastmount 2015-5-7 清晨4點   http://blog.csdn.net/eastmount/)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鹰霍,一起剝皮案震驚了整個濱河市独柑,隨后出現(xiàn)的幾起案子睁枕,更是在濱河造成了極大的恐慌沸手,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跳仿,死亡現(xiàn)場離奇詭異塔嬉,居然都是意外死亡租悄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門胶哲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸯屿,“玉大人把敢,你說我怎么就攤上這事∩裟眨” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵蚣录,是天一觀的道長萎河。 經(jīng)常有香客問我蕉饼,道長,這世上最難降的妖魔是什么昧港? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任慨飘,我火速辦了婚禮译荞,結(jié)果婚禮上吞歼,老公的妹妹穿的比我還像新娘。我一直安慰自己稽坤,他們只是感情好糯俗,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布得湘。 她就那樣靜靜地躺著,像睡著了一般淘正。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸿吆,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天囤采,我揣著相機與錄音,去河邊找鬼惩淳。 笑死蕉毯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恕刘,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼缤谎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了褐着?” 一聲冷哼從身側(cè)響起坷澡,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤含蓉,失蹤者是張志新(化名)和其女友劉穎频敛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馅扣,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡斟赚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了差油。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拗军。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蓄喇,靈堂內(nèi)的尸體忽然破棺而出发侵,到底是詐尸還是另有隱情,我是刑警寧澤妆偏,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布刃鳄,位于F島的核電站,受9級特大地震影響钱骂,放射性物質(zhì)發(fā)生泄漏叔锐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一见秽、第九天 我趴在偏房一處隱蔽的房頂上張望愉烙。 院中可真熱鬧,春花似錦解取、人聲如沸齿梁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勺择。三九已至,卻和暖如春伦忠,著一層夾襖步出監(jiān)牢的瞬間省核,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工昆码, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留气忠,地道東北人邻储。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像旧噪,于是被迫代替她去往敵國和親吨娜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 本文包括:1淘钟、Listener簡介2宦赠、Servlet監(jiān)聽器3、監(jiān)聽三個域?qū)ο髣?chuàng)建和銷毀的事件監(jiān)聽器4米母、監(jiān)聽三個域?qū)?..
    廖少少閱讀 6,087評論 6 28
  • 一套完整的登陸注冊業(yè)務(wù)邏輯 準備部分基礎(chǔ)工具類Basepackage com.jericho.tools;impo...
    JerichoPH閱讀 2,456評論 0 9
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法勾扭,類相關(guān)的語法,內(nèi)部類的語法铁瞒,繼承相關(guān)的語法妙色,異常的語法,線程的語...
    子非魚_t_閱讀 31,664評論 18 399
  • 這部分主要是與Java Web和Web Service相關(guān)的面試題慧耍。 96身辨、闡述Servlet和CGI的區(qū)別? 答...
    雜貨鋪老板閱讀 1,412評論 0 10
  • 高中時候,后桌的女生在草稿紙上寫了滿滿一頁的忍芍碧,黑色鉛字筆充斥了整張白紙看的觸目驚心煌珊。當(dāng)時想,她是在忍受什么嗎师枣? ...
    紫蘇卡卡閱讀 318評論 3 7