A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

同学们,从今天起正式开始做网上商城实战项目了,总共5天,有用户、产品、订单、分类等模块。这个项目会将JavaWeb讲过的重要理论知识在项目中开始应用,所以大家一定要认真对待。

今日需要掌握的有:
  • 今天讲的是用户模块,登录、注册是最基本的功能,大家务必掌握。
  • 用户注册激活功能中,我们学习了邮件的收发,对于易邮服务器的使用要了解,Mail工具类不作要求,看懂即可。

请同学们按照如上要求,总结今日所学。


18 个回复

倒序浏览
陈强
商城实战的一天;


2018-06-20_210203.png (56.26 KB, 下载次数: 8)

2018-06-20_210203.png
回复 使用道具 举报 1 0
许剑鸿         webDay26总结

网上商城项目实战1用户模块的编写


准备工作:
1.创建store_v2.0的数据库,和表user,创建User的bean
2.将之前的WEB01拷贝过来,将index.html替换为index.jsp。 将index.jsp页面中的所有图片,js等的路径    ${ pageContext.request.contextPath }
3.在index.jsp中,将主页转发到IndexServlet
<jsp:forward page="/IndexServlet">
        <jsp:param value="index" name="method"/>
</jsp:forward>
4.在IndexServlet中继承我们的BaseServlet,并转发到我们项目的首页
        public class IndexServlet extends BaseServlet {
                private static final long serialVersionUID = 1L;

                public String index(HttpServletRequest req,HttpServletResponse resp){
                       
                        return "/jsp/index.jsp";
                }
        }
5.dao和service都建立接口和实现类,面向接口编程。


用户模块的编写思路步骤:

1用户的注册功能
在首页上点击【注册】链接
跳转到注册页面
在注册页面中输入相关的信息
    * 进行表单校验:JQuery实现校验.
    * 异步用户名校验
点击【注册】按钮:提交到Servlet
在Servlet中调用业务层调用Dao完成保存操作,同时发送一封激活邮件

2发送激活邮箱(了解)

3激活用户
在邮箱中点击【激活连接】
提交到Servlet:    * 根据激活码查询用户        * 修改用户状态      * 将激活码置为null
页面跳转

4、用户登录
在首页上点击【登录】链接.
跳转到登录页面
在登录页面中输入信息
点击【登录】按钮

5、用户退出
在首页上点击【退出】链接
提交到Servlet:销毁session.
页面跳转
回复 使用道具 举报
谢洪彬:
商城实战项目():
今天主要完成了用户模块的案例:
开始案例前的注意事项:
1. 建表结构需要规范,ServiceDao都需要有接口,然后创建接口的实现类(面向接口思想)
2. 跳转页面使用Servlet层去完成(符合MVC思想)
今天主要完了成用户的以下功能:
1. 异步校验用户名是否存在
利用JQueryAJAX完成异步校验
通过获取用户名对象为其添加失去焦点事件,在调用$.post()$.get完成异步校验
$: jquery对象
Blur: 失去焦点事件
$.post(“路径”,”参数”,回掉函数)
2. 用户注册
2.1数据库连接正确
2.2实体类准备完毕
2.3在进行数据自动封装是需要解决Date类型转换的问题:
解决代码: ConvertUtils.register(new MyDateConverter(), Date.class);
2.4在注册的过程中涉及到了注册成功后发送邮件的操作:
Emile:
发邮件协议:        STMP
收邮件协议:        POP3,IMAP
当你的电脑配置了邮箱服务器,在配合软件就可以去完成收发邮件的操作了
2.5注册成功后我们需要发送一封激活码邮件给用户,当用户点击激活链接时我们需要将用的状态码修改以及将激活码致为null,并将修改过后的用户重写回数据库
3. 用户登录
3.1登录时我们需要校验三个参数:        用户名,密码,用户激活状态
3.2登录成功我们需要将用户信息存入Session
3.3在页面中就可以对Session中的结果进行为空判断,并根据sessio的值改变页面显示的状态
4. 用户退出
手动调用invalidate清空session
跳转页面
:  页面中很多类不要引错jar
开发中所需要用到的jar
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps1DE4.tmp.jpg
回复 使用道具 举报
郑阳阳
用户模块,登录,注册:
注册功能:
点击注册跳转到注册页面,输入相关信息,
用jq进行校验,使用失去焦点事件,异步用户名校验.
然后点击注册提交到servlet.
servlet调用业务层调用dao保存数据,同时发生激活邮件

