java對(duì)cookie的操作其實(shí)不是很難的,主要就是對(duì)cookie 的建立和cookie的讀取操作吧,還有對(duì)cookie的生命周期的設(shè)置,和cookie的路徑的設(shè)置。。。。
一:首先我們建立一個(gè)有
生命周期的cookie吧,代碼如下:
int seconds=saveTime*24*60*60;//
這里是一天為單位設(shè)置其周期
Cookie cookie=new Cookie("cookiename","cookievalue");
cookie.setMaxAge(sendons);
//設(shè)置路徑,這個(gè)路徑即為該工程下都可以訪問(wèn)該cookie如果不設(shè)置路徑,那么設(shè)置該路徑cookie路徑及其路徑可以訪問(wèn)
cookie.setPath("/");
response.addCookie(cookie);
二:建立一個(gè)沒(méi)有生命周期的cookie,即隨著瀏覽器的關(guān)閉就消失的cookie,代碼如下:
HttpServletRequeset request;
HttpServletResponse response;
Cookie cookie=new Cookie("cookiename","cookievalue");//
相當(dāng)于一個(gè)Map
response.addCookie(cookie);
三:下面我介紹如何讀取cookie吧,代碼如下:
Cookie[] cookies=request.getCookies();
String[] cooks=null;
String username=null;
String password=null;
if(cookie!=null){
for(Cookie coo:cookies){
String aa=coo.getValue();
cookie=aa.split("==");
if(cooks.length==2){
username=cooks[0];//get the cookie name
password=cooks[1];//get the cookie value
}
}
}
posted @
2010-12-11 16:05 龍ぜ?xì)垊?閱讀(1736) |
評(píng)論 (2) |
編輯 收藏
基于數(shù)據(jù)庫(kù)的Java Web
現(xiàn)今所有的 Web都是基于數(shù)據(jù)庫(kù)的,可見(jiàn)數(shù)據(jù)庫(kù)在Web中的開(kāi)發(fā)時(shí)如此的重要。然而基本上所有的網(wǎng)站都是要求客戶登陸的時(shí)候都必須事先注冊(cè)賬號(hào),這樣才能進(jìn)入網(wǎng)頁(yè),訪問(wèn)其中的頁(yè)面,資源。。開(kāi)發(fā)基于數(shù)據(jù)庫(kù)的Web程序時(shí),涉及到多個(gè)用戶同時(shí)請(qǐng)求與數(shù)據(jù)庫(kù)建立"連接"的問(wèn)題,但多用戶并發(fā)處理目前還是一個(gè)難點(diǎn)。該文在對(duì)傳統(tǒng)數(shù)據(jù)連接模式的分析基礎(chǔ)上,采用了一種基于對(duì)象的數(shù)據(jù)連接池的設(shè)計(jì)方案。通過(guò)連接對(duì)象放置預(yù)先建立的若干"連接",根據(jù)一定的策略管理這些"連接",防止"連接"過(guò)多內(nèi)存開(kāi)銷過(guò)大,及連接排隊(duì)過(guò)長(zhǎng)問(wèn)題。并用JAVA實(shí)現(xiàn)了該方案,在實(shí)際應(yīng)用中提供了一個(gè)高效的連接管理策略,提高了Web數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的性能。
一:在此我通過(guò)一個(gè)實(shí)際的例子談?wù)勎易罱頦eb得心得,首先我們建立一個(gè)javaWeb項(xiàng)目在Myeclipse下。首先建立好數(shù)據(jù)庫(kù)連接,即建立一個(gè)Vo對(duì)象User類,如下:
package vo;
/*
用戶名稱:<input type="text" name="username"><br>
用戶密碼:<input type="password" name="password"><br>
用戶愛(ài)好:<input type="checkbox" name="hobby" value="1">游泳
<input type="checkbox" name="hobby" value="2">足球<br>
用戶性別:<input type="radio" name="gender" value="male">男
<input type="radio" name="gender" value="female">女
<input type="radio" name="gender" value="secret">保密<br>
用戶職位:<select name="position">
<option value="CEO">CEO</option>
<option value="CFO">CFO</option>
<option value="CTO">CTO</option>
</select><br>
用戶簡(jiǎn)歷:<textarea rows="5" cols="20" name="resume"></textarea>
<input type="submit" value="注冊(cè)">
*/
public class User {
private int id;
private String userName;
private String passWord;
private String hobby;
private String gender;
private String position;
private String resume;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public String getResume() {
return resume;
}
public void setResume(String resume) {
this.resume = resume;
}
}
二:這樣我們建立好了實(shí)體對(duì)象之后,現(xiàn)在我們來(lái)建立UserDAO接口和DAOFactory兩個(gè)類如下:
package dao;
import vo.User;
public interface UserDAO {
//建立一個(gè)接口
void save(User user);
}
package factory;
import impl.UserDaoImpl;
import dao.UserDAO;
public class DAOFactory {
public static UserDAO getUserDAOInstance(){
return new UserDaoImpl();
}
}
三:現(xiàn)在我們來(lái)建立ConnectionUtil類,這里我才用我們最常用的一種方法來(lái)連接數(shù)據(jù)庫(kù)Database即:
package db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
public class ConnectionUtil {
public Connection openConnection() {
String driver = "";
String url = "";
String user = "";
String password = "";
Properties prop = new Properties(); //實(shí)例化一個(gè)配置文件的對(duì)象
Connection conn = null;
try {
// 加載屬性文件
prop.load(this.getClass().getClassLoader().getResourceAsStream(
"DBConfig.properties"));
driver = prop.getProperty("driver");
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
// Class.forName加載驅(qū)動(dòng)
Class.forName(driver);
// DriverManager獲得連接
conn = DriverManager.getConnection(url,
user, password);
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
四:是實(shí)現(xiàn)Java程序與數(shù)據(jù)庫(kù)的鏈接層建立一個(gè)UserDaoImpl類:
package impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import vo.User;
import dao.UserDAO;
import db.ConnectionUtil;
public class UserDaoImpl implements UserDAO{
//實(shí)現(xiàn)接口UerDAO
public void save(User user) {
//實(shí)現(xiàn)接口類中的方法
ConnectionUtil cu=new ConnectionUtil();//初始化連接的數(shù)據(jù)庫(kù)
Connection conn=cu.openConnection();
String sql = "insert into User(username,password,hobby,gender,position,resume) values(?,?,?,?,?,?)";
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getUserName());
pstmt.setString(2, user.getPassWord());
pstmt.setString(3, user.getHobby());
pstmt.setString(4, user.getGender());
pstmt.setString(5, user.getPosition());
pstmt.setString(6, user.getResume());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();//關(guān)閉連接數(shù)據(jù)庫(kù)
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
五:是通過(guò)網(wǎng)站往數(shù)據(jù)庫(kù)中加載數(shù)據(jù),如下:
package com.bx.Servletform;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.UserDAO;
import factory.DAOFactory;
import vo.User;
public class RegisterServlet extends HttpServlet {
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
String username=request.getParameter("username");
String password=request.getParameter("password");
String[] hobby=request.getParameterValues("hobby");
String gender=request.getParameter("gender");
String resume=request.getParameter("resume");
String position=request.getParameter("position");
User user=new User();
user.setUserName(username);
user.setGender(gender);
user.setPassWord(password);
user.setPosition(position);
user.setResume(resume);
String hobbyStr="";
if(hobby!=null&&hobby.length>0){
for(int i=0;i<hobby.length;i++){
hobbyStr=hobby[i]+":";
}
}
user.setHobby(hobbyStr);
UserDAO udao=DAOFactory.getUserDAOInstance();
udao.save(user);
PrintWriter out=response.getWriter();
out.println("Hello World Servlet james");
System.out.println("username |"+username);
System.out.println("password |"+password);
System.out.println("gender |"+gender);
System.out.println("resume |"+resume);
System.out.println("position |"+position);
if(hobby!=null&& hobby.length>0){
for(int i=0;i<hobby.length;i++){
System.out.println(hobby[i]);
}
}
//實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)
if(username!=null && username.equals("james")){
request.getRequestDispatcher("/success.html").forward(request, response);
}else{
request.getRequestDispatcher("/failure.jsp").forward(request, response);
}
}
現(xiàn)在我們來(lái)配置一下register,jsp吧,如下:
<form action="/Servlet_Form_Project/form" method="post">
<!--form 中有兩個(gè)最為重要的屬性-->
用戶名稱:<input type="text" name="username"><br>
用戶密碼:<input type="password" name="password"><br>
用戶愛(ài)好:<input type="checkbox" name="hobby" value="1">游泳
<input type="checkbox" name="hobby" value="2">足球<br>
用戶性別:<input type="radio" name="gender" value="male">男
<input type="radio" name="gender" value="female">女
<input type="radio" name="gender" value="secret">保密<br>
用戶職位:<select name="position">
<option value="CEO">CEO</option>
<option value="CFO">CFO</option>
<option value="CTO">CTO</option>
</select><br>
用戶簡(jiǎn)歷:<textarea rows="5" cols="20" name="resume"></textarea><br/>
<input type="submit" value="注冊(cè)">
</form>
試圖效果如下:
現(xiàn)在我們來(lái)配置一下WEB.xml如下所示:
<servlet>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.bx.Servletform.RegisterServlet</servlet-class>
<!-- this is servlet -->
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/form</url-pattern>
</servlet-mapping>
在此我們已經(jīng)完成了Java Web與數(shù)據(jù)庫(kù)的連接:至此我們可以開(kāi)始comcat,在瀏覽器中輸入連接的地址即:http://localhost:8080/Servlet_Form_Project/register.jsp
得到頁(yè)面為:
這時(shí)候我們可以查看數(shù)據(jù)庫(kù)中是否在如了我們輸入的數(shù)據(jù)即:
posted @
2010-12-09 20:55 龍ぜ?xì)垊?閱讀(4394) |
評(píng)論 (2) |
編輯 收藏
一:軟件下載
1.Java
這里我使用的是jdk1.6.0...
2.tomcat
我使用的是tomcat的版本是6.0.29的,安裝版或者是解壓版的都可以使用,只是有一點(diǎn)不同而已。
3.數(shù)據(jù)庫(kù)
推薦使用 MySQL, 因?yàn)镸ySQL使用更加的解潔,明了。。
二:軟件安裝
1.雙擊安裝jdk。
裝完后在我的電腦->屬性->高級(jí)->環(huán)境變量->系統(tǒng)變量中添加以下環(huán)境變量:
?。僭O(shè)你的JDK安裝在c:/jdk)
JDK_HOME=C:\jdk
classpath=.;%JDK_HOME%\lib\dt.jar;%JDK_HOME%\lib\tools.jar
在PATH(原來(lái)就已存在)中添加:%JDK_HOME%\bin
這樣jdk環(huán)境配置成功。
2.雙擊安裝你的Tomcat。(建議安裝在一個(gè)盤的根目錄下入D:/tomcat)
注:apache-tomcat-6.0.29這是免安裝版的。。嘿嘿
這樣已經(jīng)完整安裝完Tomcat了。
建議:在PATH中再添加:%JDK_HOME%\bin;%TOMCAT_HOME%\bin
這樣做的目的是在虛擬dos中可以使用tomcat的工具
最后順便把第一步下載回來(lái)的三個(gè)jar文件放到tomcat目錄下的common/lib目錄中
3.測(cè)試:
打開(kāi)開(kāi)始菜單中的tomcat(小貓圖案)的monitor工具,點(diǎn)擊start server,顯示綠色三角形即為啟動(dòng),打開(kāi)瀏覽器在地址欄輸入:http://localhost:8080/可以看到小貓圖案說(shuō)明已經(jīng)配置成功。
4.安裝數(shù)據(jù)庫(kù)(sqlserver)
windows xp下必須安裝個(gè)人版或開(kāi)發(fā)版(個(gè)人推薦個(gè)人版)。
一直next就可以(微軟的東西就是方便),這里注意到域帳戶那里選擇本機(jī)帳戶,到驗(yàn)證那里選擇混合驗(yàn)證(這點(diǎn)很重要,若選擇系統(tǒng)認(rèn)證以后在程序中就連接不上數(shù)據(jù)庫(kù)),為你的sa用戶輸入一個(gè)密碼(如果練習(xí)用就不用考慮安全性啦,選擇“空密碼”就可以)
一切都準(zhǔn)備好,我們具體的做一個(gè)小程序吧:
1.建立一個(gè)繼承于HttpServlet的類TestServlet,在里面寫HttpServlet中的方法,一般常用的方法有doGet(),doPost(),doPut(),doDelete()其中最常用的有doGet(),doPost()兩個(gè)方法。。
代碼如下:
package com.dr.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet extends HttpServlet{
public void init(){
System.out.println("hello");
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
{
System.out.println("how are you");
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
String username=request.getParameter("username");
String pws=request.getParameter("password");
System.out.println(username);
System.out.println(pws);
//實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)
if(username!=null && username.equals("james")){
request.getRequestDispatcher("/successfull.html").forward(request, response);
}else{
request.getRequestDispatcher("/failure.html").forward(request, response);
}
System.out.println("doPost method");
}
}
2.我們應(yīng)該配置web.xml文件:
代碼如下:
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.dr.servlet.TestServlet</servlet-class>
<!-- this is servlet -->
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
3.下面我們配置demo.html
body中的代碼如下:
<form name="f1" id="f1" action="/Servlet_Basic/test" method="post">
<!--其中的method="post"與"get"的區(qū)別別需要清楚,這是非常重要的-->
<table >
<tr><td>賬號(hào)</td> <td><input type="text" name="username" id="username"/></td></tr>
<tr><td>密碼</td> <td><input type="password" name="password" id="password"/></td></tr>
<tr> <td colspan="3" align="center"><input type="submit" value="歡迎光臨" /></td></tr>
</table>
</form>
即為:
這時(shí)候你可以在啟動(dòng)tomcat,然后在internet中輸入http://localhost:8080/Servlet_Basic/demo.html,就啟動(dòng)了剛才得網(wǎng)頁(yè),如下:
posted @
2010-12-08 12:43 龍ぜ?xì)垊?閱讀(1149) |
評(píng)論 (0) |
編輯 收藏
淺談?dòng)肑DBC連接MySQL
在學(xué)習(xí)數(shù)據(jù)庫(kù)開(kāi)發(fā)的實(shí)例,這里淺談一下用JDBC連接數(shù)據(jù)庫(kù)MySQL(當(dāng)然也可以連接 SQL Server或者Oracle了,只是我更喜歡開(kāi)源軟件,同時(shí)也簡(jiǎn)單些。。。)
首先正確安裝好MySQL,建立好數(shù)據(jù)庫(kù),下面我們來(lái)建立一個(gè)數(shù)據(jù)庫(kù)吧。
JDBC連接MySQL
加載節(jié)注冊(cè)JDBC驅(qū)動(dòng)程序,
Class.forName("com.mysql.jdbc.Driver");
Class.forName("com.mysql.jdbc.Driver").newInstance();
JDBC URL定義驅(qū)動(dòng)程序與數(shù)據(jù)庫(kù)之間的鏈接
標(biāo)準(zhǔn)語(yǔ)法:
<protocol(主要通信協(xié)議)>:<subprotocol(次要通訊協(xié)議,驅(qū)動(dòng)程序名稱)>:<data source identifier(數(shù)據(jù)源)>
MySQL JDBC URL的格式:
jdbc:mysql://[hostname][:port]/[dbname][?param1=value1][¶m2=value2]….
例如:
jdbc:mysql://localhost:3306/jdbc_db","root","1234"
常見(jiàn)參數(shù):
user 用戶名
password 密碼
autoReconnect 聯(lián)機(jī)失敗,是否重新聯(lián)機(jī)(true/false)
maxReconnect 嘗試重新聯(lián)機(jī)次數(shù)
initialTimeout 嘗試重新聯(lián)機(jī)間隔
maxRows 傳回最大行數(shù)
useUnicode 是否使用Unicode字體編碼(true/false)
characterEncoding 何種編碼(GB2312/UTF-8/…)
relaxAutocommit 是否自動(dòng)提交(true/false)
capitalizeTypeNames 數(shù)據(jù)定義的名稱以大寫表示
JDBC訪問(wèn)數(shù)據(jù)庫(kù)的步驟:
1.加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)
2.獲得數(shù)據(jù)庫(kù)連接
3.創(chuàng)建SQL語(yǔ)句
4.執(zhí)行查詢
5.遍歷結(jié)果集
6.關(guān)閉數(shù)據(jù)庫(kù)連接
數(shù)據(jù)庫(kù)的鏈接一般有三種方法,這里簡(jiǎn)單說(shuō)一種,有小例子如下:
ckage com.bx.jdbc;
port java.sql.Connection;
port java.sql.DriverManager;
port java.util.Properties;
public class ConnectionUtil {
public Connection openConnection() {
String driver = "";
String url = "";
String user = "";
String password = "";
Properties prop = new Properties();
Connection conn = null;
try {
// 加載屬性文件
prop.load(this.getClass().getClassLoader().getResourceAsStream(
"DBConfig.properties"));
driver = prop.getProperty("driver");
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
// Class.forName加載驅(qū)動(dòng)
Class.forName(driver);
// DriverManager獲得連接
conn = DriverManager.getConnection(url,user, password);
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
執(zhí)行的主函數(shù)如下:
package com.bx.jdbc;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
ConnectionUtil cu = new ConnectionUtil();
// 第三種方法
System.out.println("這是最常用的一種方法:" + cu.openConnection());
}
}
執(zhí)行結(jié)果:
謝謝大家分享,但愿能對(duì)您帶來(lái)一點(diǎn)幫助,希望能幫提出寶貴的意見(jiàn)。。。
posted @
2010-12-08 09:03 龍ぜ?xì)垊?閱讀(2473) |
評(píng)論 (2) |
編輯 收藏
posted @
2010-12-07 16:49 龍ぜ?xì)垊?閱讀(122) |
評(píng)論 (0) |
編輯 收藏
殺毒軟件:
殺毒軟件是每一臺(tái)電腦不可少的應(yīng)用軟件之一,現(xiàn)在我來(lái)研究 一下殺毒軟件的整個(gè)工作流程吧。。。首先要明確殺毒軟件的目的是什么,怎么樣才能實(shí)現(xiàn)這一目的。。。
殺毒軟件是客戶在通過(guò)掃描自己的電腦里的每一個(gè)文件,然后與殺毒軟件服務(wù)器病毒庫(kù)里的病毒相比較,如果你電腦里有和服務(wù)器中文件相同的,殺毒軟件就視為是病毒,然后有用戶選擇是否要把掃描出來(lái)的文件刪除。。。。下面是我用Java語(yǔ)言來(lái)實(shí)現(xiàn)這個(gè)功能的。。。希望對(duì)大家有所感悟。現(xiàn)在說(shuō)說(shuō)我的具體實(shí)現(xiàn)的步驟吧。
服務(wù)器代碼:
package server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import com.dr.bean.Virus;
public class Server {
public static List<Virus> virusList = new ArrayList<Virus>();
public static void main(String[] args) throws IOException {
ServerSocket server = null;
//輸出肯定使用打印流
PrintStream out = null;
//服務(wù)器肯定也要接收數(shù)據(jù)
BufferedReader buf = null;
//實(shí)例化一個(gè)服務(wù)器的監(jiān)聽(tīng)端
server = new ServerSocket(8888);
//可以用一種死循環(huán)的方式接收內(nèi)容
System.out.println("---------服務(wù)器已經(jīng)啟動(dòng)----------");
Socket client = null;
//初始化暗殺名單
//List<Virus> virusList = getVirusList();
while(true){
//不斷接收內(nèi)容
client = server.accept();
//準(zhǔn)備好向客戶端輸入內(nèi)容
out = new PrintStream(client.getOutputStream());
//而且客戶端要有輸入給服務(wù)器端
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
//接收客戶端發(fā)送過(guò)來(lái)的內(nèi)容
String str = buf.readLine();
System.out.println("server receive data is:"+str);
String virus = "";
if("getVirusList".equals(str)){//組成暗殺協(xié)議,返回客戶端
for(Virus v :virusList){
virus += v.getName()+":";
}
out.println(virus);
}
//進(jìn)行收尾工作
out.flush();
out.close();
buf.close();
client.close();
}
}
public static List<Virus> getVirusList(){
Virus virus = null;
virus = new Virus();
virus.setName("QQ.exe");
virusList.add(virus);
virus = new Virus();
virus.setName("Niu.exe");
virusList.add(virus);
virus = new Virus();
virus.setName("Baidu.exe");
virusList.add(virus);
virus = new Virus();
virus.setName("Jinshan.exe");
virusList.add(virus);
return virusList;
}
}
執(zhí)行結(jié)果:
客戶端代碼
package com.dr.client;
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.ArrayList;
import java.util.List;
import com.dr.bean.Virus;
public class Client {
private String str;
private List<Virus> virusList = null;
public Client(String str){
this.str = str;
virusList = new ArrayList<Virus>();
}
public List<Virus> send() throws UnknownHostException, IOException{
Socket client = null;
//接收服務(wù)器信息的輸入流
BufferedReader buf = null;
//向服務(wù)器發(fā)送信息的輸出流
PrintStream out = null;
//實(shí)例化一個(gè)套接字
client = new Socket("localhost",8888);
//從服務(wù)器接收信息
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
//向服務(wù)器打印信息
out = new PrintStream(client.getOutputStream());
//打印出去
out.println(this.str);
//接收進(jìn)來(lái)QQ.exe:baidu.exe:niu.exe
String msg = buf.readLine();
System.out.println(msg);
String[] msgArray = msg.split(":");
for(int i=0;i<msgArray.length;i++){
Virus v = new Virus();
v.setName(msgArray[i]);
virusList.add(v);
System.out.println(msgArray[i]);
}
buf.close();
out.flush();
out.close();
client.close();
return virusList;
}
}
文件掃描過(guò)程代碼類:::
package com.dr.client;
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.ArrayList;
import java.util.List;
import com.dr.bean.Virus;
public class Client {
private String str;
private List<Virus> virusList = null;
public Client(String str){
this.str = str;
virusList = new ArrayList<Virus>();
}
public List<Virus> send() throws UnknownHostException, IOException{
Socket client = null;
//接收服務(wù)器信息的輸入流
BufferedReader buf = null;
//向服務(wù)器發(fā)送信息的輸出流
PrintStream out = null;
//實(shí)例化一個(gè)套接字
client = new Socket("localhost",8888);
//從服務(wù)器接收信息
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
//向服務(wù)器打印信息
out = new PrintStream(client.getOutputStream());
//打印出去
out.println(this.str);
//接收進(jìn)來(lái)QQ.exe:baidu.exe:niu.exe
String msg = buf.readLine();
System.out.println(msg);
String[] msgArray = msg.split(":");
for(int i=0;i<msgArray.length;i++){
Virus v = new Virus();
v.setName(msgArray[i]);
virusList.add(v);
System.out.println(msgArray[i]);
}
buf.close();
out.flush();
out.close();
client.close();
return virusList;
}
}
KillVirusUI代碼:
package com.dr.ui;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import com.dr.file.FileList;
public class KillVirusUI {
public static String filePath = "";
public static List<String> virusFilePath = new ArrayList<String>();
public static void main(String args[]) {
Display display = new Display();
final Shell shell = new Shell(display, SWT.SHELL_TRIM);
shell.setBounds(2, 2, 1200, 600);
//shell.setMaximized(true);// 全屏顯示
shell.setText("殺毒軟件簡(jiǎn)單版");
/**
* 設(shè)置執(zhí)行按鈕
*/
final Button btnOk = new Button(shell, SWT.PUSH);
btnOk.setBounds(20, 25, 70, 25);
btnOk.setText("掃描殺毒");
final Button btnOk1 = new Button(shell, SWT.PUSH);
btnOk1.setBounds(120, 25, 70, 25);
btnOk1.setText("刪除病毒");
Color color = new Color(Display.getCurrent(), 100, 180, 10);// 聲明顏色對(duì)象
Color color1 = new Color(Display.getCurrent(), 100, 220, 240);// 聲明顏色對(duì)象
final Text text = new Text(shell, SWT.MULTI | SWT.BORDER);
text.setBounds(10, 270, 1200, 400);
text.setBackground(color1);
final Text text1 = new Text(shell, SWT.MULTI | SWT.BORDER);
text1.setBounds(10, 150, 1200, 50);
text1.setBackground(color1);
final ProgressBar progressBar = new ProgressBar(shell, SWT.HORIZONTAL);
GridData data = new GridData();
data.horizontalSpan = 2;
data.grabExcessHorizontalSpace = true;
progressBar.setLayoutData(data);
progressBar.setMaximum(100);// 設(shè)置最大值
progressBar.setMinimum(0);// 設(shè)置最小值
/**
* 注冊(cè)點(diǎn)擊事件,循環(huán)顯示數(shù)據(jù)
*/
Label labe=new Label(shell,SWT.NULL);
labe.setBounds(800,25, 120,75); // 設(shè)置按鈕位置
labe.setFont(new Font(display,"宋體",20,SWT.BOLD));
labe.setBackground( color);
labe.setText(" "+"360"+"\n"+"網(wǎng)絡(luò)保鏢");
;
btnOk.addSelectionListener(new SelectionAdapter() {//Button監(jiān)聽(tīng)事件
public void widgetSelected(SelectionEvent e) {
FileList f = new FileList();
DirectoryDialog dlg = new DirectoryDialog(shell);
dlg.setText("目錄"); // 設(shè)置窗口標(biāo)題
dlg.setMessage("請(qǐng)選擇一個(gè)目錄:"); // 設(shè)置提示文字
dlg.setFilterPath("/root"); // 設(shè)置初始目錄
String dir = dlg.open(); // 打開(kāi)對(duì)話框并返回一個(gè)包含所選目錄路徑的字符串
//File f=new File(dlg.open());
f.setStr(dir);
if (f != null)
System.out.println(f); // 比如選擇“我的文檔”,則會(huì)打印“D:\My Documents”
Thread t = new Thread(f);
t.setDaemon(true);
t.start();
t.yield();
for(int i=0;i<100;i++){
text.append(filePath+"\n");
progressBar.setBounds(10, 80, 1200, 20);
progressBar.setSelection(progressBar.getSelection()+1);//顯示一條數(shù)據(jù),滾動(dòng)條進(jìn)度加1
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
if(virusFilePath.size()!=0){
text.setText("");
for(String str : virusFilePath){
text1.append("很悲?。耗愕碾娔X里發(fā)現(xiàn)病毒:"+str+"\n");
}
}
else{
text1.setText("恭喜你,沒(méi)有發(fā)現(xiàn)病毒!");
}
t.interrupt();
}
});
btnOk1.addSelectionListener(new SelectionAdapter() {//Button監(jiān)聽(tīng)事件
public void widgetSelected(SelectionEvent e) {
FileList q = new FileList();
Thread t = new Thread(q);
t.setDaemon(true);
t.start();
for(int i=0;i<100;i++){
text.append(filePath+"\n");
progressBar.setBounds(10, 105, 1200, 20);
progressBar.setSelection(progressBar.getSelection()+1);//顯示一條數(shù)據(jù),滾動(dòng)條進(jìn)度加1
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
if(virusFilePath.size()!=0){
text.setText("");
for(String str : virusFilePath){
//text1.append("發(fā)現(xiàn)病毒:"+str+"\n");
File f1=new File("f.filePath");
f1.delete();
text1.append("恭喜你已經(jīng)成功清理了電腦里的病毒:"+str+"\n");
}
}
else{
text1.setText("祝賀你不用為電腦安危考慮了!");
}
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
執(zhí)行結(jié)果:
首先要啟動(dòng)服務(wù)器,殺毒軟件才能夠正常的工作。。。。。。。
病毒類:
package com.dr.bean;
public class Virus{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
posted @
2010-11-23 13:43 龍ぜ?xì)垊?閱讀(2107) |
評(píng)論 (2) |
編輯 收藏
圖形用戶界面:
在Java 中,頂層窗口成為框架。對(duì)應(yīng)于SWT庫(kù)中,其框架主要是Frame,而在Swing庫(kù)中,則對(duì)應(yīng)的類是JFrame,JFrame類是Frame的子類,但是他們大多數(shù)情況下是等價(jià)的,只是在表示形式下多了個(gè)"J"而已。。。。Component類是所有GUI對(duì)象的祖先,Window類是Frame類的父類,JFrame類直接從Frame繼承而來(lái),下面是他們的關(guān)系圖。
import javax.swing.*;
import java.awt.*;
//////////////////////////////////////////////////
public class HelloWorld
{
public static void main(String[] args)
{
TextFrame frame = new TextFrame("MyJava"); //新建圖形建面MyJava
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true); //設(shè)置為可視化的。。。
}
}
/////////////////////////////////////////////////
class TextFrame extends JFrame
{
public static final int WIDTH = 300;
public static final int HEIGHT = 200;
public TextFrame()
{
setTitle("HelloWorld");
setSize(WIDTH, HEIGHT);
//將panel加入到frame
TextPanel panel = new TextPanel();
Container contentPane = getContentPane();
contentPane.add(panel); //要在內(nèi)容窗格中加入圖形元素(容器)
}
}
//////////////////////////////////////////////////////////////////
class TextPanel extends JPanel //組件容器
{
public int x = 100;
public int y = 100;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
//顯示文本
g.drawString(" Hello, World!", x, y);
}
}
事件處理:
如果用戶在用戶界面執(zhí)行了一個(gè)動(dòng)作,這將導(dǎo)致一個(gè)事件發(fā)生。事件的描述發(fā)生了什么的對(duì)象,在Java中,定義了各種不同的事件類,來(lái)描述各種類型的用戶操作。事件是由事件源產(chǎn)生的,事件的產(chǎn)生者成為事件源。。。
事件處理邏輯(事件。事件源。和處理方法之間的關(guān)系)可以用一下四個(gè)步驟表示:
posted @
2010-11-11 19:53 龍ぜ?xì)垊?閱讀(135) |
評(píng)論 (0) |
編輯 收藏
面向?qū)ο?/span>=對(duì)象+繼承+類+通信。面向?qū)ο笫且詫?duì)象(Object)的概念為核心,專注于對(duì)象的操縱。。面向?qū)ο笞顬橥怀龅奶攸c(diǎn)是繼承...封裝....多態(tài)。
對(duì)象:是一個(gè)抽象的是體,eg:蘋果是一個(gè)類,有不同口味的,不同種類的蘋果。然而說(shuō)這里有個(gè)蘋果,則是一個(gè)實(shí)例對(duì)象。書:是一個(gè)類,說(shuō)這里有一本《計(jì)算機(jī)網(wǎng)絡(luò)》,則是一個(gè)實(shí)例對(duì)象。。
繼承:所表達(dá)的是對(duì)象之間的相交關(guān)系,是使一個(gè)對(duì)象可以繼承其他對(duì)象類的特征和能力。。。
類:一組客觀對(duì)象的抽象,具有相同的數(shù)據(jù)結(jié)構(gòu)和相同的操作對(duì)象集合。。
Eg:
class Demo {
{
// 構(gòu)造塊
System.out.println("Demo類中的構(gòu)造塊~~~");
}
Demo() {
System.out.println("Demo類中的構(gòu)造方法~~~");
}
// 靜態(tài)塊
static {
System.out.println("Demo類中的靜態(tài)塊~~~");
}
}
public class Demo24 {
// 在主類中寫的靜態(tài)塊要優(yōu)先于main方法執(zhí)行
static {
System.out.println("##################");
}
public static void main(String args[]) {
new Demo();
new Demo();
new Demo();
new Demo();
new Demo();
}
}
談?wù)凧ava下的集合吧:
向量(Vecter):用capacity()方法控制其容量,空間是成倍的增長(zhǎng),可加入大量元素的組件。。
線性表(List):有限元素組成的有序序列,表長(zhǎng)(length),表頭(head),表尾(tail)....
堆棧(stack):實(shí)際上就是只能在一端進(jìn)行插入和刪除 的線性表。。只能插入和刪除的一端是棧頂(top),另一端是棧底(bottom)...Last-in.First-out。。。。
隊(duì)列(Queue):也是只能在一端進(jìn)行插入和刪除操作,對(duì)頭(front)只能進(jìn)行刪除操作,隊(duì)尾(back)只能插入操作。。First In First Out...........
posted @
2010-11-11 11:06 龍ぜ?xì)垊?閱讀(132) |
評(píng)論 (0) |
編輯 收藏
首先 我們說(shuō)說(shuō) 網(wǎng)絡(luò) 吧,網(wǎng)絡(luò)互聯(lián)設(shè)備協(xié)議(OIS)參考模型分成了七層,即應(yīng)用層,表示層,會(huì)話層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層,物理層。。。但是在Java中只注重與應(yīng)用層..網(wǎng)絡(luò)層..與傳輸層,在其他方面不能夠更好的服務(wù)與程序的操作和控制。然而在java中式有服務(wù)器(Server)和客服(Cliect)組成的,這兩者之間一般情況 是成對(duì)出現(xiàn)的。。。對(duì)服務(wù)器而言如果客服對(duì)服務(wù)器發(fā)送請(qǐng)求,,則服務(wù)器是InputStream數(shù)據(jù),二客服則是OutputStream數(shù)據(jù)。。。兩者之間也是相對(duì)的。。。。
我做了個(gè)小例子如下:
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server03 {
public static void main(String args[])throws IOException{
ServerSocket ss=new ServerSocket(9999);
while(true){
System.out.println("----server端");
Socket s=ss.accept();
DataOutputStream dos=new DataOutputStream(s.getOutputStream());
dos.writeUTF("客服端"+s.getInetAddress().getHostAddress()+""+s.getPort()+"已連接"+
s.getInetAddress().getHostAddress()+s.getLocalPort());
dos.flush();
dos.close();
s.close();
}
}
}
執(zhí)行結(jié)果:
客服端的程序:
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
public class Cliecnt02 {
public static void main(String args[])throws IOException{
for(int i=0;i<20000;i++){
Socket s=new Socket("127.0.0.1",9999);
DataInputStream dis=new DataInputStream(s.getInputStream());
System.out.println("客服端連接的數(shù)據(jù)"+dis.readUTF());
dis.close();
s.close();
}
}
}
執(zhí)行結(jié)果:
小結(jié):一般情況下一臺(tái)服務(wù)器上可以為很多的電腦提供服務(wù)。。。。只要改變端口號(hào)就可以 了
posted @
2010-11-10 22:28 龍ぜ?xì)垊?閱讀(877) |
評(píng)論 (0) |
編輯 收藏
多線程使用的方法有兩種,即使用繼承和接口。繼承使用的是關(guān)鍵字 Thread,接口使用的是Runnable。。這兩種方法都最終都要使用Thread類中的方法start()啟動(dòng)多線程。。。。每一個(gè)線程都是通過(guò)start()方法開(kāi)始啟動(dòng)的,在未啟動(dòng)之前程序一定是死的。。說(shuō)說(shuō)線程的狀態(tài)有三種吧,即就緒,運(yùn)行,阻塞。。。這三者之間的關(guān)系如下
下面才用一種最實(shí)用的方法實(shí)現(xiàn)多線程,即Runnable接口,它用兩個(gè)好處可以實(shí)現(xiàn)多繼承和資源共享,這正是Java語(yǔ)言的優(yōu)點(diǎn)之所在。。
package com.bx.course.Demo05;
class MyThread implements Runnable{
private int ticket=300;
public void run(){
for(int i=0;i<300;i++)
{
if(this.ticket>0)
{
//表示還有票可以賣
System.out.println(Thread.currentThread().getName()+"-->賣票:"+(ticket--));
}
}
}
}
public class ThreadDemo05 {
public static void main(String[] args) {
MyThread mt=new MyThread();
Thread t1=new Thread(mt);
Thread t2=new Thread(mt);
Thread t3=new Thread(mt);
t1.start();//每個(gè)線程只啟動(dòng)一次
// t1.start();
t2.start();
t3.start();
}
}
posted @
2010-11-07 18:15 龍ぜ?xì)垊?閱讀(160) |
評(píng)論 (0) |
編輯 收藏