一:思路:登录验证小项目流程:
1.使用原生的方式生成页面;
2.客户端先发送请求,得到要登录的页面;
3.用户填写相应的用户数据,发送请求给服务器;
4.服务端接受到请求后进行逻辑处理;
5.服务端将处理之后的结果返回给客户端;
二:实现:
1.第一步:生成生成登录页面:
package com.cy.controller;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
public class PageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("接收到客户端请求,返回响应的登录页面");
//设置编码格式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("gbk");
//获取响应的输出流对象
PrintWriter out = response.getWriter();
out.write("<html>");
out.write("<head>");
out.write("</head>");
out.write("<body>");
out.write("<form action='login' method='get'>");
out.write("用户名:<input type='text' name='name' value=''/><br/>");
out.write("密码:<input type='text' name='pwd' value=''><br/>");
out.write("<input type='submit' value='登录'>");
out.write("</form>");
out.write("</body>");
out.write("</html>");
}
}
2.第二步:服务端获取请求数据进行验证,以及定义pojo实体类:
package com.cy.controller;
import com.cy.entity.User;
import com.cy.service.Impl.UserServiceImpl;
import com.cy.service.UserService;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
public class LoginServlet extends HttpServlet {
UserService userService=new UserServiceImpl();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求数据
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
//封装对象
User user = new User(name, pwd);
//调用service进行逻辑处理
User u = userService.login(user);
System.out.println(u);
//判断返回结果是否为空
if (u!=null){
response.getWriter().write("success");
}else {
response.getWriter().write("failure");
}
}
}
package com.cy.entity;
/**
* 实体类封装数据
*/
public class User {
/**
* 用户id
*/
private int uid;
/**
* 用户名
*/
private String Username;
/**
* 密码
*/
private String Password;
//设置构造函数
public User(String username, String password) {
Username = username;
this.Password = password;
}
public User(int uid, String username, String password) {
this.uid = uid;
Username = username;
Password = password;
}
//生成set和get方法
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUsername() {
return Username;
}
public void setUsername(String username) {
Username = username;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
this.Password = password;
}
}
第三步:编写业务层代码:
package com.cy.service;
import com.cy.entity.User;
/**
* 业务层接口
*/
public interface UserService {
/**
* 登录
* @param user
* @return
*/
User login(User user);
}
package com.cy.service.Impl;
import com.cy.dao.Impl.UserDaoImpl;
import com.cy.dao.UserDao;
import com.cy.entity.User;
import com.cy.service.UserService;
/**
* 业务实现类
*/
public class UserServiceImpl implements UserService {
UserDao userDao=new UserDaoImpl();
/**
* 登录方法
* @param user
* @return
*/
@Override
public User login(User user) {
return userDao.login(user);
}
}
第四步:编写持久层代码:
package com.cy.dao;
import com.cy.entity.User;
/**
* 持久层接口
*/
public interface UserDao {
/**
* 登录
* @param user
* @return
*/
User login(User user);
}
package com.cy.dao.Impl;
import com.cy.dao.UserDao;
import com.cy.entity.User;
import java.sql.*;
/**
* 持久层实现类
*/
public class UserDaoImpl implements UserDao {
@Override
public User login(User user) {
//1.定义连接对象
Connection con=null;
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
User u=null;
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
//获取预处理块
preparedStatement=con.prepareStatement("select Uid,UserName,Password from tb_user where UserName=? and Password=?");
//给?赋值
preparedStatement.setString(1,user.getUsername());
preparedStatement.setString(2,user.getPassword());
//执行sql
resultSet=preparedStatement.executeQuery();
//从resultset中获取结果值
while (resultSet.next()){
u=new User(resultSet.getInt("Uid"),resultSet.getString("UserName"),resultSet.getString("Password"));
}
} catch (Exception e) {
e.printStackTrace();
}
//释放资源
try {
resultSet.close();
preparedStatement.close();
con.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return u;
}
}