激活邮件:
在邮箱中点击链接,提交servlet,根据激活码查询用户,需要修改用户状态,将激活码
置为null,跳转页面

退出:
点击退出,提交到servlet,将session销毁,页面跳转
回复 使用道具 举报
何平波
ConvertUtils.register(new MyDateConverter(), Date.class);能将数据表中的Data类型转为String类型,配合工具类一起使用
  
    接收参数:
                        Map<String,String[]> map = req.getParameterMap();
                        // 封装数据:
                        User user = new User();
                        BeanUtils.populate(user, map);
将原本繁杂的封装实体类步骤调用工具类完成(BeanUtils.populate),req.getParameterMap();将表单的全部name数据封装成一个map集合,返回的是一个map数组,然后调用工具类封装

知识点扩展
1.其实一开始我们可以防止源代码页面是如何跳转,而让一些懂得的人知道总体的页面跳转,防止做一些数据的串改,我们可以新建一个中转的页面,一直接访问工程名可以跳转到首页!
代码如下
        <jsp:forward page="/IndexServlet">   jsp页面的跳转去执行一个servlet类,而且这个类是继承通用Servlet的,编写方法只要return “/页面的相对位置”
                <jsp:param value="index" name="method" />  //name="method"是通用Servlet需要的参数,value="index"是通用Servlet需要编写的执行方法.
        </jsp:forward>

2.异步加载检测用户名是否可用
这个方法与之前最大的区别是aiax的参数现在变多了

$.post("${pageContext.request.contextPath}/UserServlet", {
                                "method" : "checkUsername",
                                "username" : username
"method"是一个不变的参数,因为通用类servlet规定了这个参数,"checkUsername"是在用户模块编写的一个异步加载检测用户名的方法  
"username" : username 这行参数就是用户名表单的值

注册方法
1).在这个方法里,其实可以直接在表单的提交路径写上UserServlet?method=regist
但教程里的方法是添加一个隐藏框,这个隐藏框有name属性,也有value值,而且这些数据也恰好是通用servlet类需要的值.
<form class="form-horizontal" style="margin-top: 5px;"
                                        action="${pageContext.request.contextPath }/UserServlet"
                                        method="post">
                                        <input type="hidden" name="method" value="regist">
2).而关键的servlet类的编写,采用了beanUtils.populate方法来封装表单的数据,这与之前的一个个封装数据来的灵活多了
                        // 接收参数封装到map中
                        Map<String, String[]> map = req.getParameterMap();
                        // 调用实体类
                        User user = new User();
                        ConvertUtils.register(new MyDateConverter(), Date.class);
                        // 封装实体类
                        BeanUtils.populate(user, map)
4).接下来的一个思路是注册之后要让用户去接收邮件激活,在业务员层你需要设置好id,和初始未激活的状态以及一个激活码,这些都可以采用工具类来实现.(生成随机码id和随机激活码id都可以用uuid这个工具类来实现. )

2.检测激活码完成注册
这里的一个思路比较复杂,完成注册之后才用邮箱服务器给用户输入的邮箱发一封激活邮件,这个邮件有个超链接,这个超链接其实是开发者自己写的以个Servlet实现方法.在这个方法里,你首先要接收激活码传过来的参数,判断是否存在,因为如果没有激活码的过其实也是一个还没注册的的用户或者是出现激活码失效的情况.这时候应该提示去重新注册.
如果查询激活码存在的话就要修改用户的状态信息,将原本的未激活状态改为激活,这里你可以设1为未激活,2为已激活.然后清空激活码.这时候就代表已经是激活的用户了.

3.登陆方法,根据注册方法的思维逻辑,你只需在Dao中传入的状态是否为2的话,为2的话就是已激活的状态,就让用户实现登陆,这里可以在首页显示用户的姓名,这个方法会相对比较好理解.

