1、java web 驗證碼生成後一般在什麼地方保存這個驗證碼?存到資料庫還是怎麼地?
說起驗證碼,關系它的是安全性,再聯繫到你的時效性,這就非session(本身是客戶端的唯一內使用服容務器資源的憑證,而且是有時效限制的,用戶長期未訪問伺服器,這個session是就會被主動注銷掉)不能當此大任了,可用性不在話下,至於你說的加密這是畫蛇添足了。
依樓上所言,未免誤人,伺服器端是必須保存這個驗證碼的,就像我給你了一個驗證碼,你可以使用,我自己也得備份一下和你比對,不然那不就變成了:你說你的驗證碼是對的,你已經驗證過了,我就信任你了,那就等於沒有密碼,客戶端的一切安全認證都是不足為信的!
2、java實現一個登錄窗口(socket發送到伺服器,伺服器返回驗證),成功後跳轉到聊天窗口,
我寫了一個模仿qq的 和你這個差不多 代碼很多 有一個客戶端程序和一個專服務端程序 還用到數屬據庫了 要我可以發給你
原理是客戶端發送請求給服務端,
服務端查詢資料庫,處理請求並返回一個指令,
客戶端執行指令。
3、java客戶端與伺服器端
沒有來描述清楚。按照源字面理解,服務端根據客戶端發送的信息判斷是否發送文件是嗎?伺服器端根據客戶端請求的信息,如果要返迴文件,伺服器端讀取文件向客戶端寫文件,比如讀取文件向客戶端寫位元組流。客戶端肯定是不能直接訪問伺服器端文件的。如果文件是放在可以公開訪問的地址,返回地址,客戶端下載就是了。所以你的問題沒有描述清楚。
4、伺服器端 驗證上傳圖片 格式的 正則 (java)
||用字元串判斷性能比正則好,
String imgExt = "jpg|jpeg|png|bmp|GIF|JPG|PNG|JPEG";
imgExt .indexOf("圖片後綴專") >= 0
或者 imgExt .contains("圖片後綴")
這兩種就可以屬
5、java伺服器接收客戶端請求怎樣實現的
伺服器端代碼:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Socket通訊伺服器端
* @author 米強
*
*/
public class ServerMain {
public ServerMain() {
try {
// 構造伺服器ServerSocket對象,參數為伺服器端開放的埠號
ServerSocket ss = new ServerSocket(30102);
System.out.println("伺服器准備就緒!");
// 死循環可以使伺服器持續處於接收客戶端狀態
while(true){
// 該方法使程序阻塞,等待客戶端的鏈接,當監聽到客戶端的鏈接,創建一個Socket對象與客戶端單獨會話
Socket s = ss.accept();
// 為了不影響伺服器監聽其它客戶端,這里開啟了一個線程,由線程處理與這個客戶端的會話
new ServerThread(s).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ServerMain();
}
}
/**
* 伺服器端與客戶端會話的線程
*/
class ServerThread extends Thread {
private Socket s = null;
private BufferedReader read = null;
private PrintStream print = null;
public ServerThread(Socket s) {
this.s = s;
try {
// 從Socket中獲取輸入流和輸出流,由於我們只做一個簡單的字元串通訊,所以採用BufferedRead和PrintStream來封裝輸入、輸出流
read = new BufferedReader(new InputStreamReader(s.getInputStream()));
print = new PrintStream(s.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 線程的運行run方法
*/
public void run() {
try {
String message = null;
// 這里循環可以使伺服器持續的接收客戶端信息。read.readLine()通過輸入流讀取一段字元串,賦值給message變數,如果message字元串不為「exit」則循環,否則結束循環
while (!(message = read.readLine()).equals("exit")){
// 將字元串前面添加「返回:」,再發回客戶端
print.println("返回:" + message);
}
} catch (IOException e) {
} finally {
// 在 finally 代碼塊中無論如何都會執行下面代碼:
try {
// 如果沒有關閉Socket
if(!s.isClosed()){
// 關閉Socket鏈接
s.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
客戶端代碼:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
* Socket通訊客戶端
* @author 米強
*
*/
public class ClientMain {
public ClientMain() {
try {
// 構造與伺服器通訊的Socket對象,參數為伺服器IP地址(String)和埠號(int),埠號需要和伺服器端開放的埠號對應
Socket s = new Socket("192.168.1.100", 30102);
// 啟動一個線程與伺服器通訊,並把鏈接伺服器的Socket對象傳遞過去
new LinkThread(s).start();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ClientMain();
}
}
/**
* 與伺服器通訊的線程
*/
class LinkThread extends Thread {
private Socket s = null;
// 輸出流
private PrintStream out = null;
// 緩沖輸入流
private BufferedReader in = null;
// 錄入文字的Scanner對象
private Scanner scanner = null;
public LinkThread(Socket s) {
// 將Socket對象實例保存在全局變數中,因為run方法中我們還要用它斷開鏈接
this.s = s;
try {
// 從Socket中獲取輸入流和輸出流,由於我們只做一個簡單的字元串通訊,所以採用BufferedRead和PrintStream來封裝輸入、輸出流
out = new PrintStream(s.getOutputStream());
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 線程的運行run方法
*/
public void run() {
// 構造Scanner對象
scanner = new Scanner(System.in);
System.out.println("提示:如果要結束本次會話,請輸入「exit」指令!");
try {
// 死循環可以使客戶端不斷的向伺服器發送信息,不用擔心循環無法結束,後面的return語句可以結束整個線程。
while(true){
// 提示用戶輸入文字
System.out.print("請輸入:");
// 將用戶輸入的字元串保存在message變數中
String message = scanner.nextLine();
// 通過輸出流發送字元串
out.println(message);
// 清空緩沖,強制輸出
out.flush();
// 獲取伺服器返回的字元串
String str = in.readLine();
// 如果返回的字元串存在
if(str != null){
// 顯示在控制台
System.out.println(str);
}else{
// 提示會話結束,並結束線程
System.out.println("本次會話結束!");
return;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 在 finally 代碼塊中無論如何都會執行下面代碼:
try {
// 如果沒有關閉Socket
if(!s.isClosed()){
// 關閉Socket鏈接
s.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
6、java web開發伺服器端表單驗證應寫在哪裡
如果是表單預前嚴整,比如字元符不符合標准,是不是空,這些都應該寫在jsp的<script>中,在onsubmit中調用.
如果是類似判斷密碼正不正確這些,當你選擇struts的時候你可以寫在後台的action中.或者重寫驗證方法.
7、java web 如何防止 用戶繞過js驗證,直接地址欄提交表單或自己編寫html頁面,提交數據到伺服器?
一個簡單的方法是,在用戶獲取html頁面的時候,後台生成一個(MD5)字串(假設為k),並且返回給前端。
提交表單的時候,順帶也把這個k一起提交。
在處理提交的地方(後台),去校驗這個k,看看是不是自己生成的。
如果用戶偽造http請求,那麼自然是不帶k的,或者k是錯誤的。
還可以判斷http請求頭,比如UserAgent之類的,用於 輔 助 判斷請求的合法性。