今日任务
- 完成用户模块的功能
1.1 网上商城的实战:
1.1.1 演示网上商城的功能:
1.1.2 制作目的:
灵活运用所学知识完成商城实战。
1.1.3 数据库分析和设计:
1.1.4 代码实现:
1.1.4.1 通用的Servlet的编写:
传统的方式:
传统的方式: * 一个请求对应一个Servlet. * 能不能一个模块对应一个Servlet. 一个模块对应一个Servlet: <a href=”/UserServlet?method=add”>添加</a> <a href=”/UserServlet?method=update”>修改</a> <a href=”/UserServlet?method=delete”>删除</a> public class UserServlet extends HttpServlet{ public void service(HttpServletRequest req,HttpServletResponse resp){ String method = req.getParameter(“method”); if(“add”.equals(method)){ add(req,resp); }else if(“update”.equals(method)){ update(req,resp); } } public void add(HttpServletRequest req,HttpServletResponse resp){ } public void update(HttpServletRequest req,HttpServletResponse resp){ } } 改进以后: public class BaseServlet extends HttpServlet{ public void service(HttpServletRequest req,HttpServletResponse resp){ String methodName = req.getParameter(“method”); // 反射: Class clazz = this.getClass(); // 指代的是子类的对象. Method method = clazz.getMethod(methodName ,HttpServletRequest.class,HttpServletResponse,class); method.invoke(this,req,resp); } } public class UserServlet extends BaseServlet{ public void add(HttpServletRequest req,HttpServletResponse resp){ } public void update(HttpServletRequest req,HttpServletResponse resp){ } } public class A{ public A(){ System.out.println(this.getClass()); } } public class B extends A{ Public B(){ } } public class Test{ Public static void main(String[] args){ B b = new B(); } }
1.1.4.2 BaseServlet的代码实现:
【创建包结构】
【代码实现】 public class BaseServlet extends HttpServlet{ @Override // http://loacalhost:8080/store/UserServlet?method=add protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 处理Post请求的乱码 req.setCharacterEncoding("UTF-8"); // 接收参数: String methodName = req.getParameter("method"); // 反射获得类的字节码. Class clazz = this.getClass(); // 获得正在执行的类的指定名称的方法 try { Method method = clazz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class); // 让这个方法执行: String path = (String) method.invoke(this, req,resp); if(path != null){ req.getRequestDispatcher(path).forward(req, resp); } } catch (Exception e) { e.printStackTrace(); } } }
1.1.4.3 环境的搭建:
【创建一个WEB工程】 【创建包结构】 【引入相应的jar包】 * mysql驱动 1 * dbutils 1 * c3p0连接池 1 * beanutils 2 * JSTL 2 * 文件上传 2 * 发送邮件 1 【创建数据库和表】 CREATE TABLE `user` ( `uid` varchar(32) NOT NULL, `username` varchar(20) DEFAULT NULL, `password` varchar(20) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `email` varchar(30) DEFAULT NULL, `telephone` varchar(20) DEFAULT NULL, `birthday` varchar(20) DEFAULT NULL, `sex` varchar(10) DEFAULT NULL, `state` int(11) DEFAULT NULL, `code` varchar(64) DEFAULT NULL, PRIMARY KEY (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.2 前台用户模块:
1.2.1 注册
1.2.1.1 异步校验用户名是否存在
1.JS的事件触发一个函数.
2.使用AJAX异步向服务器发送请求.
3.得到返回的数据进行判断.
4.将信息写入到文本框后面span元素中.
1.2.1.2 完成用户注册
1.在注册页面中输入信息.
2.点击注册,提交到Servlet.
3.接收数据,封装数据.
4.在Servlet调用业务层.
5.页面跳转.
1.2.1.3 发送激活邮件
1.使用JavaMail的技术-了解.
* 了解邮件相关内容:
* 术语:
* 电子邮箱:一个邮箱服务器上的一个账号,通过账号获得到服务器上一块空间.
* 邮箱服务器:一台电脑安装一个邮箱的服务器.
* 邮件收发的协议:协议规范双方的数据的格式.
* 协议:
* 接收:POP/POP3 IMAP
* 发送:SMTP
* 邮件收发过程:
* 会配置邮箱的客户端:
【配置邮箱服务器:】
安装成功!
第一步:
点击工具→服务器设置
第二步:
第三步:
点击账号→新建账号
【配置邮箱的客户端】
* Foxmail:免费的
* 输入用户名
* 输入密码:
* 修改服务器的地址localhost.
* outlook:微软的收费的.
1.2.2 激活
在邮箱的界面点击激活链接:
提交到Servlet传递一个激活码:
根据激活码进行查询用户:
* 如果查询到该用户:修改用户的状态.
* 如果没有查询到该用户:激活失败.
1.2.3 登录
在登录页面上输入用户名和密码
点击提交:提交到Servlet.
在Servlet中接收参数
调用业务层
页面跳转
1.2.3.1 记住用户名
使用Cookie记住用户名:
* 自己完成
1.2.3.2 自动登录
使用Cookie记住用户名和密码:
使用过滤器:
* 自己完成
1.2.4 退出
* 在首页上点击退出的链接:
* 提交到Servlet:
* 销毁session: