系统登录/注册模块(Android app)的开发
程序员文章站
2022-03-24 15:27:43
...
系统登录/注册模块(Android app)的开发
后台开发关键代码
private static final long serialVersionUID = 1L;
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/app?useUnicode" //地址
+ "=true&characterEncoding=utf-8&useSSL=false";
static final String USER_NAME = "root";
static final String PASSWORD = "123456";
private Connection conn;
private Statement stmt;
/**
* @throws SQLException
* @throws ClassNotFoundException
* @see HttpServlet#HttpServlet()
*/
public ResignerServlet() throws SQLException, ClassNotFoundException {
super();
Class.forName(JDBC_DRIVER);
// TODO Auto-generated constructor stub
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
// TODO Auto-generated method stub
//System.out.println("===========");
//String name = req.getParameter("name");
//System.out.println("name : " + name);
//PrintWriter out = resp.getWriter();
//String sendString;
//sendString="asdcfe"; //此服务器要返回的数据
//out.write(sendString);
//out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
我们创建这个类需要这样进行继承->extends HttpServlet
MD5加密
md5加密是不可逆的,我们在输入密码登录的时候,只需要再加密一次,进行比较即可
String src = password;
try {
// 加密对象,指定加密方式
MessageDigest md5 = MessageDigest.getInstance("md5");
// 准备要加密的数据
byte[] b = src.getBytes();
// 加密
byte[] digest = md5.digest(b);
// 十六进制的字符
char[] chars = new char[] { '0', '1', '2', '3', '4', '5',
'6', '7' , '8', '9', 'A', 'B', 'C', 'D', 'E','F' };
StringBuffer sb = new StringBuffer();
// 处理成十六进制的字符串(通常)
for (byte bb : digest) {
sb.append(chars[(bb >> 4) & 15]);
sb.append(chars[bb & 15]);
}
// 打印加密后的字符串
System.out.println(sb);
String tmp="insert into users(username,password) values('"+username+"','"+sb.toString()+"')";
stmt.executeUpdate(tmp);
System.out.println("用户名:"+username+"注册成功");
response.getWriter().print("ok");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
注意在进行比较的时候,需要转成字符出,我们在这里面变成了StringBuffer,所以我们采用一下方式转换位字符串。
sb.toString()
web.xml
<servlet-mapping>
<servlet-name>loginSer</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ResignerSer</servlet-name>
<servlet-class>action.ResignerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ResignerSer</servlet-name>
<url-pattern>/Resigner</url-pattern>
</servlet-mapping>
在这个里面进行注册
app连接后台代码
public void reg() {
String username = u1.getText().toString();
String password = p1.getText().toString();
// TODO Auto-generated method stub
String uriAPI = "http://192.168.43.139:8080/Back2/login?username="+username+"&password="+password;
//String uriAPI = getString(R.string.server);
// 将属性文件流装载到Properties对象中
System.out.println("url : " + uriAPI);
System.out.println("连接获取数据...");
/* 建立HTTP Get联机 */
HttpGet httpRequest = new HttpGet(uriAPI);
try {
/* 发到HTTP request */
HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
//System.out.println(httpResponse.getStatusLine().getStatusCode());
/* 若状态码为200 ok */
if (httpResponse.getStatusLine().getStatusCode() == 200) {
/* 取响应字符串 */
final String strResult = EntityUtils.toString(httpResponse
.getEntity());
//System.out.println(strResult);
/*try {
SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader reader = factory.newSAXParser().getXMLReader();
reader.setContentHandler(new ContentHandler());
reader.parse(new InputSource(new StringReader(strResult)));
}
catch (Exception e) {
e.printStackTrace();
}*/
System.out.println("成功获得数据 : " + strResult);
handler.post(new Runnable() {
@Override
public void run() {
if("ok".equals(strResult)){
Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
//finish();
Intent intent = new Intent(MainActivity.this,WelcomeActivity.class);
String username = u1.getText().toString();
intent.putExtra("username", username);
startActivity(intent);
} else {
Toast.makeText(MainActivity.this,strResult,Toast.LENGTH_SHORT).show();
}
}
});
} else {
System.out.println("Error Response: "
+ httpResponse.getStatusLine().toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
由于这些包以及过时了,所以我们需要在build.gradle里面添加一行代码
compileSdkVersion 29
buildToolsVersion "29.0.2"
useLibrary 'org.apache.http.legacy'
接收后台传过来的数据
Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
if("ok".equals(strResult)){
Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
//finish();
Intent intent = new Intent(MainActivity.this,WelcomeActivity.class);
String username = u1.getText().toString();
intent.putExtra("username", username);
startActivity(intent);
} else {
Toast.makeText(MainActivity.this,strResult,Toast.LENGTH_SHORT).show();
}
}
});
在注册成功后跳转到登录界面可以使用finish(),这相当于关闭了当前界面
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
u1 = (EditText)findViewById(R.id.username);
p1 = (EditText)findViewById(R.id.password);
Button button1 =(Button) findViewById(R.id.reg);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(MainActivity.this,"You clicked Button 1",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this,ResignActivity.class);
startActivity(intent);
}
});
Button button2 =(Button) findViewById(R.id.login);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(MainActivity.this,"You clicked Button 1",Toast.LENGTH_SHORT).show();
new Thread(){
public void run(){
reg();
}
}.start();
//Intent intent = new Intent(MainActivity.this,WelcomeActivity.class);
//startActivity(intent);
}
});
}
在上面这段代码里面我们额外需要注意线程代码的使用
登录成功如何显示用户名
首先看登录界面的代码
Intent intent = new Intent(MainActivity.this,WelcomeActivity.class);
String username = u1.getText().toString();
intent.putExtra("username", username);
startActivity(intent);
接下来看欢迎界面的代码
Intent intent = getIntent();
String username = intent.getStringExtra("username");
Toast.makeText(WelcomeActivity.this,"欢迎:"+username+"登录",Toast.LENGTH_SHORT).show();
此时就可以实现我们需要的效果了
效果图
注意事项
我们在开发app的时候,我们需要在自己的手机里面打开开发者模式
上一篇: Linux版Redis安装(单机)
下一篇: 小米路由硬盘版搭建ftp服务和博客