项目描述:
写一个登录界面,输入账号密码,对比数据库里面的数据,如果匹配成功的话,跳转到显示“Welcome +用户名”的页面,如果与数据库里面的数据匹配不成功,则留在原页面
项目思路:
建一个用户类,用来传参;建一个dao层,专门连接数据库里面的数据;在WRB-INF文件下建一个html登录界面;建立一个Servlet文件,用于获取登录界面里输入的值,判断User是否为空
项目代码及注释解释:
第一步:因为要和数据库连接,所以先导进Oracle的jdbc的jar包
找到Oracle安装路径,在jdbc文件中找到ojdbc.jar复制到WebContent--WEB-INF-lib文件夹下,这个文件夹统一放第三方jar包,当然想要使用数据库得先打开电脑的监听啥的,这些细节就不讲了,扩展起来主题就没啦
第二步:建一个用户类
publicclass User {
private String name;
private String pass;
public User() {
super();
}
public User(String name, String pass) {
super();
this.name = name;
this.pass = pass;
}
//实现get set方法用来后面用户名密码的赋值,传参
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
public String getPass() {
returnpass;
}
publicvoid setPass(String pass) {
this.pass = pass;
}
}
第三步:建立一个db.properties配置文件,用来存放调用数据库的数据
在Java Resources—src文件夹下建此文件,第一行数据是数据库接口,其中YLMF123-3131857是计算机名、1521为数据库软件接口
url=jdbc:oracle:thin:@YLMF123-3131857:1521:orcl
name=scott
pass=tiger
driver=oracle.jdbc.driver.OracleDriver
第四步:建一个dao层接口Interface
publicinterface UserDao {
User LoginUser(String name,String pass);
}
第五步:建一个类实现dao层接口
publicclass UserDaoImpl implements UserDao {
@Override
public User LoginUser(String name, String pass) {
//建立配置文件实例,用来调用
Properties p = new Properties();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//加载db.properties配置文件
p.load(this.getClass().getClassLoader().getResourceAsStream("db.properties"));
//创建反射机制
Class.forName(p.getProperty("driver"));
//连接数据库
conn=DriverManager.getConnection(p.getProperty("url"),p.getProperty("name"),p.getProperty("pass"));
String sql = "select *from userinfo where name = ? and pass = ?";
//操作数据库,将sql语句发送到数据库
pstmt = conn.prepareStatement(sql);
//给第一个占位符赋值,将方法中的参数赋值进去,此参数被ServletDemo中获取到的表单域中的name赋值,
如果数据库中存在此name和密码则能查到信息,否则查不到信息,返回值为空
pstmt.setString(1, name);
pstmt.setString(2, pass);
//将查询到的结果返回到结果集
rs = pstmt.executeQuery();
while(rs.next()){
//将从数据库中得到的用户名和密码返回到User类中,如果没有此用户名则返回为空
User u = new User(rs.getString("name"),rs.getString("pass"));
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if(rs!=null){//一定要判断不为空,预防空指针
rs.close();//关闭结果集,按照声明的顺序反向关闭
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(pstmt!=null){
pstmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
returnu;//返回用户类的值,用以ServletDemo()中判断User是否为空,为空则转发到zuoyelogin.jsp
页面,不为空(说明数据库中有此用户名和密码,说明登录成功)则跳转到welcome页面
}
}
第六步:建立一个Servlet文件,用于获取登录界面里输入的值
@WebServlet("/ServletDemo")
publicclass ServletDemo extends HttpServlet{
privatestaticfinallongserialVersionUID = 1L;
public ServletDemo() {
super();
}
protectedvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
//调用本类的doPost()方法
this.doPost(request, response);
}
protectedvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
//获取登录界面中表单域的输入的值
String name = request.getParameter("name");
String pass = request.getParameter("pass");
//实例化UserDaoImpl对象,用来调用
UserDao ud = new UserDaoImpl();
//将获取到的表单域中输入的值传参到UserDaoImpl的LoginUser()方法中,用来调用数据库中的值,如果
与数据库中的name与pass没有匹配的,则返回空
User u = ud.LoginUser(name, pass);
if(u==null){
//判断为空的话,转发到zuoyelogin.jsp文件,及本页面文件
RequestDispatcher rd=request.getRequestDispatcher("zuoyelogin.jsp");
rd.forward(request, response);
}else{
//判断不为空时,则说明与数据库中的值匹配,登录成功,跳转到welcome界面
PrintWriter out = response.getWriter();
out.write("welcome"+u.getName());
}
}
}