6.清空退出.这个方法是一个清空session的方法,将之前存入session中的用户信息清空,调用session.invalidate();就可以实现了.
回复 使用道具 举报
曾耀峰
商城项目实战day1心得:
   今天正式进入商城的项目实战。以前,总是写个小程序,里面弄个main方法。或者做个小网页,验证验证一下是否有做出符合要求的效果就可以。通过今天第一天的实战效果来看,大部分写出来的代码以前都做过,但是感觉代码规范方面得到了提高。
  今天做了用户模块的功能,包含用户注册功能,用户登录功能,用户退出功能。其中,注册功能又包括了异步校验用户名是否存在,生成一个注册用户激活码,给用户在注册表单填写的邮箱发送用户激活码这三个比较难的功能。下面是总结好的个人收获。
  (1).MVC思想:进入一个页面时候,不能直接进入jsp页面。而是要先进入处理该页面的Servlet。进行后台处理数据以后,在Servlet中返回该页面。今天在进入首页index.jsp,进入到jsp ,马上就写了一个标签<jsp forword page ="IndexServlet路径?method=index"/> 然后index()方法里面直接转发到index.jsp。这样做尽管有些毫无意义。但是符合了MVC的设计思想。
(2).用一个UserServlet解决了所有用户模块功能。之前,做一个注册,生成一个注册Servlet。做一个登录,生成一个登录Servlet...一个商品的增删改查和分页下来,有9个Servlet。这样子,限定了Servlet只能处理一个功能。但是,通过昨天学习了动态代理,能增强一个类的方法。通过动态代理写了一个所有servlet都应该继承的BaseServlet工具类。BaseServlet里面有个service()方法。我们知道,一个servlet如果有写service()方法的时候,不管是post请求或get请求,只要有请求访问servlet,都会自动优先执行service(),并且不会再执行doget()和dopost()这两个方法。
     UserServlet继承了BaseServlet,就得到了BaseServlet这个父类的service()方法。这样,每次有请求访问到UserServlet,就执行了service()。在sevice()里面。我们每次要访问Servlet都要带一个方法名。然后通过这个方法名。利用反射得到这个方法,并让它执行。
    按照这样的思路,UserServlet只要写好注册,异步验证,登录,激活用户等方法,当有请求带着方法名来访问UserServlet时,就会被自动调用。所以,UseServlet能写所有用户模块的功能。
3)在注册功能中,当用户名能被注册,就通过UUID生成一个64位的用户账户激活码code;这个code一存放到数据库中,二是通过邮箱jar包mail.jar。构建了一个MailUtils工具类,我们通过易邮邮箱服务器管理软件,自己建立一个邮箱账号service@store.com代表官方账号。用户填写的邮箱账号是收件方。通过MailUtils的构建邮件发送操作。官方账号将带有访问UserServlet的激活方法active发送给了用户的邮箱。用户点击了链接就携带了code访问UserServlet的active方法。然后active方法通过这个code与数据库中的code比较。如果相等。就表示是正确的激活码。把数据库中的激活状态state设置成2 .就表示这个用户激活了。
4)在验证用户是否登录成功。除了判断用户名是否正确,还需要用户的状态是否是激活的。三者都满足才算激活成功。
5)退出功能的核心原理就是消除session中存放的用户实体。采用invalidate()手动销毁的方法。以后如果做自动登录,也要销毁cookie中的用户实体
6)在注册表单中,有一项生日,是输入框形式的,上传到Servlet中,得到的是字符串类型的生日日期,但是我们的User类的生日变量是Date的。这样子,通过JavaBean封装会出现String和Date不匹配的情况,就会报错。通过工具类MyDateConverter注册,可以完成String 类型向Date类型的转换。了解即可
   总结,项目运用到的综合知识很多。现在离能独立实现完整功能还有不小的差距,希望通过不断总结方法,掌握知识运用技巧,理解学习过的知识,坚持做完每日的模块功能,提高编程水平。
回复 使用道具 举报
万冕

商城实战一

首先是注册.在用户注册用户名时,用jq和ajax异步校验用户名是否存在,就是拿到文本框用户名,然后去数据库里查找,
然后再返回一个user对象,去判断是否为空,如果为空就返回1,如果不为空就返回2,在jsp里写一个失焦事件,如果data==1
则是可以用,存入request,在msg.jsp里打印信息,注册成功后同时发送一封邮件给用户去激活账号,激活邮件里传入了需要
执行的方法名和激活码,当用户点击这个激活码时,拿到激活码去数据库里查询,如果有查询到,就将用户的状态改变为已激活
状态,并且把激活码清空

登陆就是拿到用户名和密码,在sql里判断状态码是否是已激活的状态码,如果不是则提示用户名或者密码或者账号未激活,
反之则登陆成功

