Servlet是用Java語言編寫的服務器端程序,是由服務器端調用執行、按照Servlet自身規範編寫的Java類。
Servlet可以處理客戶端傳來的HTTP請求,並返回響應。
一、Servlet編程接口
設計Servlet要在Servlet框架約束下進行,並遵守其中所要求的規則。
Servlet框架是由javax.servlet和javax.servlet.http兩個Java包組成。
功能 |
類和接口 |
Servlet實現 |
javax.servlet.http.HttpServlet |
Servlet異常 |
javax.servlet.ServletException |
請求和響應 |
javax.servlet.ServletRequest,javax.servlet.ServletResponse javax.servlet.ServletInputStream,javax.servlet.ServletOutputStream javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse |
會話跟蹤 |
javax.servlet.http.HttpSession |
Servlet上下文 |
javax.servlet.ServletContext |
Servlet協作 |
javax.servlet.RequestDispatcher |
二、設計Servlet
設計Servlet需要繼承javax.servlet.http.HttpServlet類,其結構:
package …;//省略了包名
import …; //省略了導入包
public class Servlet類名稱 extends HttpServlet{
public void init(){}
public void doGet (HttpServletRequest request,HttpServletResponse response){}
public void doPost(HttpServletRequest request,HttpServletResponse response){}
public void destroy(){}
}
PS:Servlet的父類HttpServlet中包含重要方法:
doGet():當請求的類型是“get”時,調用該方法。
doPost():當請求的類型是“post”時,調用該方法。
在設計時只需要重寫doGet()和doPost()方法即可,同時配置Servlet。
三、配置Servlet
Servlet只有配置後纔可以使用。
配置有兩種方式:
在webxml配置:直接在源代碼中採用註釋配置,我們採用註釋配置Servlet。
註釋配置:註釋配置Servlet,是在Servlet類定義的上方直接使用註釋標記“@WebServlet”實現配置。
註釋配置格式:
@WebServlet("/請求名稱")
public class 類名稱 extends HttpServlet {
//實現代碼
}
四、使用樣例
/**
實現一個簡單的用戶登錄驗證程序,
如果用戶名是abc,密碼是123,則顯示歡迎用戶的信息,否則顯示“用戶名或密碼不正確”。
採用JSP頁面只完成提交信息和驗證結果的顯示,而驗證過程由Servlet完成。
兩者之間通過request(或HttpServletRequest)對象實現數據共享。
由提交頁面將數據傳遞給Servlet,
而Servlet獲取數據並實現驗證,根據驗證結果,轉向顯示驗證結果的頁面。
假設,組件之間共享數據的參數爲:username(用戶名稱)和userpwd(密碼)。
**/
系統需要設計3個組件。
//(1)登錄表單頁面:login.jsp
<%@ page pageEncoding="UTF-8"%>
<html>
<head><title>登錄頁面</title></head>
<body>
<form action="loginCheck" method="post">
請輸入用戶名:<input type="text" name="username"/><br/>
請輸入密碼:<input type="password" name="userpwd"/><br/>
<input type="submit" value="登錄"/>
<input type="reset"/>
</form>
</body>
</html>
//(2)處理登錄請求並驗證Servlet:LoginCheckServlet.java
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/loginCheck")
public class LoginCheckServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginCheckServlet() {
super();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName=request.getParameter("username");
String userPwd=request.getParameter("userpwd");
String info="";
if(("abc".equals(userName))&&"123".equals(userPwd)){
info="歡迎你"+userName+"!";
}else{
info="用戶名或密碼不正確!";
}
request.setAttribute("outputMessage", info);
request.getRequestDispatcher("/Info.jsp").forward(request,response);
}
}
//(3)顯示提示的頁面:info.jsp
<%@ page pageEncoding="UTF-8"%>
<html>
<head><title>顯示結果頁面</title></head>
<body> <%=request.getAttribute("outputMessage") %> </body>
</html>