综合C/S模式
客户端通过向服务器发送注册或者登陆请求,服务器查询数据库,向客户端返回数据!
代码示例
创建一个servlet
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import lingzhuo20150813.d1.SQLManager;
import net.sf.json.JSONObject;
/**
* Servlet implementation class MyServlet
*/
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MyServlet() {
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String info=request.getParameter("info");
JSONObject obj = JSONObject.fromObject(info);
String type=obj.getString("type");
JSONObject data=obj.getJSONObject("data");
String username=data.getString("username");
String password=data.getString("password");
Connection connection = SQLManager.newInstance().getConnection();
JSONObject returnInfo=new JSONObject();
try {
if(type.equals("register")){
PreparedStatement statement = connection
.prepareStatement("select * from register where user_Name=?");
statement.setString(1, username);
ResultSet set = statement.executeQuery();
set.last();
int num = set.getRow();
if(num==1){
returnInfo.put("code", 0);
returnInfo.put("message", "对不起,该用户名已被注册!");
}else{
statement.execute(
"insert into register(user_name,password) values('" + username + "','" + password + "')");
returnInfo.put("code", 1);
returnInfo.put("message", "注册成功!");
}
}else if(type.equals("login")){
PreparedStatement statement = connection
.prepareStatement("select * from register where user_Name=? and password=?");
statement.setString(1, username);
statement.setString(2, password);
ResultSet set = statement.executeQuery();
set.last();
int num = set.getRow();
if (num == 1) {
returnInfo.put("code", 1);
returnInfo.put("message", "登录成功!");
} else {
returnInfo.put("code", 0);
returnInfo.put("message", "对不起,您输入的用户名或密码错误");
}
}
} catch (SQLException e) {
e.printStackTrace();
}
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.getWriter().append(returnInfo.toString());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
创建连接服务器的httpclient
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import net.sf.json.JSONObject;
public class HttpClientDoPost {
private HttpResponse response;
private int code;
/**
* 向服务器发送请求
* @param type 请求类型
* @param username 用户名
* @param password 密码
*/
public HttpClientDoPost(String type, String username, String password) {
HttpClientBuilder builder = HttpClientBuilder.create();
builder.setConnectionTimeToLive(3000, TimeUnit.MILLISECONDS);
HttpClient client = builder.build();// 生成client
HttpPost post = new HttpPost("http://localhost:8080/MyTomcat/MyServlet");
JSONObject obj = new JSONObject();
obj.put("type", type);
JSONObject data = new JSONObject();
data.put("username", username);
data.put("password", password);
obj.put("data", data);
NameValuePair pair = new BasicNameValuePair("info", obj.toString());
ArrayList<NameValuePair> list = new ArrayList<>();
list.add(pair);
try {
post.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));
post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
response = client.execute(post);
code = response.getStatusLine().getStatusCode();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 得到返回信息
* @return 服务器返回的信息
*/
public String info() {
if (code == HttpURLConnection.HTTP_OK) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String s = br.readLine();
StringBuffer sb = new StringBuffer();
while(s!=null){
sb.append(s);
s=br.readLine();
}
return sb.toString();
} catch (UnsupportedOperationException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
return null;
}
}
创建数据库管理类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class SQLManager {
private Connection connection;
public Connection getConnection() {
return connection;
}
public void setConnection(Connection connection) {
this.connection = connection;
}
private static SQLManager manager;
public static synchronized SQLManager newInstance() {
if (manager == null) {
manager = new SQLManager();
}
return manager;
}
/**
* 连接数据库
*/
private SQLManager() {
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/class", "root", "123456");
if (!connection.isClosed()) {
Statement sql = connection.createStatement();
sql.execute(
"CREATE TABLE if not exists register (ID int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,user_Name varchar(30) NOT NULL,password varchar(30) not null)");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
创建注册界面
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import net.sf.json.JSONObject;
public class Register extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
JLabel jl_username;
JLabel jl_password;
JTextField jtf_username;
JPasswordField jtf_password;
JPanel jp1;
JPanel jp2;
JPanel jp3;
JButton jb;
Statement statement;
public Register() {
jl_username = new JLabel("请输入你要注册的用户名");
jl_password = new JLabel("请输入你要设置的密码");
jtf_username = new JTextField(10);
jtf_password = new JPasswordField(10);
jtf_password.setEchoChar('*');
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jp1.add(jl_username);
jp1.add(jtf_username);
jp2.add(jl_password);
jp2.add(jtf_password);
jb = new JButton("注册");
jp3.add(jb);
jb.addActionListener(this);
this.setSize(300, 200);
this.add(jp1, BorderLayout.NORTH);
this.add(jp2, BorderLayout.CENTER);
this.add(jp3, BorderLayout.SOUTH);
this.setTitle("用户注册");
this.setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
String type="register";
String username = jtf_username.getText();
String password = String.valueOf(jtf_password.getPassword());
HttpClientDoPost post= new HttpClientDoPost(type, username, password);
JSONObject reinfo= JSONObject.fromObject(post.info());
String message=reinfo.getString("message");
JOptionPane.showMessageDialog(this, message);
}
}
创建登陆界面
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import net.sf.json.JSONObject;
public class Login extends JFrame implements ActionListener, MouseListener {
/**
*
*/
private static final long serialVersionUID = 1L;
JLabel jl_username;
JLabel jl_password;
JLabel jl;
JTextField jtf_username;
JPasswordField jtf_password;
JPanel jp1;
JPanel jp2;
JPanel jp3;
JButton jb;
public static void main(String[] args) {
new Login();
}
public Login() {
jl_username = new JLabel("用户名");
jl_password = new JLabel("密码");
jl = new JLabel("注册");
jl.setForeground(Color.BLUE);
jl.addMouseListener(this);
jtf_username = new JTextField(15);
jtf_password = new JPasswordField(15);
jtf_password.setEchoChar('*');
jb = new JButton("登录");
jb.addActionListener(this);
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jp1.add(jl_username);
jp1.add(jtf_username);
jp2.add(jl_password);
jp2.add(jtf_password);
jp3.add(jl);
jp3.add(jb);
this.setSize(300, 200);
this.add(jp1, BorderLayout.NORTH);
this.add(jp2, BorderLayout.CENTER);
this.add(jp3, BorderLayout.SOUTH);
this.setTitle("用户登录");
this.setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
String type="login";
String username = jtf_username.getText();
String password = String.valueOf(jtf_password.getPassword());
HttpClientDoPost post= new HttpClientDoPost(type, username, password);
JSONObject reinfo= JSONObject.fromObject(post.info());
String message=reinfo.getString("message");
JOptionPane.showMessageDialog(this, message);
}
@Override
public void mouseClicked(MouseEvent e) {
new Register();
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
jl.setForeground(Color.GREEN);
}
@Override
public void mouseExited(MouseEvent e) {
jl.setForeground(Color.BLUE);
}
}
运行结果
注册:
登陆: