編輯:關於Android編程
Servlet概述
首先得知道,Servlet=Server+Applet,Servlet主要用於處理各種業務邏輯,它比JSP更具有業務邏輯層的意義。
最初的JSP開發模式為:JSP+JavaBean,慢慢演變為:JSP+JavaBean+Servlet。
Servlet是使用Java Servlet應用程序設計接口(API)及相關類和方法的Java程序,除了Java Servlet API,它還可以用於擴展和添加API的Java類軟件包。
Servlet功能
Servlet通過創建一個框架擴展服務器的能力,以在web上提供請求和響應服務,當客戶端發送請求至服務器時,服務器可以將請求信息發送給Servlet,並讓其建立服務器返回給客戶端的響應。當啟動web服務器和客戶端第一次請求服務時,可以自動裝入Servlet,之後Servlet繼續運行直至其他客戶端發生請求。
Servlet的主要功能:
創建並返回一個基於客戶請求性質的動態內容的完整HTML頁面。 創建可嵌入到現在HTML頁面中的部分HTML頁面(HTML片段)。 與其他服務器資源(包括數據庫和基於Java的應用程序)通信。 用多個客戶端處理連接,接收多個客戶端的輸入,並將結果傳遞到多個客戶端,例如:Servlet可以是多參與者的游戲服務器。 當允許在單連接方式下傳送數據的情況下,在浏覽器上打開服務器至Applet的新連接,並將該連接保持打開狀態;當允許客戶端和服務器簡單且高效的執行會話的情況下,Applet也可以啟動客戶浏覽器和服務器之間的連接,可以通過定制協議來通信。 將定制的處理提供給所有服務器的標准程序,如Servlet可以修改如何認證用戶。 -Servlet特點<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjxiciAvPg0KU2VydmxldLy8yvXX7rTztcTTxcrGvs3Kx7/J0tS0psDtv827p7bLtKvAtLXESFRUUMfrx/OjrLKit7W72NK7uPbP7NOmoaM8L3A+DQq439Cno7rU2rf+zvHG98nPvfbT0NK7uPZKYXZh0OnE4rv61NrUy9DQo6zG5NPFysbU2tPatbG24Lj2wLTX1L/Nu6e2y7XEx+vH87fDzsrKsaOsU2VydmxldM6qw7+49sfrx/O31sXk0ru49s/fs8yjrLb4srvKx734s8yhoyC3vbHjo7pTZXJ2bGV0zOG5qcHLtPPBv7XEyrnTw7mkvt/A/bPMo6zI56O6tKbA7brcxNHN6rPJtcRIVE1Mse21pcr9vt2horbByKG6zcno1sNIVFRQzbejrNLUvLC0psDtQ29va2llus24+tfZu+G7sKGjIL/nxr3MqKO6U2VydmxldNPDSmF2YbHg0LShoyC5psTcx7+086O6U2VydmxldL/J0tTWsb3T0+t3ZWK3/s7xxve9u7ulo6y7ucTc1Nm497j2s8zQ8rzkubLP7cr9vt2jrMq5tcPK/b7dv+LBrL3Ts9jWrsDgtcS5psTcutzI3dLXyrXP1qGjIMHpu+7Q1LrNv8nAqdW50NQgubLP7cr9vt0gsLLIqw0KPGhyIC8+DQo8cD48c3Ryb25nPlNlcnZsZXS1xMn6w/zW3MbaPC9zdHJvbmc+PGJyIC8+DQpTZXJ2bGV0sr/K8NTayN3G98Dvo6zJ+sP81tzG2tPJyN3G97ncwO2hozxiciAvPg0KMaOptbHTw7unx+vH81NlcnZsZXS3/s7xyrG78sb0tq93ZWK3/s7xxvfKsaOsyN3G97u3vrO809TY0ru49kphdmEgU2VydmxldMDgoaM8YnIgLz4NCjKjqcjdxve7t76zvau4+b7d08O7p8frx/O0tL2o0ru49rvy1d+24Lj2U2VydmxldLbUz/PKtcD9o6yyor2r1eLQqcq1wP2808jrtb1TZXJ2bGV0yrXA/bPY1tChozxiciAvPg0KM6OpyN3G97u3vrO199PDU2VydmxldLXEs/XKvLuvt723qEh0dHBTZXJ2bGV0LmluaXQoU2VydmxldENvbmZpZyBjb25maWcpzeqzybP1yry7r6Os1eLKx9Do0qq0q7Xdss7K/aOsxuTW0LD8uqyz9cq8u6+yzsr9us3I3cb3u7e+s7XE0MXPoqOssqK4utTwz/JTZXJ2bGV0tKu13cr9vt2ho8jnufu0q7Xdyqew3KOs1PK74cXXs/ZTZXJ2bGV0RXhjZXB0aW9u0uyzo6OsU2VydmxldL2rsrvE3NX9s6O5pNf3oaM8YnIgLz4NCjSjqcjdxve7t76zwPvTw9K7uPZIdHRwU2VydmxldFJlcXVlc3S6zUh0dHBTZXJ2bGV0UmVzcG9uc2W21M/zt+LXsLTTV2ViyN3G973TytW1vbXESFRUUMfrx/O6zdPQU2VydmxldMn6s8m1xM/s06ahozxiciAvPg0KNaOpu7e+s8jdwb+w0Uh0dHBTZXJ2bGV0UmVxdWVzdLrNSHR0cFNlcnZsZXRSZXNwb25zZbbUz/O0q7XduPhIdHRwU2VydmxldC5zZXJ2aWNlKCm3vbeoo6xzZXJ2aWNlKCm/ybG7tuC0zrX308OjrLj3tffTw7n9s8zU2rK7zay1xM/fs8yjrLulsru4ycjFoaM8YnIgLz4NCjajqbao1sa1xEphdmEgU2VydmxldLTTSHR0cFNlcnZsZXRSZXF1ZXN0ttTP87bByKFIVFRQx+vH88r9vt2jrLfDzsrAtNfUSFRUUFNlc3Npb2678kNvb2tpZbbUz/O1xNe0zKzQxc+io6zWtNDQzNi2qNOm08O1xLSmwO2yosfS08NIdHRwU2VydmxldFJlc3BvbnNlttTP88n6s8lIVFRQz+zTpsr9vt2hozxiciAvPg0KN6OptbF3ZWK3/s7xxve6zcjdxve52LHVyrG74dfUtq+199PDSHR0cFNlcnZsZXQuZGVzdHJveSgpt723qLnYsdXL+dPQtPK/qrXE18rUtKGjPC9wPg0KPGhyIC8+DQo8cD48c3Ryb25nPlNlcnZsZXS6y9DEQVBJPC9zdHJvbmc+PC9wPg0KU2VydmxldL3Tv9oNCjxwcmUgY2xhc3M9"brush:java;">
Servlet的配置 在web.xml文件中配置: 采用注解配置: Servlet處理表單數據 下面就用一個小例子來說明,主要功能為:helloServlet類處理login.jsp表單中的信息 helloServlet類: login.jsp頁面 運行結果如下: 一:在login.jsp中輸入登陸信息 至此,一個Servlet的應用就完成了。//Servlet在處理客戶端的請求時調用此方法
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException
//當Servlet容器移除Servlet對象時調用此方法,以釋放資源
public void destroy()
//用於獲取Servlet對象的配置信息,返回ServletConfig對象
public ServletConfig getServletConfig()
//返回有關Servlet的信息,是純文本格式的字符串
public String getServletInfo()
HttpServlet類
HttpServletRequest接口
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException //處理請求類型為GET的Http請求的處理方法
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException //處理請求類型為Post的Http請求的處理方法
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException //處理請求類型為Put的Http請求的處理方法
HttpServletResponse接口
//常用方法
public Cookie[] getCookies() //返回所有Cookie對象
public String getMethod() //返回HTTP請求類型
public String getContextPath() //返回上下文路徑
public String getQueryString() //返回請求的查詢字符串
public String getRequestURI() //返回主機名到請求參數之間的部分字符串
public HttpSession getSession() //返回與主機關聯的HttpSession對象
//常用方法
public void addCookie(Cookie cookie) //向客戶端發送Cookie信息
public void sendError(int i) throws IOException //發送一個錯誤狀態碼為i的錯誤響應到客戶端
public void sendError(int i, String s) throws IOException //發送一個錯誤狀態碼為i的錯誤響應到客戶端
public void sendRedirect(String s) throws IOException //將客戶端請求重定向到新的URL
Servlet的配置有兩種方法,一種是在web.xml文件中配置,另一種是采用注解配置
@WebServlet("/hello123")
public class helloServlet extends HttpServlet {
........
}
package com.java.model;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Created with IntelliJ IDEA.
* Created by YEN on 2016/7/10 and 13:13.
*/
//采用注解配置
@WebServlet("/hello123")
public class helloServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
System.out.println("................init(ServletConfig config)........");
}
@Override
public void init() throws ServletException {
super.init();
System.out.println("................init()............................");
}
//Servlet在處理客戶端的請求時調用此方法
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// super.service(req, res);
PrintWriter pw=res.getWriter();
pw.print("hello service !");
pw.close();
System.out.println("................service............................");
System.out.println(req.getParameter("username")+"........service");
System.out.println(req.getParameter("password")+"........service");
}
//當Servlet容器移除Servlet對象時調用此方法,以釋放資源
@Override
public void destroy() {
super.destroy();
System.out.println("................destroy............................");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
//獲取username password參數
String name=req.getParameter("username");
String pass=req.getParameter("password");
//從response中獲取PrintWriter對象
PrintWriter printWriter=resp.getWriter();
printWriter.write(name+"..................."+pass);
printWriter.flush();//刷新printWriter
printWriter.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
System.out.println(req.getParameter("password")+"........doPost");
}
}
<%--
Created by IntelliJ IDEA.
User: YEN
Date: 2016/7/9
Time: 16:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script>
function checkForm() {
if(document.getElementById("username").value==null || document.getElementById("username").value==""){
alert("用戶名不能為空!");
return false;
}
if(document.getElementById("password").value==null || document.getElementById("password").value==""){
alert("密碼不能為空!");
return false;
}
return true;
}
</script>
</head>
<body>
<form name="form1" action="<%=request.getContextPath()%>/hello123" method="get" onsubmit="return checkForm()">
username:<input type="text" name="username" id="username"> <br>
password:<input type="password" name="password" id="password"> <br>
<input type="submit" value="提交">
</form>
</body>
</html>
二:點擊登陸按鈕後
三:查看IntelliJ IDEA中的運行結果
同樣,為了防止用戶惡意的頻繁發送激活碼,應用中需要對用戶發送激活碼的時間間隔進行限制,這時就需要用到倒計時器了,大概流程是這樣的:頁面初始化的時候,按鈕為可點擊狀態,用戶
提示:因為該新聞app已經基本完成,所以下方代碼量較大,請謹慎!或者從 ViewPager和Fragment結合使用實現新聞類app(一)一步步向下看!經過幾天的努力,不
開發一個需要常住後台的App其實是一件非常頭疼的事情,不僅要應對國內各大廠商的ROM,還需要應對各類的安全管家...雖然不斷的研究各式各樣的方法,但是效果並不好,比如任務
前言 這段時間在Testerhome上看了一些有關性能測試的帖子,看別人的東西,始終是別人的,只有自己寫一遍才能體會其中的細節,雖然說不要重復造輪子,但是這種基礎的東西