1、
共三张表:user用户表 group分组表 contact联系人表
entity 分模块,三个实体类,三个模块
2、
先注册再登录
DAO:UserDAOImpl
public User getUser(String userName);根据用户名查询对象——登录时
public int saveUser(User user);保存用户——注册时
public int updatePassword(int id, String newPassword);登录成功后在index.jsp处更改密码。
*“注册登录时,需要以post方式提交表单,解决中文乱码问题,用过滤器
建个专门的Filter包,建CharsetFilter类 implements Filter,在doFilter方法中写拦截请求的字符集过滤器
request.setCharsetEncoding("utf-8");
chain.doFilter(request, response);这句必须写,不放行就访问不了jsp页面了
之后再web.xml中部署过滤器 /*是拦截所有webRoot下的jjsp”
Servlet:RegistServlet
调用saveUser方法
验证码问题:
a、使用第三方控件生成验证码
WEB-INF 下的lib中导入kaptcha.jar 在web.xml中部署,是servlet哦,
servlet class : com.google.code.kaptcha.servlet.KaptchaServlet
URL : /images/vcode.jpg
b、在注册和登陆时都遇到检查用户验证码是否正确
先拿到jsp页面用户提交的验证码
去跟session中临时保存的验证码进行比对
先拿到session对象
HttpSession session=request.getSession();
String realVcode=(String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY)Constants常量 得把常量强转成string类型
然后if(equals)比较,向作用域存入错误提示语,转发给regist.jsp
c、点击验证码图片刷新验证码问题
在regist.jsp页面写javascript function函数用来刷新验证码
由于在注册登录时都会用到这个函数,所以就放在包含页面,减少代码冗余
function refreshVcode(){
var vcode=document.getElementById("vcode");
vcode.src="images/vcode.jpg?r="+Math.random();//?后是键值对,是为了告诉浏览器不要用缓存的图片刷新,需要每次向servlet
//发送请求,加r=是为了让浏览器知道每次都随机生成新的不一样的图片
}
验证码问题解决完了,开始封装实体类对象,然后调用save方法,保存对象,重定向到login.jsp页面,说明注册成功
在regist.jsp页面 input 标签 name ${param.userName} param 负责取出用户已经提交的表单再回填 这样如果用户没登陆成功的话,用户名和email会被保存
减少代码冗余:Filter过滤器 inc包含页面 都在WEB-INF下单独建个文件夹里边写jsp页面
LoginServlet: 得到之后,注意比对拿到的name是否为空,比对密码是否正确
Filter过滤器 还可以把请求转发或重定向到其他页面,禁止用户访问,比如必须先登陆才可以操作后台,index.jsp在后台
先把doFilter中的request response 强转成httpServlet类的,因为session是httpServlet类的
获得对象,判断session.getAttribute("user")!=null,chain 放行
否则重定向到login.jsp
获取项目在服务器上的上下文目录 万一将来更改了项目路径,这边路径不能写死
String path=httpRequest.getContextPath();
httpResponse.sendRedirect(path+"/login.jsp");