一、模块操作步骤:
1.用户模块:
前台:
表单验证:1.得到用户名和密码
利用EL表达式获取值,用户名: r e s u l t I n f o . r e s u l t . u n a m e 密 码 : {resultInfo.result.uname } 密码: resultInfo.result.uname 密码:{resultInfo.result.upwd }
2.判断是否为空
通过添加Form表单,设置name属性值,
添加一个隐藏域,为了给后台传递数据,
给前台的用户名文本框添加name属性
给前台的密码文本框也添加name属性
设置一个信息提示,${resultInfo.msg }
添加一个button按钮,添加点击事件,当触发时判断用户名和密码是否为空 <input type=“button” class=“log jc yahei16” value=“登 录” οnclick=“checkLogin()” />
判断是否为空工具,在在statics /js /util.js 中创建 isEmpty 方法,判断参数是否为空
/**
- 判断参数是否为空
- @param str
- @returns {Boolean}
*/
function isEmpty(str) {
if (str == null || str.trim() == “”) {
return true;
}
return false;
}
/**
- 判断参数是否不为空
- @param str
- @returns {Boolean}
*/
function isNotEmpty(str) {
if (str == null || str.trim() == “”) {
return false;
}
return true;
}
判断:在statics /js /config.js 中进行判断用户名和密码,
/**
* 表单验证
* @returns {Boolean}
*/
function checkLogin(){
//得到文本框的值
var userName=KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲userName").val(…(“userPwd”).val();
//判断 是否为空
if(isEmpty(userName)){
$("#msg").html("用户名不能为空!")
//聚焦
$("#userName").focus();
return;
}
if(isEmpty(userPwd)){
$("#msg").html("密码不能为空!")
//聚焦
$("#userPwd").focus();
return;
}
//提交表单
$("#loginForm").submit();
}
为空,提示用户
$("#msg").html(“用户名或密码不能为空!”);
3.不为空,提交表单 (表单元素需要有name属性值)
$("#loginForm").submit();
后台:
1、接收参数
2、判断参数
参数为空,提示信息,请求转发到登录页面
3、通过用户名查询用户对象是否存在
如果用户不存在,提示信息,请求转发到登录页面
4、如果用户存在,判断密码是否正确
如果密码不正确,提示信息,请求转发到登录页面
5、 成功:
1、将用户信息存到session作用域中
2、判断是否记住密码,如果是,存cookie对象
3、重定向到首页
失败:
1、将resultInfo对象存到request作用域中
2、请求转发到登录页面
Servlet层:(接收参数、调用service层、控制页面跳转)
/**
-
用户模块
*/
@WebServlet("/user")
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;private UserService userService = new UserService();
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 得到用户行为
String action = request.getParameter(“action”);if ("login".equals(action)) { // 用户登录 userLogin(request, response); } else { // 跳转到登录页面 response.sendRedirect("login.jsp"); }
}
1、接收参数(用户名、密码)
2、调用Service层,返回resultInfo封装类
3、判断是否登录成功
private void userLogin(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
//1.接收参数(用户名、密码)
String uname=request.getParameter(“userName”);
String upwd=request.getparameter(“userPwd”);
//2.调用Service层,返回resultInfo封装类
ResultInfo resultInfo=userService.userLogin(uname,upwd);
if(resultInfo.getCode==1){ //登录成功
}
成功: 1、将用户信息存到session作用域中
2、判断是否记住密码,如果是,存cookie对象
3、重定向到首页
失败:
1、将resultInfo对象存到request作用域中
2、请求转发到登录页面
if(resultInfo.getCode==1){ //登录成功
//1.将用户信息存到session作用域中
request.getSession().setAttribute(“user”,resultInfo.getResult());//Service层对象的操作
//2.判断是否记住密码,如果是,存cookie对象
String rem=request.getParameter("rem"); //CheckBox的属性值
if("1".requals(rem)){ //记住密码,存cookie对象
Cookie cookie=new Cookie("user",uname+"-"+upwd);
//设置三天生效
cookie.setMaxAge(3*24*60*60); //单位秒
//响应
response.addCookie(cookie);
}
//3.重定向到首页
response.sendRedirect("index.jsp");
}else{ //登录失败
//1.将resultInfo对象存到request作用域中
request.setAttribute(“resultInfo”,resultInfo);
//2.请求转发到登录页面request.getRequestDispatcher("login.jsp").forward(request,response);
}
Service层:(业务处理/业务逻辑层)
public class UserService {
private UserDao userDao = new UserDao();
1、判断参数是否能为空
如果为空,设置resultInfo封装类的值 code=0,msg=用户名或密码不能为空,返回resultInfo对象
2、调用Dao层,通过用户名查询用户对象,返回user对象
如果user对象为空,设置resultInfo封装类的值 code=0,msg=用户名不存在,result回显,返回 resultInfo对象
3、如果user对象不为空,判断前台传过来的密码是否和数据库查询到的密码一致
如果密码不一致,设置resultInfo封装类的值 code=0,msg=密码不正确,result回显,返回 resultInfo对象
4、登录成功
置resultInfo封装类的值 code=1,msg=登录成功,result,返回resultInfo对象
//创建一个返回ResultInfo 对象的 UserLogin()方法
private ResutInfo Userlogin(String uname,String upwd){
//创建一个resultInfo对象
ResultInfo resultInfo=new ResultInfo<>();
//1.判断参数是否能够为空,对后台数据判断,用工具类StringUtil
if(StringUtil.isEmpty(uname)||(StringUtil.isEmpty(upwd)){
//如果为空,设置 resultInfo封装类的值 code=0,msg=用户名或密码不能为空,返回resultInfo对象
resultInfo.setCode(0);
resultInfo.setMsg("用户名或密码不能为空!")
return resultInfo;
}
//数据回显
User u=new User();
u.setUname(uname);//User类中的setUname构造器,即this.uname = uname;
u.setUpwd(upwd); //User类中的setUpwd构造器,即this.upwd = upwd;
//2.调用Dao层中连接数据库查询方法,通过用户名查询用户对象,返回User对象
User user=UserDao.findUserByUname(uname);
//如果user对象为空,设置resultInfo封装类的值code=0,msg=用户不存在,result回显,返回resultInfo对象
if(user==null){
resultInfo.setCode(0);
resultInfo.setMsg("用户名不存在!");
//数据回显
resultInfo.setResult(u); // 将对象 u 的值存入resultInfo
return resultInfo; //返回resultInfo对象
}
//3.如果对象不为空,判断前台传过来的密码是否和数据库查询到的密码一致
upwd=MD5Util.encode(MD5Util.encode(upwd)); //前台的密码
if(!upwd.equals(user.getUpwd())){ //user.getUpwd UserDao层连接数据库获取的密码
resultInfo.setCode(0);
resultInfo.setMsg("用户密码不正确!");
return resultInfo; //返回resultInfo对象
}
//登录 成功
resultInfo.setCode(1);
resultInfo.setMsg("登录成功!");
resultInfo.setResult(user); //user信息较多,成功返回信息多
return resultInfo;
}
Dao层:(数据库操作层:增删改查)
public class UserDao {
/**
* 通过用户名查询用户对象
* @param uname
* @return
*/
public User findUserByUname(String uname) {
通过用户名查询用户对象
1、得到数据库连接
2、写sql语句
3、预编译
4、设置参数
5、执行查询,返回结果集
6、判断并分析结果集
7、关闭资源
8、返回user对象
User user = null;
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// 1、得到数据库连接
connection = DBUtil.getConnection();
// 2、写sql语句
String sql = "select * from tb_user where uname = ?";
// 3、预编译
preparedStatement = connection.prepareStatement(sql);
// 4、设置参数,下标从1开始
preparedStatement.setString(1, uname);
// 5、执行查询,返回结果集
resultSet = preparedStatement.executeQuery();
// 6、分析结果集,得到user对象
if (resultSet.next()) {
user = new User();
user.setHead(resultSet.getString("head"));
user.setMood(resultSet.getString("mood"));
user.setNick(resultSet.getString("nick"));
user.setUname(uname);
user.setUpwd(resultSet.getString("upwd"));
user.setUserId(resultSet.getInt("userId"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭资源
DBUtil.close(resultSet, preparedStatement, connection);
}
return user;
}
作者:来世还生华夏门
来源:CSDN
原文:https://blog.csdn.net/qq_38708432/article/details/82994757
版权声明:本文为博主原创文章,转载请附上博文链接!