用户退出就是在点击退出时,提交到Servlet,然后在Servlet里执行摧毁Session,再进行页面跳转,摧毁Session可以把用户的
所有记录都清除,这样安全性高一些



回复 使用道具 举报
张裕
商城实战一
用户模块
        登录功能
        跟之前的案例没什么区别 唯一多了一个判断条件
        就是用户激活状态的判断 根据激活状态来决定用户的登录

        注册功能
        比之前多了一个步骤 就是邮件的激活
        注册的时候通过SMTP协议发送一封携带激活码的邮件到用户的邮箱中
        用户点击邮箱中的链接 执行方法 通过传入的激活码到数据库中匹配用户
        匹配到用户后修改用户的state状态 并将激活码置为null
        给出激活成功的提示 让用户进行登录

        退出功能
        删除浏览器中的session属性 指定的持久性cookie属性
        重定向页面
回复 使用道具 举报
郭明杰:
第一天就一个新东西,邮箱
*邮箱服务器:如果一台电脑安装了邮箱服务器的软件,这台电脑称为是邮箱服务器
*电子邮箱:就是邮箱服务器上的一块空间,通过电子邮箱帐号访问这块空间的数据
*收发邮件的协议:发邮件SMTP协议:
        收邮件POP3协议,IMAP协议
*收发邮件的流程:安装并配置邮箱服务器,在MailUtils里:获得连接,构建邮件(1 TO:收件人  CC:抄送  BCC:密送  2 主题   3 正文)  发送邮件   在客户端接收邮件的软件接收

实现退出登录操作,直接把Session清除
回复 使用道具 举报
施炎生
写在了xmid中比较清晰,就发截图吧

商城一.PNG (99.58 KB, 下载次数: 6)

商城一.PNG
回复 使用道具 举报
陈叶隆
业务逻辑
【用户的注册功能】
在首页上点击【注册】链接:
跳转到注册页面:
在注册页面中输入相关的信息:
    * 进行表单校验:JQuery实现校验.
    * 异步用户名校验:
点击【注册】按钮:提交到Servlet:
在Servlet中调用业务层调用Dao完成保存操作,同时发送一封激活邮件:
【激活用户】
在邮箱中点击【激活连接】
提交到Servlet:
    * 根据激活码查询用户:
        * 修改用户状态:
        * 将激活码置为null:
页面跳转:
【用户登录】
在首页上点击【登录】链接.
跳转到登录页面:
在登录页面中输入信息:
点击【登录】按钮:
【用户退出】
在首页上点击【退出】链接
提交到Servlet:销毁session.
页面跳转:
回复 使用道具 举报
刘文峰
商城实战第一天,今天主要是用户模块(登录,注册,退出登录...)的实现.以前实现一个功能就需要创建一个servlet,现在一个模块创建一个servlet继承baseservlet就行了,每个功能的实现定义为servlet里的方法.这样,一个servlet就可以实现模块里的所有功能.还有,基于mvc思想和安全性,页面之间不再相互跳转,想要跳转页面由jsp---servlet---jsp实现.
今天的案例中比较用户注册比较复杂一点,和之前相比,多了注册成功后需要去邮箱激活账户.需要手动给用户设置状态(默认为未激活)和激活码(激活码介意通过UUID获得)存到数据库,用户激活账户时通过激活码到数据库查询,相同则将用户改为激活状态并将激活码清空,这样就可以完成账户的激活.因为有了激活账户这个条件,在登录时除了用户名和密码之外,还要对状态进行判断,未激活则无法登陆.退出登录将session清空即可.
回复 使用道具 举报
常小天
今天开始进行网上商城的实战操作。编写这样一个项目的时候我们采用分模块编写的方式来完成,今天的模块是用户方面的模块,即操作用户表user的所有方法的编写。在编写各个模块的代码之前,先编写一个jsp向servlet发送请求跳转至网站首页,这样操作比起直接访问首页的jsp页面要更灵活,因为我们可以在servlet中进行一些处理,例如查询最新商品信息将其显示到首页等。这项操作完成后,我们就可以开始编写与user表相关的各个方法了。首先是注册操作。同样先编写一个方法跳转至注册页面,然后进行注册,注册时要进行异步的用户名校验。此外还可以进行用户名和密码的非空校验。注册操作跟以前的案例一样,稍有不同的是今天的注册操作还有一个发送激活邮件的操作。这一操作通过引用工具类完成,发送的邮件内容为一个超链接,地址就是我们服务器上的servlet,在servlet的对应方法中根据超链接传入的激活码查找user表,获得user对象,如果对象存在就清空这个对象内的激活码,并将状态码改为已激活。接下来编写登录操作的代码,这次的登录中我们不仅要对用户名和密码进行校验,还要检查状态是否为已激活,未激活的账号不能登录成功。最后我们编写了一个退出的方法。退出的方法比较简单,就是手动的销毁session即可。
回复 使用道具 举报
李思贤:一:用户模块
1:编写通用Servlet
传统的方式会导致整个项目Servlet很多,现在让一个模块只用一个通用的Servlet

