客户端:
1、登录时检查网络状态
2、登录加载进度条
3、登录服务器端进行验证,如果用户名和密码存在且正确,则登录,否则失败
4、注册时将用户信息保存到服务器端数据库中(MySQL)
5、记住密码功能(还不完善,只是测试)
6、对密码信息进行md5()单向加密
服务器端:
1、接收客户端发来的登录请求,如果用户名和密码存在于MySQL数据库中则返回客户端一个响应信息"success"
2、接收客户端发来的注册请求,将用户名和密码存放到MySQL数据库中
不过目前还存在很多问题,以后有时间继续更新
下面是效果图:
完整代码下载:http://115.com/file/bexv3qlf#LoginDemo.zip
备份地址:
http://download.csdn.net/detail/az44yao/4871847
客户端代码:
登录代码:这里是使用HttpClient来进行与服务器端的交互的,密码加密部分只是简单的用了下md5(),如果正式的项目中可以选用非对称加密算法会更加安全
package com.loulijun.logindemo; import java.security.MessageDigest; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; 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.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.net.ConnectivityManager; import android.net.NetworkInfo.State; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.Settings; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.Toast; public class LoginDemoActivity extends Activity { /** Called when the activity is first created. */ private Button loginBtn; private Button registerBtn; private EditText inputUsername; private EditText inputPassword; private CheckBox saveInfoItem; private ProgressDialog mDialog; private String responseMsg = ""; private static final int REQUEST_TIMEOUT = 5*1000;//设置请求超时10秒钟 private static final int SO_TIMEOUT = 10*1000; //设置等待数据超时时间10秒钟 private static final int LOGIN_OK = 1; private SharedPreferences sp; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); loginBtn = (Button)findViewById(R.id.login_btn_login); registerBtn = (Button)findViewById(R.id.login_btn_zhuce); inputUsername = (EditText)findViewById(R.id.login_edit_account); inputPassword = (EditText)findViewById(R.id.login_edit_pwd); saveInfoItem = (CheckBox)findViewById(R.id.login_cb_savepwd); sp = getSharedPreferences("userdata",0); //初始化数据 LoadUserdata(); //检查网络 CheckNetworkState(); //监听记住密码选项 saveInfoItem.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub //载入用户信息 Editor editor = sp.edit(); if(saveInfoItem.isChecked()) { //获取已经存在的用户名和密码 String realUsername = sp.getString("username", ""); String realPassword = sp.getString("password", ""); editor.putBoolean("checkstatus", true); editor.commit(); if((!realUsername.equals(""))&&!(realUsername==null)||(!realPassword.equals(""))||!(realPassword==null)) { //清空输入框 inputUsername.setText(""); inputPassword.setText(""); //设置已有值 inputUsername.setText(realUsername); inputPassword.setText(realPassword); } }else { editor.putBoolean("checkstatus", false); editor.commit(); //清空输入框 inputUsername.setText(""); inputPassword.setText(""); } } }); //登录 loginBtn.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { mDialog = new ProgressDialog(LoginDemoActivity.this); mDialog.setTitle("登陆"); mDialog.setMessage("正在登陆服务器,请稍后..."); mDialog.show(); Thread loginThread = new Thread(new LoginThread()); loginThread.start(); } }); registerBtn.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(); intent.setClass(LoginDemoActivity.this, RegisterActivity.class); startActivity(intent); } }); } private boolean loginServer(String username, String password) { boolean loginValidate = false; //使用apache HTTP客户端实现 String urlStr = "http://192.168.1.101:8080/LoginServlet/LoginServlet"; HttpPost request = new HttpPost(urlStr); //如果传递参数多的话,可以丢传递的参数进行封装 List<NameValuePair> params = new ArrayList<NameValuePair>(); //添加用户名和密码 params.add(new BasicNameValuePair("username",username)); params.add(new BasicNameValuePair("password",password)); try { //设置请求参数项 request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); HttpClient client = getHttpClient(); //执行请求返回相应 HttpResponse response = client.execute(request); //判断是否请求成功 if(response.getStatusLine().getStatusCode()==200) { loginValidate = true; //获得响应信息 responseMsg = EntityUtils.toString(response.getEntity()); } }catch(Exception e) { e.printStackTrace(); } return loginValidate; } //初始化HttpClient,并设置超时 public HttpClient getHttpClient() { BasicHttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, REQUEST_TIMEOUT); HttpConnectionParams.setSoTimeout(httpParams, SO_TIMEOUT); HttpClient client = new DefaultHttpClient(httpParams); return client; } //判断是否记住密码,默认记住 private boolean isRemembered() { try { if (saveInfoItem.isChecked()) { return true; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } //初始化用户数据 private void LoadUserdata() { boolean checkstatus = sp.getBoolean("checkstatus", false); if(checkstatus) { saveInfoItem.setChecked(true); //载入用户信息 //获取已经存在的用户名和密码 String realUsername = sp.getString("username", ""); String realPassword = sp.getString("password", ""); if((!realUsername.equals(""))&&!(realUsername==null)||(!realPassword.equals(""))||!(realPassword==null)) { inputUsername.setText(""); inputPassword.setText(""); inputUsername.setText(realUsername); inputPassword.setText(realPassword); } }else { saveInfoItem.setChecked(false); inputUsername.setText(""); inputPassword.setText(""); } } //检查网络状态 public void CheckNetworkState() { boolean flag = false; ConnectivityManager manager = (ConnectivityManager)getSystemService( Context.CONNECTIVITY_SERVICE); State mobile = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState(); State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState(); //如果3G、wifi、2G等网络状态是连接的,则退出,否则显示提示信息进入网络设置界面 if(mobile == State.CONNECTED||mobile==State.CONNECTING) return; if(wifi == State.CONNECTED||wifi==State.CONNECTING) return; showTips(); } private void showTips() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(android.R.drawable.ic_dialog_alert); builder.setTitle("没有可用网络"); builder.setMessage("当前网络不可用,是否设置网络?"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 如果没有网络连接,则进入网络设置界面 startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS)); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); LoginDemoActivity.this.finish(); } }); builder.create(); builder.show(); } //Handler Handler handler = new Handler() { public void handleMessage(Message msg) { switch(msg.what) { case 0: mDialog.cancel(); Toast.makeText(getApplicationContext(), "登录成功!", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(); intent.setClass(LoginDemoActivity.this, MainActivity.class); startActivity(intent); finish(); break; case 1: mDialog.cancel(); Toast.makeText(getApplicationContext(), "密码错误", Toast.LENGTH_SHORT).show(); break; case 2: mDialog.cancel(); Toast.makeText(getApplicationContext(), "URL验证失败", Toast.LENGTH_SHORT).show(); break; } } }; //LoginThread线程类 class LoginThread implements Runnable { @Override public void run() { String username = inputUsername.getText().toString(); String password = inputPassword.getText().toString(); boolean checkstatus = sp.getBoolean("checkstatus", false); if(checkstatus) { //获取已经存在的用户名和密码 String realUsername = sp.getString("username", ""); String realPassword = sp.getString("password", ""); if((!realUsername.equals(""))&&!(realUsername==null)||(!realPassword.equals(""))||!(realPassword==null)) { if(username.equals(realUsername)&&password.equals(realPassword)) { username = inputUsername.getText().toString(); password = inputPassword.getText().toString(); } } }else { password = md5(password); } System.out.println("username="+username+":password="+password); //URL合法,但是这一步并不验证密码是否正确 boolean loginValidate = loginServer(username, password); System.out.println("----------------------------bool is :"+loginValidate+"----------response:"+responseMsg); Message msg = handler.obtainMessage(); if(loginValidate) { if(responseMsg.equals("success")) { msg.what = 0; handler.sendMessage(msg); }else { msg.what = 1; handler.sendMessage(msg); } }else { msg.what = 2; handler.sendMessage(msg); } } } /** * MD5单向加密,32位,用于加密密码,因为明文密码在信道中传输不安全,明文保存在本地也不安全 * @param str * @return */ public static String md5(String str) { MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); }catch(Exception e) { e.printStackTrace(); return ""; } char[] charArray = str.toCharArray(); byte[] byteArray = new byte[charArray.length]; for(int i = 0; i < charArray.length; i++) { byteArray[i] = (byte)charArray[i]; } byte[] md5Bytes = md5.digest(byteArray); StringBuffer hexValue = new StringBuffer(); for( int i = 0; i < md5Bytes.length; i++) { int val = ((int)md5Bytes[i])&0xff; if(val < 16) { hexValue.append("0"); } hexValue.append(Integer.toHexString(val)); } return hexValue.toString(); } }
注册代码
package com.loulijun.logindemo; import java.security.MessageDigest; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; 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.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import com.loulijun.logindemo.LoginDemoActivity.LoginThread; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class RegisterActivity extends Activity { private EditText newUser,newPassword,confirmPassword; private Button registerBtn, clearBtn; private ProgressDialog mDialog; private String responseMsg = ""; private static final int REQUEST_TIMEOUT = 5*1000;//设置请求超时10秒钟 private static final int SO_TIMEOUT = 10*1000; //设置等待数据超时时间10秒钟 private static final int LOGIN_OK = 1; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.register); newUser = (EditText)findViewById(R.id.newUser_input); newPassword = (EditText)findViewById(R.id.newPassword_input); confirmPassword = (EditText)findViewById(R.id.Confirm_input); registerBtn = (Button)findViewById(R.id.registerbtn); clearBtn = (Button)findViewById(R.id.clearbtn); registerBtn.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { String newusername = newUser.getText().toString(); String newpassword = md5(newPassword.getText().toString()); String confirmpwd = md5(confirmPassword.getText().toString()); if(newpassword.equals(confirmpwd)) { SharedPreferences sp = getSharedPreferences("userdata",0); Editor editor = sp.edit(); editor.putString("username", newusername); editor.putString("password", newpassword); editor.commit(); mDialog = new ProgressDialog(RegisterActivity.this); mDialog.setTitle("登陆"); mDialog.setMessage("正在登陆服务器,请稍后..."); mDialog.show(); Thread loginThread = new Thread(new RegisterThread()); loginThread.start(); }else { Toast.makeText(getApplicationContext(), "您两次输入的密码不一致!", Toast.LENGTH_SHORT).show(); } } }); clearBtn.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { newUser.setText(""); newPassword.setText(""); confirmPassword.setText(""); } }); } //初始化HttpClient,并设置超时 public HttpClient getHttpClient() { BasicHttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, REQUEST_TIMEOUT); HttpConnectionParams.setSoTimeout(httpParams, SO_TIMEOUT); HttpClient client = new DefaultHttpClient(httpParams); return client; } private boolean registerServer(String username, String password) { boolean loginValidate = false; //使用apache HTTP客户端实现 String urlStr = "http://192.168.1.101:8080/LoginServlet/RegisterServlet"; HttpPost request = new HttpPost(urlStr); //如果传递参数多的话,可以丢传递的参数进行封装 List<NameValuePair> params = new ArrayList<NameValuePair>(); //添加用户名和密码 params.add(new BasicNameValuePair("username",username)); params.add(new BasicNameValuePair("password",password)); try { //设置请求参数项 request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); HttpClient client = getHttpClient(); //执行请求返回相应 HttpResponse response = client.execute(request); //判断是否请求成功 if(response.getStatusLine().getStatusCode()==200) { loginValidate = true; //获得响应信息 responseMsg = EntityUtils.toString(response.getEntity()); } }catch(Exception e) { e.printStackTrace(); } return loginValidate; } //Handler Handler handler = new Handler() { public void handleMessage(Message msg) { switch(msg.what) { case 0: mDialog.cancel(); showDialog("注册成功!"); break; case 1: mDialog.cancel(); Toast.makeText(getApplicationContext(), "注册失败", Toast.LENGTH_SHORT).show(); break; case 2: mDialog.cancel(); Toast.makeText(getApplicationContext(), "URL验证失败", Toast.LENGTH_SHORT).show(); break; } } }; //RegisterThread线程类 class RegisterThread implements Runnable { @Override public void run() { String username = newUser.getText().toString(); String password = md5(newPassword.getText().toString()); //URL合法,但是这一步并不验证密码是否正确 boolean registerValidate = registerServer(username, password); //System.out.println("----------------------------bool is :"+registerValidate+"----------response:"+responseMsg); Message msg = handler.obtainMessage(); if(registerValidate) { if(responseMsg.equals("success")) { msg.what = 0; handler.sendMessage(msg); }else { msg.what = 1; handler.sendMessage(msg); } }else { msg.what = 2; handler.sendMessage(msg); } } } private void showDialog(String str) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("注册"); builder.setMessage(str); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); Intent intent = new Intent(); intent.setClass(RegisterActivity.this, LoginDemoActivity.class); startActivity(intent); finish(); } }); AlertDialog dialog = builder.create(); dialog.show(); } /** * MD5单向加密,32位,用于加密密码,因为明文密码在信道中传输不安全,明文保存在本地也不安全 * @param str * @return */ public static String md5(String str) { MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); }catch(Exception e) { e.printStackTrace(); return ""; } char[] charArray = str.toCharArray(); byte[] byteArray = new byte[charArray.length]; for(int i = 0; i < charArray.length; i++) { byteArray[i] = (byte)charArray[i]; } byte[] md5Bytes = md5.digest(byteArray); StringBuffer hexValue = new StringBuffer(); for( int i = 0; i < md5Bytes.length; i++) { int val = ((int)md5Bytes[i])&0xff; if(val < 16) { hexValue.append("0"); } hexValue.append(Integer.toHexString(val)); } return hexValue.toString(); } }
主界面的布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/loginRoot" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/linear1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/default_bg" android:orientation="vertical" > <RelativeLayout android:id="@+id/relativelayout2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="15.0px" android:layout_marginRight="15.0px" android:layout_marginTop="62.0px" android:background="@drawable/login_back" android:paddingBottom="10.0px" android:paddingTop="21.0px" > <ImageView android:id="@+id/faceImg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/login_head" /> <EditText android:id="@+id/login_edit_account" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginBottom="5.0dip" android:layout_marginLeft="5.0dip" android:layout_marginTop="5.0dip" android:layout_marginRight="5.0dip" android:layout_toRightOf="@+id/faceImg" android:background="@drawable/edit_login" android:hint="@string/username_hint" android:singleLine="true" android:paddingLeft="45.0sp" android:saveEnabled="true" android:textColor="#ff3f3f3f" /> <TextView android:id="@+id/textview01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/login_edit_account" android:layout_alignLeft="@+id/login_edit_account" android:layout_alignTop="@+id/login_edit_account" android:layout_marginRight="15.0sp" android:gravity="center_vertical" android:paddingLeft="7.0sp" android:text="@string/username_input" android:textColor="#ff3f3f3f" android:textSize="16.0dip" /> <ImageButton android:id="@+id/usernamespinner" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/login_edit_account" android:layout_alignRight="@+id/login_edit_account" android:layout_alignTop="@+id/login_edit_account" android:layout_marginRight="1.0dip" android:background="@drawable/more_select" /> <EditText android:id="@+id/login_edit_pwd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/login_edit_account" android:layout_alignRight="@+id/login_edit_account" android:layout_below="@+id/login_edit_account" android:layout_marginRight="1.0dip" android:background="@drawable/edit_login" android:password="true" android:singleLine="true" android:paddingLeft="45.0sp" android:saveEnabled="true" android:hint="@string/password_hint" /> <TextView android:id="@+id/textview02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/login_edit_pwd" android:layout_alignRight="@+id/textview01" android:layout_alignTop="@+id/login_edit_pwd" android:gravity="center_vertical" android:paddingLeft="7.0sp" android:text="@string/password_input" android:textColor="#ff3f3f3f" android:textSize="16.0dip" /> <CheckBox android:id="@+id/login_cb_savepwd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/login_btn_login" android:button="@drawable/btn_check" android:paddingLeft="39.0px" android:text="@string/opt_remember" android:textColor="#ff222222" android:textSize="16.0sp" /> <Button android:id="@+id/login_btn_login" android:layout_width="90.0dp" android:layout_height="wrap_content" android:layout_below="@+id/textview02" android:layout_toLeftOf="@+id/login_btn_zhuce" android:layout_marginTop="7.0px" android:text="@string/login" /> <Button android:id="@+id/login_btn_zhuce" android:layout_width="90.0dp" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_below="@+id/textview02" android:layout_marginTop="7.0px" android:text="@string/zhuce" /> </RelativeLayout> </LinearLayout> </LinearLayout>
服务器端:
服务器端采用的是Servlet,比较简单
需要创建一个表,MySQL的,这部分还没有放到代码中处理,数据库名:monitordb,表:username varchar(30),password(50)。注意配置一下MySQL的驱动
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.loulijun.login.LoginServlet</servlet-class> </servlet> <!-- Define the Manager Servlet Mapping --> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>RegisterServlet</servlet-name> <servlet-class>com.loulijun.login.RegisterServlet</servlet-class> </servlet> <!-- Define the Manager Servlet Mapping --> <servlet-mapping> <servlet-name>RegisterServlet</servlet-name> <url-pattern>/RegisterServlet</url-pattern> </servlet-mapping> </web-app>
LoginServlet.java:用于登录信息的Servlet
package com.loulijun.login; import java.io.IOException; import java.io.PrintWriter; import java.sql.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { Connection conn; PreparedStatement sql; ResultSet rs; try { Class.forName("com.mysql.jdbc.Driver"); } catch (Exception e) { System.out.print(e); } String username = request.getParameter("username"); String password = request.getParameter("password"); response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String msg = null; String uri = "jdbc:mysql://127.0.0.1/monitordb"; String selectsql = "select username,password from user where username=? and password=?"; try { conn = DriverManager.getConnection(uri, "root", "loulijun"); sql = conn.prepareStatement(selectsql); if(username!=null&&password!=null) { sql.setString(1,username); sql.setString(2,password); rs = sql.executeQuery(); boolean bool = rs.next(); if(bool == true) { msg = "success"; }else { msg = "failed"; } }else { msg = "failed"; } conn.close(); } catch (SQLException e) { System.out.print(e); } out.print(msg); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException { doGet(request, response); } }
RegisterServlet.java:用于处理注册信息的Servlet
package com.loulijun.login; import java.io.IOException; import java.io.PrintWriter; import java.sql.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class RegisterServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { Connection conn; PreparedStatement sql; try { Class.forName("com.mysql.jdbc.Driver"); } catch (Exception e) { System.out.print(e); } String username = request.getParameter("username"); String password = request.getParameter("password"); response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String msg = null; if(username!=null&&password!=null) { msg = "success"; try { String uri = "jdbc:mysql://127.0.0.1/monitordb"; String insertSql = "insert into user values(?,?)"; conn = DriverManager.getConnection(uri, "root", "loulijun"); sql = conn.prepareStatement(insertSql); sql.setString(1,username); sql.setString(2,password); int status = sql.executeUpdate(); if(status!=0) { System.out.print("添加数据成功!"); }else { System.out.print("添加数据失败"); } conn.close(); } catch (SQLException e) { System.out.print(e); } }else { msg = "failed"; } out.print(msg); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException { doGet(request, response); } }