//
服务器验证提交的表单程序
package cn.itcast.day_24;
import
java.io.ByteArrayOutputStream;
import
java.io.FileInputStream;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.OutputStream;
import
java.io.PrintStream;
import
java.io.UnsupportedEncodingException;
import
java.net.ServerSocket;
import
java.net.Socket;
import
java.net.URLDecoder;
public class Server {
public static void main(String[] args) throws Exception {
System.out.println("服务已开启,监听9999端口");
//创建
服务器 ServerSocket serversocket = new ServerSocket(9999);
while(true){
//等待客服端的请求
final Socket socket = serversocket.accept();
new Thread(){
@Override
public void run(){
try {
//创建输入流 输出流
InputStream in = socket.getInputStream();
PrintStream ps = new PrintStream(socket.getOutputStream());
//OutputStream out = socket.getOutputStream();
//读取从客服端发来的消息
byte[] buffer = new byte[1024 * 1024];
int len = in.read(buffer);
String request = new String(buffer, 0, len);
System.out.println(request);
//从客服端发出的数据中查看到,关键的内容数据都是放在最后,并且换了两次行,从而有了截取内容的方法
int index = request.indexOf("\r\n\r\n"); //拿到换两次行的索引
String content = request.substring(index + 4); //把索引加4就得到了内容数据
//使用getParameter方法获取键的值
String username = getParameter(content,"username");
String pass
word = getParameter(content,"pass
word");
String gender = getParameter(content,"gender");
String
interest = getParameter(content,"interest");
String city = getParameter(content,"city");
String photo = getParameter(content,"photo");
System.out.println("username=" + username); //打印出读取到的内容
System.out.println("pass
word=" + pass
word);
System.out.println("gender=" + gender);
System.out.println("interest=" + interest);
System.out.println("city=" + city);
System.out.println("photo=" + photo);
String mes = "
注册成功"; //开始时默认设置注册成功
if("".equals(username) || username == null) //判断用户名 密码等是否为空
mes = "用户名必须填写";
else if("".equals(pass
word) || pass
word == null)
mes = "密码必须填写";
else if("".equals(gender) || gender == null)
mes = "性别必须选择";
else if("".equals(interest) || interest == null)
mes = "兴趣必须选择";
else if("".equals(city) || city == null)
mes = "城市必须选择";
else if("".equals(photo) || photo == null)
mes = "头像必须上传";
//以写代码的方式,判断是否成功
//out.write(("<font size='7' color='" + ("注册成功".equals(mes) ? "green" : "red")+ "'>").getBytes());
/*ps.println("<html>");
ps.println("<head>");
ps.println("<title>" + "注册结果"+ "</title>");
ps.println("</head>");
ps.println("<body>");
ps.println(("<font size='7' color='" + ("注册成功".equals(mes) ? "green" : "red")+ "'>") + mes + "</font>");
ps.println("</body>");
ps.println("</html>");*/
//新建两个文件,判断是否注册成功,读取文件的内容,暂时存储到ByteArrayOutputStream中
FileInputStream fis = new FileInputStream("注册成功".equals(mes) ? "page/success.html" : "page/fale.html");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while((len = fis.read(buffer)) != -1)
baos.write(buffer, 0, len);
fis.close();
baos.close();
//ByteArrayOutputStream的toByteArray方法创建了一个新的数组,把新的数组传到string中,创建了一个新的字符串
String response = new String(baos.toByteArray());
//使用新的字符串替换掉文件中的"变量"
response = response.replace("变量", mes);
//System.out.println(response);
//打印出
服务器返回的注册成功或失败的数据
ps.println(response + "<br><br><br>");
//打印出用户注册的信息
ps.println("username=" + username + "<br>");
ps.println("pass
word=" + pass
word + "<br>");
ps.println("gender=" + gender + "<br>");
ps.println("interest=" + interest + "<br>");
ps.println("city=" + city + "<br>");
ps.println("photo=" + photo + "<br>");
//关闭本线程的流
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
}
//获取键值的方法,并且对值进行解码
public static String getParameter(String content, String key) throws UnsupportedEncodingException{
String[] entryArr = content.split(";");
for (String contents : entryArr) {
String[] arr = contents.split("=");
if(arr[0].equals(key))
return arr.length == 2 ? URLDecoder.decode(arr[1], "GBK") : "";
}
return null;
}
}