搭建开发环境:
步骤一:引入开发jar包:
1:mysql    1
2:c3p0     1
3:dbutils   1
4:beanutils  2
5:jstl      2
6:mail     1
7:fileupload 2



步骤二 :创建包结构
Domain  dao service  utils  web
Web下创建servlet listener  filter





步骤三:引入工具类和配置文件
JDBC    C3P0配置文件



步骤四:编写通用Servlet
在utils中写BaseServlet  不需要配置
继承HttpServlet 重写service方法
注意乱码  接收参数method
获得子类class对象 this.getClass();
获得子类中方法 getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
执行.

代码如下:public class BaseServlet extends HttpServlet{

        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp)
                        throws ServletException, IOException {
                req.setCharacterEncoding("UTF-8");
                resp.setContentType("text/html;charset=UTF-8");
                //接收参数
                String methodName = req.getParameter("method");
                if(methodName==null||"".equals(methodName)){
                        resp.getWriter().println("method为null");
                        return;
                }
                //获得子类Class对象
                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();
                }                
        }       
}




用户模块的代码实现:
步骤一:创建数据库和表
用户表

步骤二:引入页面
资料里面所有图片包 样式包   页面放在一个jsp文件夹下,html需要改jsp

因为index.jsp中东西都是先从Servlet中查出来的 所以可以在WEB根目录创建一个Index.jsp让它
转发到IndexServlet
<body>
<jsp:forward page="/IndexServlet">
        <jsp:param value="index" name="method"/>
</jsp:forward>       
</body>

IndexServlet中继承BaseServlet.先什么都不做,转发到JSP下的index.jsp
public class IndexServlet extends BaseServlet {
        private static final long serialVersionUID = 1L;

        public String index(HttpServletRequest req,HttpServletResponse resp){
                return "jsp/index.jsp";
        }
}

为了方便以后扩展,面向接口编程.在dao包下创建UserDao接口,在dao包建impl子包,写个个实现类UserDaoImpl实现接口,Service也一样.最后UserServlet继承BaseServlet.


步骤三:用户的注册功能
点击注册,也让他先经过Servlet,在跳转到regist.jsp页面  这样更安全.

AJAX异步用户名校验.
1引入JS
2 给用户名text文本框添加一个blur事件
拿到user的值 post提交给UserServlet...去数据库中查询是否已存在,返回一个user对象,
返回data在regist.jsp中判断.  注意样式和可以设置提交按钮不显示.
$(function () {
                $("#username").blur(function () {
                        var $value=$(this).val();
                        if($value!=""){
                                $.post("${ pageContext.request.contextPath }/UserServlet",{"method":"checkUsername","username":$value},function(data){                               
                                        if(data==1){
                                                $("#s1").html("<font color='green'>用户名可以使用</font>");
                                                $("#regBut").attr("disabled",false);
                                        }else{
                                                $("#s1").html("<font color='red'>用户名已存在</font>");
                                                $("#regBut").attr("disabled",true);                                       
                                }
                        });
                        }
                });
        });


下一步完成注册功能,给标签都设置好name属性,找到form表单 设置action method
这里action 跳到UserServlet不用?method了,在下面设置一个隐藏标签,name=”method” value=”regist”  即可

在UserServlet中 接收参数,封装注意字符串转为date类型  调用Service.这里注意 user里面数据不全,要给补全.




步骤四:发送激活邮件(了解):
邮箱服务器:一台电脑有邮箱服务器,就可称为邮箱服务器
收发邮件的协议: 发邮件SMTP协议  默认端口号25   收邮件POP3协议 默认端口号110

手动搭建邮箱服务器:
安装完成 需要配置易邮邮箱服务器
工具 服务器设置 该域名
注册账号
客户端常用收发邮件软件:
OutLook :微软,收费
FoxMail :免费

