在上一篇的数据库的高级应用中完成了数据库的连接,接下来完成信息管理系统的登录注册。
登录实际上就是查询数据库中是否有页面上的用户输入的用户名与密码。核对完再返回页面,登录成功显示相应页面,失败显示相应的页面。
注册实际上就是利用sql语句向数据库中插入数据,插入成功显示相应页面,失败显示相应页面。
1.首先建立user类。
package cn.edu.hpu.model;
public class User {
private static int id;
private static String username;
private static String password;
public int getId() {
return id;
}
public void setId(int id) {
User.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
User.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
User.password = password;
}
}<span style="font-family:KaiTi_GB2312;">
</span>
在这里说一个建包规则,一般包最好建成cn.edu.cn.......这种类型。
2.现在开始写接口类,即从数据库中进行的一系列操作。
首先定义接口。
package cn.edu.hpu.service;
import cn.edu.hpu.model.User;
public interface UserManager {
public boolean RegisteUser(User user);
public boolean CheckLogin(String username,String password);
}<span style="font-family:KaiTi_GB2312;">
</span>
紧接着来写接口的实现类。
package cn.edu.hpu.service;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.PreparedStatement;
import cn.edu.hpu.model.User;
import cn.edu.hpu.util.Util;
public class UserManagerImp implements UserManager {
@Override
public boolean RegisteUser(User user) {
boolean flag=false;
String sql="insert into haha(username,password) values(?,?)";
Connection conn=Util.getConnection();//连接数据库
try {
PreparedStatement pst = (PreparedStatement) conn.prepareStatement(sql);
pst.setString(1,user.getUsername());
pst.setString(2,user.getPassword());
pst.executeUpdate();
flag=true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
@Override
public boolean CheckLogin(String username, String password) {
boolean flag=false;
String sql="select * from haha where username=? and password=?";
Connection conn=Util.getConnection();
try {
PreparedStatement pst=(PreparedStatement) conn.prepareStatement(sql);
pst.setString(1,username);
pst.setString(2,password);
ResultSet rs=pst.executeQuery();
//遍历结果集
if(rs.next()){
flag=true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
}<span style="font-family:KaiTi_GB2312;">
</span>
至此完成了从数据库进行的一系类操作。
3.现在开始写sevlet。servlet承担与页面的联系,接收转发。很多时候是表单等jsp页面的提交地址。
Servlet: 是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。Servlet是位于Web服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机Servlet生命周期)。
1)首先是登录的servlet
package cn.edu.hpu.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import cn.edu.hpu.service.UserManager;
import cn.edu.hpu.service.UserManagerImp;
public class CheckLogin extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);//不管doPost还是doGet,都doPost
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//获得username,password
String username = request.getParameter("username");//从页面获得username,passwword
String password = request.getParameter("password");
UserManager mng = new UserManagerImp();
boolean flag=mng.CheckLogin(username, password);
//获取用户验证码和系统产生的验证码
String checkCode = request.getParameter("checkCode");
String piccode = (String)request.getSession().getAttribute("piccode");
System.out.println("---"+checkCode+"pic---"+piccode);
if(flag==true&&piccode.equalsIgnoreCase(checkCode)){
StudentDaoServlet servlet=new StudentDaoServlet();
servlet.doPost(request, response);
HttpSession session=request.getSession();//获得session对象
session.setAttribute("username", username);
}else {
PrintWriter out = response.getWriter();
out.write("Incorrect!");
}
}
}<span style="font-family:KaiTi_GB2312;">
</span>
2)其次是注册的servlet。
package cn.edu.hpu.servlet;
import java.io.IOException;
//import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.edu.hpu.model.User;
import cn.edu.hpu.service.UserManager;
import cn.edu.hpu.service.UserManagerImp;
public class Register extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String Username=request.getParameter("username");
String Password=request.getParameter("password");
User u=new User();
u.setUsername(Username);
u.setPassword(Password);
UserManager um=new UserManagerImp();
boolean flag=um.RegisteUser(u);
if(flag){
response.sendRedirect("chenggong.jsp");
}
}
}<span style="font-family:KaiTi_GB2312;">
</span>
4.最后就是jsp页面
1)登录页面的jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<style type="text/css">
.body{background-image:url("1.jpg");width: 1200px;height: 600px;margin-left: 30px;}
.hh{padding-top:70px;text-align: center;}
input{
border-radius:30px;border-color:coral;height:30px;}
</style>
<script type="text/javascript">
function reload(){
var time = new Date().getTime();
document.getElementById("imgId").src="ImageServlet?d="+time;
}
</script>
</head>
<body>
<div class="body">
<div class="hh">
<center style="font-family:华文楷体;color:brown;"><h1 >登录页面</h1></center></br></br>
<center><form action="CheckLogin" method="post" >
用 户 名:<input type="text" name="username" value="请输入用户名" style="height:30px;"></input>
<p style="padding-top:3px;">密 码:<input type="password" name="password" style="height:30px;"></input></p>
验 证 码:<input type="text" name="checkCode" style="height:30px;"></br></br>
<img src="ImageServlet" id="imgId"/>
<a href="javascript:reload()">看不清楚</a><br/></br>
<p style="padding-top:3px;"> <input type="submit" value="登录"></input> <a href="zhuce.jsp">注册</a></p>
</form> </center>
</div>
</div>
</body>
</html>
2)注册页面的jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<style type="text/css">
.body{background-image:url("1.jpg");width: 1200px;height: 600px;margin-left: 50px}
.hh{padding-top:100px;text-align: center;}
input{
border-radius:30px;border-color:coral;height:30px;}
</style>
</head>
<body>
<div class="body">
<div class="hh">
<center><h1 style="font-family:华文楷体;">注册页面</h1></br></br>
<form action="Register" method="post">
用户名:<input type="text" name="username" style="height:30px">
<p style="padding-top:3px;"> 密 码:<input type="password" name="password" style="height:30px" ></p></br>
<input type="submit" value="提交">
<input type="reset" value="重置"></br>
</form>
</center>
<a href="javascript:history.go(-1)">返回</a>
</body>
</html>
在jsp页面中的form表单中有关于action的设置,即表单的提交地址(提交给哪个servlet来接受处理),还有method的设置(get,post),还有input中name的设置即交给servlet的东西。
5.以上的1 2 3 4 步是从底部向上进行的。现在让我们从页面开始的数据传输来传到底部吧。
当我们在页面上的表单中填入数据的时候,servlet来接收,得到相应的字符串,从然后创建姐口德对象,传入参数username,password后调用相应的方法进行接口的实现,实现完接口后根据返回值判断整个过程进行的正确与否,然后根据正确与否跳转到相应的页面。其实整个过程就是从页面传到数据库底部,在从数据库底部返回到页面。最主要就是通过接口和servlet来实现的。注册也是同样的原理。
至此完成了信息管理系统的登录注册。