serverjava
① 我想用java写一个简单的web server,应该怎么写呀
我原来写过一个很简单的,可以指定你存放网页的文件夹,可以指定允许访问的IP,给你源码看看吧。public class WebServer {
static Button btReloadIP=new Button("更新合法IP列表");
static Button btAllow=new Button("允许此IP");
static Button btRepel=new Button("拒绝此IP");
static JTextField tfNewIP=new JTextField(20);
static JPanel pane=new JPanel();
static JTextField tfState=new JTextField(25);
static TextField tfURL=new TextField("G:\\webServer2\\",28);
static TextField tfPort=new TextField("10288",3);
static Button btStart=new Button("启动服务器");
static Button btStop=new Button("停止服务器");
private static int IPnum=0;
public static boolean IPadmin=false;
static boolean click=false;
private static String url;
private static String[] checkIP=new String[255];
private static Thread serverThread=null;
private static Socket connectionSocket=null;
private static ServerSocket listenSocket=null;
public WebServer() throws IOException{
serverThread=new Thread(new Runnable(){
public void run(){
try {
listenSocket = new ServerSocket(Integer.parseInt(tfPort.getText()));
} catch (IOException e) { }
while(true){
try {
connectionSocket=listenSocket.accept();
@SuppressWarnings("unused")
webClient client=new webClient(connectionSocket);
} catch (IOException e) {
}
}
}
});
}
public static void main(String args[])throws Exception{
GUI();
}
public static void GUI(){
JFrame f=new JFrame("小白兔Web服务器(BY 丁寻)");
f.setSize(300,200);
f.setLocation(500, 300);
f.getContentPane().add(pane,BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
//不可以变大变小
f.setResizable(false);
pane.add(new JLabel("端口号:"));
pane.add(tfPort);
pane.add(btStart);
pane.add(btStop);
pane.add(new JLabel("配置路径"));
pane.add(tfURL);
pane.add(tfState);
pane.add(new JLabel("新IP请求"));
pane.add(tfNewIP);
pane.add(btAllow);
pane.add(btRepel);
pane.add(btReloadIP); btStart.addActionListener(new Listener());
btStop.addActionListener(new Listener());
btAllow.addActionListener(new Listener());
btRepel.addActionListener(new Listener());
btReloadIP.addActionListener(new Listener());
}
static class Listener implements ActionListener {
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent event) {
if(event.getActionCommand()=="启动服务器"){
try {
url=tfURL.getText();
readIP();
tfState.setText("服务器已经启动......地址:"
+InetAddress.getLocalHost().toString());
} catch (Exception e) {
e.printStackTrace();
} try {
new WebServer();
} catch (IOException e) {
e.printStackTrace();
} serverThread.start(); btStart.setEnabled(false);
tfPort.setEditable(false);
btStop.setEnabled(true);
tfURL.setEditable(false);
btReloadIP.setEnabled(true);
}
if(event.getActionCommand()=="停止服务器"){
serverThread.stop();
tfState.setText("服务器已经停止");
btStart.setEnabled(true);
tfPort.setEditable(true);
btStop.setEnabled(false);
tfURL.setEditable(true);
btReloadIP.setEnabled(false);
}
if(event.getActionCommand()=="允许此IP"){
IPadmin=true;
//serverThread.start();
click=true;
btAllow.setEnabled(false);
btRepel.setEnabled(false);
tfNewIP.setText(null);
}
if(event.getActionCommand()=="拒绝此IP"){
click=true;
IPadmin=false;
//serverThread.start();
btAllow.setEnabled(false);
btRepel.setEnabled(false);
tfNewIP.setText(null);
}
if(event.getActionCommand()=="更新合法IP列表"){
try {
readIP();
} catch (IOException e) {
// e.printStackTrace();
}
}
}
}
public static void readIP() throws IOException{
int i=0;
byte[] ips = new byte[65535];
File IPfile=new File(url+"checkIP.txt");
FileInputStream fileReader=new FileInputStream(IPfile);
fileReader.read(ips);
fileReader.close();
String strip=new String(ips);
StringTokenizer getIP=new StringTokenizer(strip,System.getProperty("line.separator"));
for(;;){
if(getIP.hasMoreTokens()){
checkIP[i]=getIP.nextToken();
System.out.println(checkIP[i]);
i++;
}
else{break;}
}
IPnum=i;
}
public static void disconnect(webClient c){
try {
//c.stop();
c.socket.close();
c.socket=null;
c=null; } catch (IOException e) {
e.printStackTrace();
}
//
}
class webClient extends Thread{
boolean check=true;
boolean send=false;
Socket socket;
BufferedReader inFromClient=null;
DataOutputStream outToClient=null;
String fileName;
String requestMessageLine;
StringTokenizer tokenizedLine=null;
FileInputStream inFile=null;
byte[] fileInBytes=null;
int numOfBytes=0;
File afile=new File(url+"log.html");
byte[] b;
public webClient(Socket s) throws IOException{
FileOutputStream out=new FileOutputStream(afile,true);
StringBuffer str=new StringBuffer();
SimpleDateFormat formatter=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String time=formatter.format(new Date());
socket=s;
str.append(time+" Client_IP:"+socket.getInetAddress().toString()+
" Client_Port:"+socket.getPort()+"<br>"+
System.getProperty("line.separator")
);
b=(new String(str)).getBytes();
System.err.println(new String(str));
out.write(b);
out.close();
inFromClient=new BufferedReader(new
InputStreamReader(socket.getInputStream()));
outToClient=new DataOutputStream(socket.getOutputStream());
if(!checkIP(socket)){
String strWait="<html>" +
"<title>等待验证</title>" +
"<body>正在等待管理员验证您的IP是否合法,请稍候......<br><br>" +
"(如果页面没有自动跳转,请每5秒钟刷新一次," +
"以判断管理员是否已经允许您进入)</body>" +
"</html>";
byte[] waiting=strWait.getBytes();
outToClient.writeBytes("HTTP/1.1 200 Document Follows\r\n");
outToClient.writeBytes("Content-Type: text/html\r\n");
outToClient.writeBytes("Content-Length: "+waiting.length+"\r\n");
outToClient.writeBytes("\r\n");
outToClient.write(waiting,0,waiting.length);
if(!admin()){
return;
}
WebServer.IPadmin=false;
}
this.start(); }
public void receive() throws IOException{
while(socket!=null){
requestMessageLine=inFromClient.readLine();
if(requestMessageLine.length()==0){break;}
System.out.println(requestMessageLine);
tokenizedLine=new StringTokenizer(requestMessageLine);
if(tokenizedLine.hasMoreTokens()){
String strhead=tokenizedLine.nextToken();
if(strhead.equals("GET")){
send=true;
fileName=tokenizedLine.nextToken();
if(fileName.equals("/")){
fileName="index.html";
}
else if(fileName.startsWith("/")){
fileName=fileName.substring(1);
fileName=fileName.replace("%5C", "/");
fileName=fileName.replace("%20", " ");
//如果是文件 ,不要check
check=false;
}
}//endnexttoken
if(check){
if(strhead.equals("User-Agent:")){
if(requestMessageLine.contains("Firefox/3")){
System.err.println("true");
}
else{
System.err.println("false");
fileName="ERROR.html";
send=true;
}
}
}
//....
}//endhastoken
}//endwhile
if(send){
readFile();
send(fileInBytes, numOfBytes);
} }
public void send(byte[] fileInBytes,int numOfBytes) throws IOException{
outToClient.writeBytes("HTTP/1.1 200 Document Follows\r\n"); if(fileName.endsWith(".jpg")){
outToClient.writeBytes("Content-Type: image/jpg\r\n");
}
else if(fileName.endsWith(".gif")){
outToClient.writeBytes("Content-Type: image/gif\r\n");
}
else if(fileName.endsWith(".wmv")){
outToClient.writeBytes("Content-Type: video/x-ms-wmv\r\n");
}
else if(fileName.endsWith(".avi")){
outToClient.writeBytes("Content-Type: video/avi\r\n");
}
else if(fileName.endsWith(".html")||fileName.endsWith(".htm")){
outToClient.writeBytes("Content-Type: text/html\r\n");
}
outToClient.writeBytes("Content-Length: "+numOfBytes+"\r\n"); outToClient.writeBytes("\r\n");
outToClient.write(fileInBytes,0,numOfBytes);
}
//得到文件
public void readFile() throws IOException{
File file=new File(url+fileName);
b=(" Client_Request:"+fileName+"<br>"+
System.getProperty("line.separator")).getBytes();
FileOutputStream out=new FileOutputStream(afile,true);
out.write(b);
out.close();
numOfBytes=(int)file.length();
inFile=new FileInputStream(url+fileName);
fileInBytes=new byte[numOfBytes];
inFile.read(fileInBytes);
inFile.close(); }
public boolean checkIP(Socket skt){
for(int i=0;i<WebServer.IPnum;i++){
if(skt.getInetAddress().toString().equals(checkIP[i])){
return true;
}
}
return false;
}
public boolean admin() throws IOException{
WebServer.tfNewIP.setText("IP:"+socket.getInetAddress().toString()+
" PORT:"+socket.getPort());
WebServer.btAllow.setEnabled(true);
WebServer.btRepel.setEnabled(true);
while(!click){}
click=false;
if(WebServer.IPadmin){
File IPFile=new File(url+"checkIP.txt");
FileOutputStream appIP=new FileOutputStream(IPFile,true);
byte[] ips=(socket.getInetAddress().toString()+
System.getProperty("line.separator")).getBytes();
appIP.write(ips);
appIP.close();
//WebServer.readIP();
WebServer.checkIP[IPnum]=socket.getInetAddress().toString();
WebServer.IPnum++;
return true;
}
else{
WebServer.disconnect(this);
return false;
}
}
public void run(){
try {
receive();
} catch (IOException e) {
}
WebServer.disconnect(this);
}
}}
② 什么是java serverlet
都是来用java语言编写的小程序。自
servlet可以被认为是服务器端的applet。servlet被Web服务器加载和执行,就如同applet被浏览器加载和执行一样。
beans可以被其他的java程序调用完成特定功能或者信息存储。
③ 学java能用sql server吗它跟java联系紧密吗
java是编程语言,可以调用数据库。
sql server是数据库。和java不沾边的。
数据库应该都了解oracle ,sqlServer,mySql,db2等
其中 oracle 和 mysql 在中国用得相对较多
因为mysql 不要钱。oracle 和 sqlServer 都是要钱的。。所以大多数会选oracle虽然比sqlServer贵。。但用钱了 当然用更好的 也不在乎那点了
学习 阶段 sqlServer 和 mysql 应该会用得比较多。
反正都得学,都会用到 。。就这样
④ 怎么在SystemServer.java里面去掉一些server
右键击点项目名,弹出菜单选择Properties,弹出窗口左侧选择"Java Build Path",右侧选择"Libraries"标签页,
添加J2EE5 libraries:点击"Add Library.."按钮,弹出窗口选择"MyEclipse Libraries",点击"next"按钮,选择J2EE5 libraries,点"finish"按钮。
添加JRE System Library:点击"Add Library.."按钮,弹出窗口选择"JRE System Library",点击"next"按钮,选择第一个为默认的JRE,点"finish"按钮。最后点击"ok",添加完成。
⑤ 用java编写Client和Server程序,实现Client和Server的数据通信。
服务端代码:
importjava.io.IOException;
importjava.io.InputStream;
importjava.net.InetAddress;
importjava.net.ServerSocket;
importjava.net.Socket;
importjava.net.UnknownHostException;
publicclassServer{
publicstaticvoidmain(String[]args)throwsUnknownHostException,IOException{
ServerSocketserver=newServerSocket(2408,5,InetAddress.getByName("localhost"));
while(true){
//等待客户端的连接
SocketclientSocket=server.accept();
//为每个连接的客户端分配一个线程,与客户端通信
newThread(newClientThread(clientSocket)).start();
}
}
}
{
privateSocketclientSocket;
publicClientThread(Socketsocket){
this.clientSocket=socket;
}
@Override
publicvoidrun(){
try{
InputStreaminput=clientSocket.getInputStream();
byte[]buffer=newbyte[1024];
booleanexit=false;
while(!exit){
intlen=input.read(buffer);
Stringmessage=newString(buffer,0,len);
if("bye".equals(message)){
exit=true;
}
System.out.println(clientSocket.getRemoteSocketAddress()+":"+message);
}
clientSocket.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
客户端代码:
importjava.io.IOException;
importjava.io.OutputStream;
importjava.net.InetAddress;
importjava.net.Socket;
importjava.net.UnknownHostException;
importjava.util.Scanner;
publicclassClient{
publicstaticvoidmain(String[]args)throwsUnknownHostException,IOException{
Scannerscanner=newScanner(System.in);
Socketsocket=newSocket(InetAddress.getByName("localhost"),2408);
OutputStreamoutput=socket.getOutputStream();
booleanexit=false;
while(!exit){
Stringmessage=scanner.nextLine();
if("bye".equals(message)){
exit=true;
}
byte[]data=message.getBytes();
output.write(data);
output.flush();
}
socket.close();
}
}
⑥ 编写代码,使用java ServerSocket创建服务器端ServerSocket的过程。
服务器端代码:
importjava.io.IOException;
importjava.io.InputStream;
importjava.net.ServerSocket;
importjava.net.Socket;
publicclassServer{
publicvoidserver(){
try{
ServerSocketserverSocket=newServerSocket(8888);//建立服务器端的套接字,并监听8888端口
Socketsocket=serverSocket.accept();//如果有请求到达,则接受请求,并建立一个新的套接字
InputStreamis=socket.getInputStream();//获取此套接字上的输入流,用于接收消息
//接下来就是获取套接字里的字节流,并转化为字符串
byte[]bytes=newbyte[1024];
intcount;
StringBuildersb=newStringBuilder();
while((count=is.read(bytes))!=-1){
sb.append(newString(bytes,0,count));
}
is.close();
System.out.println(sb.toString());
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
Servers=newServer();
s.server();
}
}
另附客户端:
importjava.io.IOException;
importjava.io.OutputStream;
importjava.net.InetSocketAddress;
importjava.net.Socket;
publicclassClient{
publicvoidclient(){
try{
Socketsocket=newSocket();//建立套接字
socket.connect(newInetSocketAddress("127.0.0.1",8888));//连接到指定IP地址的主机,并指定端口号接收消息
OutputStreamos=socket.getOutputStream();//获取此连接上的输出流,用于发送数据
os.write(newString("Hello,world!").getBytes());//将字符串转化为字节数组写入输出流
os.flush();//刷新此输出流,将字节流写入它们预期的目标
os.close();//关闭连接,否则会报连接重置异常
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
Clientc=newClient();
c.client();
}
}
⑦ java:如何让server.java在学校服务器上运行
学校的服务器=====> 它也是台电脑!!!!!!
和你的电脑没什么区别,你本机怎么做,就在服务器上怎么做,只要你能有权限去操作服务器。
⑧ 怎样用java写server端
1.了解一下什么是HTTP协议,什么是GET请求,什么是POST请求。
学会使用一些工具查看HTTP请求:
Firefox的firebug
Chrome的F12
使用curl命令发请求和调试
2.Java相关
学习一下Java的ServletAPI
war工程的结构,比如WEB-INF是干什么用的,如何写web.xml
如何在tomcat上部署war
如何使用Maven或eclipse管理war工程
⑨ 命令java -server什么意思
JVM的参数配置
分别是 服务器模式 和客户端模式
因为JVM里面很多机制,在这两种模式下是不同的,
比如垃圾回收机制,客户端模式下,要求的是用户体验流程,无明显滞留感(就是没有卡的现象)
而服务端,要求的是吞吐量,就是单位时间内执行的代码要求越多越好,
来个例子:
执行1万次代码,一种垃圾回收策略是每隔1000行停顿一次用来做垃圾回收,回收时间10毫秒,那么总共耗停顿时间是100毫秒(10*10)
而另一种是,每隔2000行停顿一次用作垃圾回收,回收时间15毫秒,总共停顿时间耗时是75毫秒(15*5)
这个例子中,后一种方案的吞吐量高,而前一种法案的停顿时间短。
当然,server 和 client 还有其他地方的区别,比如,代码优化策略,等等
⑩ 请问下Java中什么Dao层,Server层.....,有大神能给我讲一下互相之间的联系还有作用吗,详细点吧,我新手
bean层:封装所有的类;
层:对数据库操作;
service层:业务处理并调用层方法;
action层:与页面交互并调用service层方法