安装收邮件客户端软件:FoxMail
发送邮件的工具类不要求会写,但要会用

测试完毕后再UserServiceImpl  中userDao.save(user)方法后发送激活邮件
//发送邮件
                MailUtils.sendMail(user.getEmail(), code);



步骤五:激活用户了:
点击激活链接,提交到Servlet中,Servlet中写active 方法
根据激活码查询用户, 找到这user对象
修改用户状态 user.setState(2);
将激活码置为空        user.setCode(null);
页面跳转 userService.update(user);
                 req.setAttribute("msg","激活成功,请去登陆!");



步骤六:用户登录:
登录页面,输入信息,登录
接收参数
封装数据
调用业务层
查找用户名 密码 都正确 且 已激活的用户
判断 跳转页面


步骤七:用户退出:
在首页退出,提交到Servlet 销毁session.
req.getSession().invalidate();

这里注意一下,如果你有自动登录功能,点击退出的 时候 还要记得消除cookie
回复 使用道具 举报
郑志祥

第一天(用户模块)
1.登录
2.注册

1.创建数据库和表
2、。

一、访问主页的jsp,在jsp中转发到Servlet
(因为转发路径不会变,为了隐藏Servlet,防止被攻击)
二、再主页添加一个注册超连接



三、mvc的思想, jsp(V)显示和Servlet(C)接收数据,处理业务,页面跳转
《注册连接,不直接跳到jsp,为了满足思想,为了防止以后的添加功能,跳Servlet,再跳到jsp》



网上商城的搭建第一天,
a。今天学习的建包结构,跟之前学习有点差别,多建了几个接口,在项目运行过程中,这些接口也跟着抛出异常。
b。将之前写过的html引进来,将之前的相对路径,利用替换方式将其替换(打开登录主页,将html的图片替换,变成jsp文件)
c。将主页面的index.jsp的菜单栏与分类栏,进行提取到Menu.jsp中,利用<%@include file="menu.jsp" %> 引入,可以实现。
所以我们点注册,其实是点到menu.jsp中的注册超链接,(不直接跳到regist.jsp,先访问到UserServlet。在转发到注册的jsp,原因是因为转发不会在网址栏显示跳转路径,防止被攻击)
d。跳转到regist.jsp之后,在该jsp中进行异步校验(用户名是否存在)在用户名与注册按钮处预埋id,利用失去焦点触发事件,(SerVlet的路径,{ 方法,参数} 回调函数(data)) 里面的data是通过查询数据库,返回来的ExistUser,进行判断,打印回data,然后判断data进行相应的操作(1.用户名存在  2.用户名不存在)

f。完成异步校验用户名是否存在,接下来就要注册客户信息,存入数据库了,

g。下载一个易邮的邮箱服务器,在下载一个foxmai客户端(在web资料中有具体操作word)这有客户端的两个邮箱就可以互相发送邮件了(设置为localhost)导入一个编写发送邮件的工具类MailUtils  通过类名.方法后面跟着64个随机字符串(来发送邮件)其实就发送一个超连接来触动UserServlet里面的active方法,active方法就是通过查询数据和是否有一样的64个随机的字符串,如果有就开始修改数据库(将原来的状态1改位2,将随机字符串置为空)

登录:
a。通过Uservlet-Userviceimpl-UserDao来执行sql语句(执行sql记得多携带一个状态码2, )用户名,密码。
b。登录需要返回值(ExistUser)通过判断ExistUser来确定是否有激活(状态码默认为1,激活后状态码为2)
c。激活成功,进入主页,并将ExistUser保存Session  request.getSession().setAttribute("existUser", existUser); 目的是让ExistUser里面的携带的数据库信息被公共的访问(比如在登录的主页面,多了一个你好:张三)就是通过ExistUser.name来实现的
e。在登录主页index.jsp中也要判断返回值Exist是否为empty -- 如果是not  empty  ExistUser 就显示你好张三 ---如果是empty ExistUser的话,就显示登录,注册

回复 使用道具 举报
王清松
Mail
        概述
                邮箱服务器:一台安装邮箱服务器的软件,该电脑可称为邮箱服务器
                       
                电子邮箱:邮箱服务器的一块空间,通过电子邮箱账号访问该空间数据
        协议
                发邮件
                        SMTP
                                (Simple Mail Transfer Protocol):简单邮件传输协议
                                它是一组用于由源地址到目的地址传送邮件的规则
