登录案例
需求:
在页面上填写用户名和密码及验证码,点击提交,先校验验证码是否一致.若一致后再去找数据库.顺便记住用户名
技术:
表单
验证码
servlet
request
session
cookie
步骤分析:
1.数据库和表
create table user(
id int primary key auto_increment,
username varchar(20),
password varchar(20)
);
2.创建一个项目
包结构
jar包
工具类和配置文件
3.表单 login.jsp
4.表单提交 loginServlet
loginServlet:
获取验证码(从前台传过来和session中)
判断两个验证码是否一致
若不一致:
填写错误信息,请求转发到login.jsp
若一致:获取用户名和密码
调用userService的getuserbyusernameandpassword 返回值 User user
判断user是否为空
若为空:填写错误信息,请求转发到login.jsp
若不为空:
继续判断是否勾选了记住用户名
若勾选:
创建cookie 将用户名放入cookie写回浏览器
将user对象放入session中
页面重定向 index.jsp 展示 xxx:欢迎回来
代码:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<servlet>
<description></description>
<display-name>CodeServlet</display-name>
<servlet-name>CodeServlet</servlet-name>
<servlet-class>com.feizhu.web.servlet.CodeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CodeServlet</servlet-name>
<url-pattern>/code</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>LoginServlet</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.feizhu.web.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
-------------------------------------------------------------
package com.feizhu.web.servlet;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.feizhu.web.domain.User;
import com.feizhu.web.service.UserService;
/**
* 登录
*/
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码
request.setCharacterEncoding("utf-8");
//接受两个验证码
String rCode=request.getParameter("checkCode");
String sCode = (String) request.getSession().getAttribute("sessionCode");
//一次性验证码 用完之后从session 中移除
request.getSession().removeAttribute("sessionCose");
//判断两个验证码是否一致
if(rCode==null || rCode.trim().length()==0 || sCode ==null) {
//验证码有问题 提示信息 页面跳转到login
request.setAttribute("msg", "请重新输入验证码");
request.getRequestDispatcher("/login.jsp").forward(request, response);
return;
}
if(rCode.equals(sCode)) {
//验证码不一致 提示信息 页面跳转到login
request.setAttribute("msg", "验证码输入错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
return;
}
//接受用户名和密码
String username= request.getParameter("username");
String password= request.getParameter("password");
User user=null;
//调用userservice getUsernameAndPwd() 返回user
try {
user = new UserService().getUserByUsernameAndPwd(username,password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//判断user
if(user==null) {
//若user为空 提示信息 请求转发到login.jsp
request.setAttribute("msg", "用户名密码不匹配");
request.getRequestDispatcher("/login.jsp").forward(request, response);
return;
}else {
//若user不为空 判断是否勾选了记住用户名将user放入session
if("ok".equalsIgnoreCase(request.getParameter("savename"))) {
//创建cookie username不能是中文
Cookie c= new Cookie("savename", username);
c.setPath(request.getContextPath()+"/");
c.setMaxAge(3600);
//写回浏览器
response.addCookie(c);
}
request.getSession().setAttribute("user", user);
}
//页面重定向index.jsp
response.sendRedirect(request.getContextPath()+"/index.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
---------------------------------------------------------------------------------------
package com.feizhu.web.service;
import java.sql.SQLException;
import com.feizhu.web.dao.UserDao;
import com.feizhu.web.domain.User;
public class UserService {
public User getUserByUsernameAndPwd(String username, String password) throws SQLException {
// TODO Auto-generated method stub
return new UserDao().getUserByUsernameAndPwd(username, password);
}
}
------------------------------------------------------------------------------------
package com.feizhu.web.dao;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import com.feizhu.web.domain.User;
import com.feizhu.web.utls.DataSourceUtils;
public class UserDao {
public User getUserByUsernameAndPwd(String username, String password) throws SQLException {
QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource());
String sql="select * from user where username=? and password=?";
return qr.query(sql, new BeanHandler<>(User.class),username,password);
}
}
----------------------------------------------------------------------------------------------------
package com.feizhu.web.domain;
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
--------------------------------------------------------
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/web
c3p0.user=root
c3p0.password=root
备注:由于个人原因,本博客暂停更新。如有问题可联系本人,本人提供技术指导、学习方向、学习路线。本人微信wlp1156107728(添加注明来意) QQ1156107728(添加注明来意)