由它来控制信件的中转方式
                                默认端口号25
                收邮件
                        POP3
                                (Post Office Protocol - Version 3):邮局协议版本3
                                TCP/IP协议族中的一员
                                默认端口是110
                        IMAP
                                (Internet Mail Access Protocol):Internet邮件访问协议
        使用
                引入Jar包
                连接对象Session——获得连接
                        构造对象:
static Session getDefaultInstance(Properties props, Authenticator authenticator)
                                props:用于设置邮箱服务器,默认为连接本地
Properties props =new Properties();
props.setProperty("smtp","localhost");
                                authenticator接口:用于设置发送邮件的邮箱的账号密码("library@wqs.com","library")
new Authenticator(){
        @Override
        protected PasswordAuthentication getPasswordAuthentication()
        {
                return new PasswordAuthentication("library@wqs.com","library");
        }               
});
                邮件对象Message——构建邮件
                        构造对象:
Message message=new MimeMessage(Session session);
                                session:连接对象
                        设置发件人:
Address add=new InternetAddress(String address);
void setFrom(Address add)
                                address:发件人邮箱的字符串
                                add:发件人邮箱的IP地址
                        设置收件人:
void addRecipient(RecipienType type,Address address)
                                type:收件人条件
                                        TO发送
                                        CC抄送
                                        BCC暗送
                                address:收件人邮箱的IP地址
                        设置主题:
void setSubject(String title)
                                title:主题
                        设置正文:
void setContent(Object content,String format)
                                content:内容
                                format:格式
"text/html;charset=utf-8"
                发送对象Transport——发送邮件
                        static void send(Message msg)
                                msg:Message对象
回复 使用道具 举报
黄进安:

用户模块:
1. 在webcontent下建一个index.jsp作为整个商城项目的主页面(避免在网址栏上出现主页servlet,增加安全性),作为中间站跳转到商城主页(jsp/index.jsp).

2. 为什么主页跳转到注册登入页面要跳转到servlet,利用servlet进行跳转?
        MVC思想: jsp用于显示作用,servlet用于页面跳转,且使用servlet用户页面跳转,方便后续如果出现页面跳转前进行相关操作的业务需求
       
3. 为什么业务层和dao层要用接口来实现?
        a.增强扩展性 eg.利用创建实现类和多态创建接口对象,以接口对象作为相关方法的参数,当实现类类名删除或者删除的时候,不影响后续方法的调用
                代码:        UserDao userDao = new UserDaoImpl();
                                return userDao.findByUsername(username);
        b.可以使用动态代理增强类中的方法 eg.比如在方法中增加事务的开启和关闭
       
4. 在页面中的公共部分可以抽取出来单独作为一个jsp,利用页面包含调用 eg:<%@ include file="menu.jsp" %>

5. 注册:
                a.封装数据的时候注意数据库与页面提交的数据是否需要补充 eg:uid\state\code
                b.异常:DateConverter does not support default String to 'Date' conversion.
                  原因:因为我们提交的生日日期是date类型,我们使用beanutils不支持将字符串转换成date进行封装
                  使用MyDateConverter.java自定义工具类
                  注册日期的转换器: ConvertUtils.register(new MyDateConverter(), Date.class); 注: Data包: java.util.Date;
                c.使用异步校验用户名技术
                d.邮件激活功能业务: 查询激活码而code是否与数据库一致,一样的话更改用户状态state和清空code.
6. 登入:
                a.相较于之前多了一个激活状态查询,在dao层查询时直接查已激活的状态码即可

7. 退出
                a.利用手动销毁session方法清除用户信息
                b.后续有记住用户名功能的时候,也要清除cookies的信息

回复 使用道具 举报
许煜 每日总结
商城day1
项目准备 :前端页面 引入需要的jar包 加入配置文件 创建好pacage包结构
提取基础baseServlet
面向接口编程思想:提高代码规范性和可维护性.接口就是相当于一种规范类,为实现该接口的类制定规则,使得代码更加规范.维护和修改代码时也可以先通过修改接口的规则,再修改不合规则的实现类,代码看起来更有层次感.
Day1实现内容
  1 注册  01表单校验 02注册信息 03发送激活邮件 04 激活账号
  2 登录  根据用户名密码和激活状态判断呢是否可以登录
  3 退出  销毁登录成功时保存在session中的user信息
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马