打听一下,这里不能布料批发senpn图了吗

打听一下,这里不能发se图了吗_百度知道
打听一下,这里不能发se图了吗
我有更好的答案
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。iphone se 怎么发短信_百度知道
iphone se 怎么发短信
我有更好的答案
①开机②解锁屏幕③找到一个叫做信息的图标点一下④点击右上角⑤然后编辑短信内容和收信人⑥点击发送按钮(箭头向上那个就是)另外,你真特么是个人才,你就是来水经验的PS:我也是
额😓!真的不懂?
为您推荐:
其他类似问题
会计证的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。苹果se摔了一下,维修多少钱?图是具体情况_百度知道
苹果se摔了一下,维修多少钱?图是具体情况
我有更好的答案
送正规售后可能要2298吧,不过你可以尝试找iphonezu.com解决,他们苹果手机烂机不开机有办法送售后重新换一台机
采纳率:64%
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。&figure&&img src=&https://pic1.zhimg.com/v2-421a103b9baaef3e1ed4_b.jpg& data-rawwidth=&436& data-rawheight=&306& class=&origin_image zh-lightbox-thumb& width=&436& data-original=&https://pic1.zhimg.com/v2-421a103b9baaef3e1ed4_r.jpg&&&/figure&&p&&b&-----更新-----&/b&:&/p&&p&1.添加了修改文章时,一键导入原文的功能。&/p&&p&2.添加了前台搜索框、可以进行全文关键字搜索;&/p&&p&3.添加了文章标签模块,支持新增/修改文章的时候编辑标签,也可对标签单独管理;&/p&&p&4.添加了Ajax版的登录,这样登录完成后不需要离开当前页面(之前是点击【登录注册】跳转到登录注册页面进行操作)&/p&&hr&&h2&&b&项目概述:&/b&&/h2&&p&这是一个只用了原生Java+Jsp+Servlet开发的一个个人博客系统。实现了个人博客的基本功能,前台页面可以进行文章浏览,关键词搜索,登录注册;登陆后支持对文章进行感谢、评论;然后还可以对评论进行评论和点赞....。后台可以对文章进行增删改查(文章编辑器采用了百度开源的Ueditor);分类分页查找;标签管理。&/p&&p&&b&前端:&/b&Html、css、Javascript、Ajax、Bootstrap、Jquery&/p&&p&&b&后端:&/b&Java(反射)、Jsp、Servlet&/p&&p&&b&服务器:&/b&Tomcat;&b&数据库:&/b&Mysql&/p&&h2&&b&项目演示:&/b&&/h2&&a class=&video-box& href=&https://link.zhihu.com/?target=https%3A//www.zhihu.com/video/416704& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic2.zhimg.com/80/v2-282cad999e7e00f304d01_b.jpg& data-lens-id=&416704&&
&img class=&thumbnail& src=&https://pic2.zhimg.com/80/v2-282cad999e7e00f304d01_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/416704&/span&
&p&&b&-----以下是原文------&/b&&/p&&p&预警:&/p&&p&此篇完全是流水账,记录了整个项目实际诞生的过程!道路曲折,文字啰嗦,慎入!!!&/p&&p&半年多前,看了《&i&Head First HTML与CSS(第2版)》,跟着做了一个个人博客的静态页面,这个页面也是相当的简单,再后来用bootstap给页面做了一点优化,看起来像一个真正的博客页面了!然后,这个项目就存放在电脑中很久。。。。再后来,学了java,才了解到,可以用java+mysql+tomcat真正实现一个个人博客系统,当时激动坏了!说干就干!于是,这个【个人博客系统】终于诞生了!&/i&&/p&&hr&&h2&1.静态HTML+CSS的博客页面&/h2&&p&当然,没有软件开发经验、也没有项目经历,不熟悉软件项目开发的一般流程,对于这个【个人博客系统】我是根据自己的需求一点点写出来的!各种功能也是逐渐完善的!&/p&&p&最开始,写出了静态的html+css页面,用bootsrtap修饰后页面的效果大概是这样的:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-8a8fb5a8cf080655ebd0a7c4a8b74dc2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1371& data-rawheight=&840& class=&origin_image zh-lightbox-thumb& width=&1371& data-original=&https://pic3.zhimg.com/v2-8a8fb5a8cf080655ebd0a7c4a8b74dc2_r.jpg&&&/figure&&p&当时,页面比截图中呈现的要简陋不少,首先,还没有文字编辑器,所以文章,是赤裸裸的文字效果,其次,也没有【留言区】,因为留言功能模块,是我最后才添加上去的!!!右边About和Archives...这个就是套用&i&Head First HTML与CSS书中的博客小例子&/i&的,至今还未修改掉,打算先放着,以后可以放文章分类标签、或者放些图片之类的!&/p&&p&但是,不论如何,页面成型了!反正乍一眼看上去就是一个博客的样子,然后我又写了静态的文章分类页面,效果大概是这样:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-38d6db7fc0ec00c42e24fdab5b092e43_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1352& data-rawheight=&831& class=&origin_image zh-lightbox-thumb& width=&1352& data-original=&https://pic1.zhimg.com/v2-38d6db7fc0ec00c42e24fdab5b092e43_r.jpg&&&/figure&&p&最后,我又颇费心思地设计了一下首页,因为博客网站不能一进来全是文章吧,要有个好看的门脸!!!于是首页也出来了:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-fb2f0f5433d1a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1385& data-rawheight=&774& class=&origin_image zh-lightbox-thumb& width=&1385& data-original=&https://pic1.zhimg.com/v2-fb2f0f5433d1a_r.jpg&&&/figure&&p&后来加上了标签系统,导航条上加了搜索框,效果是这样的:&/p&&a class=&video-box& href=&https://link.zhihu.com/?target=https%3A//www.zhihu.com/video/844096& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic3.zhimg.com/80/v2-e8aea9ce0f9f1f3ac73e_b.jpg& data-lens-id=&844096&&
&img class=&thumbnail& src=&https://pic3.zhimg.com/80/v2-e8aea9ce0f9f1f3ac73e_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/844096&/span&
&p&至此,博客项目的前台静态页面基本都已经有了,下面开始设计后台页面和数据存储!(服务器用Tomcat、数据存储用Mysql)&/p&&h2&2.Mysql表结构设计&/h2&&p&首先,一级分类有6个模块:&/p&&p&Java、Python、数据库服务器、CS其他、生活杂谈、登录注册&/p&&p&对应数据库myblog下的categary表,表中就2个字段,id和name。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-aa5f052d6ca9c53e56c7a5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&945& data-rawheight=&517& class=&origin_image zh-lightbox-thumb& width=&945& data-original=&https://pic2.zhimg.com/v2-aa5f052d6ca9c53e56c7a5_r.jpg&&&/figure&&p&二级分类20个模块,对应数据库myblog中的表categary_2,表中有三个字段:id、mainid、name其中mainid即此二级分类名称所属的一级分类id(譬如第10条记录:id=10,mainid=3,name=Tomcat即表示Tomcat所属的一级分类是id=3的一级分类,即数据库服务器)通过mainid这个外键,即可将表categary_2和表categary关联起来。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-0be3bbfbf486dd8d12b65_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&939& data-rawheight=&518& class=&origin_image zh-lightbox-thumb& width=&939& data-original=&https://pic1.zhimg.com/v2-0be3bbfbf486dd8d12b65_r.jpg&&&/figure&&p&分类的sql表建好后,最关键的来了,是文章的sql表,文章表起名为articles,包含哪些字段呢?一篇文章,在数据库中除了基本的id区分外,还应该有文章作者author、标题title、摘要subtitle、内容content、发布时间createdate、主分类mid、文章分类cid(二级分类)&/p&&figure&&img src=&https://pic1.zhimg.com/v2-bfdae8cf7942066bdc1bf39aa0597af0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1089& data-rawheight=&532& class=&origin_image zh-lightbox-thumb& width=&1089& data-original=&https://pic1.zhimg.com/v2-bfdae8cf7942066bdc1bf39aa0597af0_r.jpg&&&/figure&&p&建表SQL语句如下:&/p&&div class=&highlight&&&pre&&code class=&language-mysql&&&span&&/span&&span class=&k&&CREATE&/span& &span class=&k&&TABLE&/span& &span class=&ss&&`articles`&/span& &span class=&p&&(&/span&
&span class=&ss&&`id`&/span& &span class=&kt&&int&/span&&span class=&p&&(&/span&&span class=&mi&&50&/span&&span class=&p&&)&/span& &span class=&k&&NOT&/span& &span class=&no&&NULL&/span& &span class=&kp&&AUTO_INCREMENT&/span&&span class=&p&&,&/span&
&span class=&ss&&`author`&/span& &span class=&kt&&varchar&/span&&span class=&p&&(&/span&&span class=&mi&&30&/span&&span class=&p&&)&/span& &span class=&k&&DEFAULT&/span& &span class=&no&&NULL&/span&&span class=&p&&,&/span&
&span class=&ss&&`title`&/span& &span class=&kt&&varchar&/span&&span class=&p&&(&/span&&span class=&mi&&500&/span&&span class=&p&&)&/span& &span class=&k&&DEFAULT&/span& &span class=&no&&NULL&/span&&span class=&p&&,&/span&
&span class=&ss&&`subtitle`&/span& &span class=&kt&&varchar&/span&&span class=&p&&(&/span&&span class=&mi&&500&/span&&span class=&p&&)&/span& &span class=&k&&DEFAULT&/span& &span class=&no&&NULL&/span&&span class=&p&&,&/span&
&span class=&ss&&`content`&/span& &span class=&kt&&text&/span&&span class=&p&&,&/span&
&span class=&ss&&`createdate`&/span& &span class=&kt&&datetime&/span& &span class=&k&&DEFAULT&/span& &span class=&no&&NULL&/span&&span class=&p&&,&/span&
&span class=&ss&&`cid`&/span& &span class=&kt&&int&/span&&span class=&p&&(&/span&&span class=&mi&&20&/span&&span class=&p&&)&/span& &span class=&k&&DEFAULT&/span& &span class=&no&&NULL&/span&&span class=&p&&,&/span&
&span class=&ss&&`mid`&/span& &span class=&kt&&int&/span&&span class=&p&&(&/span&&span class=&mi&&20&/span&&span class=&p&&)&/span& &span class=&k&&DEFAULT&/span& &span class=&no&&NULL&/span&&span class=&p&&,&/span&
&span class=&k&&PRIMARY&/span& &span class=&k&&KEY&/span& &span class=&p&&(&/span&&span class=&ss&&`id`&/span&&span class=&p&&),&/span&
&span class=&k&&KEY&/span& &span class=&ss&&`fk_article_categary`&/span& &span class=&p&&(&/span&&span class=&ss&&`cid`&/span&&span class=&p&&),&/span&
&span class=&k&&KEY&/span& &span class=&ss&&`fk_article_maincat`&/span& &span class=&p&&(&/span&&span class=&ss&&`mid`&/span&&span class=&p&&),&/span&
&span class=&k&&CONSTRAINT&/span& &span class=&ss&&`fk_article_categary`&/span& &span class=&k&&FOREIGN&/span& &span class=&k&&KEY&/span& &span class=&p&&(&/span&&span class=&ss&&`cid`&/span&&span class=&p&&)&/span& &span class=&k&&REFERENCES&/span& &span class=&ss&&`categary_2`&/span& &span class=&p&&(&/span&&span class=&ss&&`id`&/span&&span class=&p&&),&/span&
&span class=&k&&CONSTRAINT&/span& &span class=&ss&&`fk_article_maincat`&/span& &span class=&k&&FOREIGN&/span& &span class=&k&&KEY&/span& &span class=&p&&(&/span&&span class=&ss&&`mid`&/span&&span class=&p&&)&/span& &span class=&k&&REFERENCES&/span& &span class=&ss&&`categary`&/span& &span class=&p&&(&/span&&span class=&ss&&`id`&/span&&span class=&p&&)&/span&
&span class=&p&&)&/span& &span class=&kp&&ENGINE&/span&&span class=&o&&=&/span&&span class=&n&&InnoDB&/span& &span class=&kp&&AUTO_INCREMENT&/span&&span class=&o&&=&/span&&span class=&mi&&145&/span& &span class=&k&&DEFAULT&/span& &span class=&kp&&CHARSET&/span&&span class=&o&&=&/span&&span class=&n&&utf8&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&&p&可见,一篇文章有2个外键,分别对应主分类categay和二级分类categary_2.然后,我们还要开发登录注册的功能、评论点赞的功能,所以后期加入了User表记录注册用户信息comments表记录文章评论和点赞信息。&/p&&h2&3.博客后台管理系统设计&/h2&&p&数据库表设计完了,下一步该从哪下手呢?毕竟页面还是死(静态)的啊?!所有的文章数据我可以通过Mysql来操作了,可以实现文章的查询、编辑、删除。但!是!我不能每次发布文章或者转载别人的文章都要通过mysql后台手动操作吧?那多麻烦啊!我需要一个前台页面操作的【博客文章后台管理系统】,这样才能满足我对博客文章的基本需求:增删改查,当然这些操作一定是要在浏览器前台页面完成的!这样才够人性化!&/p&&p&于是,还是同样的套路,先写出后台管理系统的静态页面:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-3fc02d7ee32ac511b83d940fcadce403_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1362& data-rawheight=&895& class=&origin_image zh-lightbox-thumb& width=&1362& data-original=&https://pic2.zhimg.com/v2-3fc02d7ee32ac511b83d940fcadce403_r.jpg&&&/figure&&p&博客后台管理系统需要实现的功能很简单:新增博客文章、对博客文章进行编辑修改、删除文章、查询特定文章。也就是增删改查!静态页面还是相对比较容易写的,毕竟就是html+css的堆叠,加上简单的javascript和bootstrap!难点在于页面点击事件的跳转(跳转到对应的servlet)程序和mysql后台数据的交互,再取数据到前台呈现!当然,这对于初学java的我很有挑战,然而,也充满了乐趣!这,不就是所谓的java全栈工程师么?哈哈,小小得意下^_^&/p&&h2&4.博客文章编辑器——Ueditor的集成&/h2&&p&个人博客系统,最重要的当然是发表博客文章了,发表个人文章,我们只能求助于开源的文本编辑器,要求简单好用即可,最好还能给文章添加图片、音乐、代码块。综合考虑后,我选择了百度开源的文本编辑器—Ueditor&/p&&a href=&https://link.zhihu.com/?target=http%3A//ueditor.baidu.com/website/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-a712d7d3465cce7ad5c23_180x120.jpg& data-image-width=&156& data-image-height=&104& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UEditor - 首页&/a&&p&&br&&/p&&h2&5.Filter过滤器应用&/h2&&p&filter过滤器可以拦截每一次的servlet请求,常用于用户登录状态的记录和字符编码的转换!这里我还用filter构造了一下地址过滤,让特定的访问地址转换到相对应的servlet程序中!实现跳转功能!&/p&&p&&br&&/p&&h2&6.Servlet代码的重构——java反射&/h2&&p&项目初期,是没有用java反射的。通常一类主功能下有多个页面,一个页面也可能有很多子模块,每个子模块需要单独写一个servlet来处理,这样整个项目会积累越来越多的servlet,而且后期随着功能和页面越来越多,那有功能变动或者页面改动,整个项目就非常不容易去修改和维护!但是,用java反射处理后,一类主功能,基本对应了一个servlet,一个servlet下包含了任意多个子模块,这样程序就精简了不少,而且便于后期的迭代和维护!&/p&&p&&br&&/p&&h2&7.开发登录注册模块&/h2&&p&登录注册模块的主要功能:实现登录注册。实现登录注册还是很重要的,而且,需要记录用户的注册信息、登录或退出状态、因为,后面还有文章的评论,点赞功能,都需要用户注册并且登录状态下操作!后台数据库中新建User表,表字段有:id、telephone、email、username、password。&/p&&p&登录注册界面如下:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ffee9f163f4d402dc7bffe_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1276& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1276& data-original=&https://pic3.zhimg.com/v2-ffee9f163f4d402dc7bffe_r.jpg&&&/figure&&p&注册需要输入用户邮箱、用户名、手机号、密码,其中手机号和邮箱都是唯一的。登录时支持邮箱+密码或者手机号+密码登录。在前台用了简单的javascript对邮箱、手机号进行了校验,&/p&&p&拒绝无效的手机号、邮箱登录注册,校验通过后,则提交给服务器处理。&/p&&p&JS校验代码如下:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&o&&&&/span&&span class=&nx&&script&/span& &span class=&nx&&type&/span&&span class=&o&&=&/span&&span class=&s2&&&application/x-javascript&&/span&&span class=&o&&&&/span&
&span class=&kd&&function&/span& &span class=&nx&&validate&/span&&span class=&p&&(&/span&&span class=&nx&&f&/span&&span class=&p&&){&/span&
&span class=&kd&&var&/span& &span class=&nx&&re1&/span& &span class=&o&&=&/span& &span class=&sr&&/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/&/span&&span class=&p&&;&/span&
&span class=&kd&&var&/span& &span class=&nx&&input1&/span& &span class=&o&&=&/span& &span class=&nx&&f&/span&&span class=&p&&.&/span&&span class=&nx&&userid&/span&&span class=&p&&.&/span&&span class=&nx&&value&/span&&span class=&p&&;&/span&
&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&sr&&/^\d+$/&/span&&span class=&p&&.&/span&&span class=&nx&&test&/span&&span class=&p&&(&/span&&span class=&nx&&input1&/span&&span class=&p&&)&/span&&span class=&o&&==&/span&&span class=&kc&&true&/span&&span class=&p&&){&/span&
&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&o&&!&/span&&span class=&p&&(&/span&&span class=&sr&&/^\d{11,12}$/&/span&&span class=&p&&.&/span&&span class=&nx&&test&/span&&span class=&p&&(&/span&&span class=&nx&&input1&/span&&span class=&p&&))){&/span&
&span class=&nx&&alert&/span&&span class=&p&&(&/span&&span class=&s2&&&请输入11-12位的手机号!&&/span&&span class=&p&&);&/span&
&span class=&nx&&f&/span&&span class=&p&&.&/span&&span class=&nx&&userid&/span&&span class=&p&&.&/span&&span class=&nx&&focus&/span&&span class=&p&&();&/span&
&span class=&k&&return&/span& &span class=&kc&&false&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&span class=&k&&else&/span&&span class=&p&&{&/span&
&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&o&&!&/span&&span class=&p&&(&/span&&span class=&nx&&re1&/span&&span class=&p&&.&/span&&span class=&nx&&test&/span&&span class=&p&&(&/span&&span class=&nx&&input1&/span&&span class=&p&&))){&/span&
&span class=&nx&&alert&/span&&span class=&p&&(&/span&&span class=&s2&&&请输入正确格式的邮箱地址!&&/span&&span class=&p&&);&/span&
&span class=&nx&&f&/span&&span class=&p&&.&/span&&span class=&nx&&userid&/span&&span class=&p&&.&/span&&span class=&nx&&focus&/span&&span class=&p&&();&/span&
&span class=&k&&return&/span& &span class=&kc&&false&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&o&&!&/span&&span class=&p&&(&/span&&span class=&sr&&/^[0-9a-zA-Z.]{6,16}$/&/span&&span class=&p&&.&/span&&span class=&nx&&test&/span&&span class=&p&&(&/span&&span class=&nx&&f&/span&&span class=&p&&.&/span&&span class=&nx&&userpass&/span&&span class=&p&&.&/span&&span class=&nx&&value&/span&&span class=&p&&))){&/span&
&span class=&nx&&alert&/span&&span class=&p&&(&/span&&span class=&s2&&&密码必须是6~16位!&&/span&&span class=&p&&);&/span&
&span class=&nx&&f&/span&&span class=&p&&.&/span&&span class=&nx&&userpass&/span&&span class=&p&&.&/span&&span class=&nx&&focus&/span&&span class=&p&&();&/span&
&span class=&k&&return&/span& &span class=&kc&&false&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&k&&return&/span& &span class=&kc&&true&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kd&&function&/span& &span class=&nx&&validate2&/span&&span class=&p&&(&/span&&span class=&nx&&f&/span&&span class=&p&&){&/span&
&span class=&kd&&var&/span& &span class=&nx&&re2&/span& &span class=&o&&=&/span& &span class=&sr&&/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/&/span&&span class=&p&&;&/span&
&span class=&kd&&var&/span& &span class=&nx&&input1&/span& &span class=&o&&=&/span& &span class=&nx&&f&/span&&span class=&p&&.&/span&&span class=&nx&&username&/span&&span class=&p&&.&/span&&span class=&nx&&value&/span&&span class=&p&&;&/span&
&span class=&kd&&var&/span& &span class=&nx&&input2&/span& &span class=&o&&=&/span& &span class=&nx&&f&/span&&span class=&p&&.&/span&&span class=&nx&&useremail&/span&&span class=&p&&.&/span&&span class=&nx&&value&/span&&span class=&p&&;&/span&
&span class=&kd&&var&/span& &span class=&nx&&input3&/span& &span class=&o&&=&/span& &span class=&nx&&f&/span&&span class=&p&&.&/span&&span class=&nx&&userpass&/span&&span class=&p&&.&/span&&span class=&nx&&value&/span&&span class=&p&&;&/span&
&span class=&kd&&var&/span& &span class=&nx&&input4&/span& &span class=&o&&=&/span& &span class=&nx&&f&/span&&span class=&p&&.&/span&&span class=&nx&&userphone&/span&&span class=&p&&.&/span&&span class=&nx&&value&/span&&span class=&p&&;&/span&
&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&sr&&/^\d+$/&/span&&span class=&p&&.&/span&&span class=&nx&&test&/span&&span class=&p&&(&/span&&span class=&nx&&input4&/span&&span class=&p&&)&/span&&span class=&o&&==&/span&&span class=&kc&&true&/span&&span class=&p&&){&/span&
&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&o&&!&/span&&span class=&p&&(&/span&&span class=&sr&&/^\d{11,12}$/&/span&&span class=&p&&.&/span&&span class=&nx&&test&/span&&span class=&p&&(&/span&&span class=&nx&&input4&/span&&span class=&p&&))){&/span&
&span class=&nx&&alert&/span&&span class=&p&&(&/span&&span class=&s2&&&请输入11-12位的手机号!&&/span&&span class=&p&&);&/span&
&span class=&nx&&f&/span&&span class=&p&&.&/span&&span class=&nx&&userphone&/span&&span class=&p&&.&/span&&span class=&nx&&focus&/span&&span class=&p&&();&/span&
&span class=&k&&return&/span& &span class=&kc&&false&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&&span class=&k&&else&/span&&span class=&p&&{&/span&
&span class=&nx&&alert&/span&&span class=&p&&(&/span&&span class=&s2&&&请确保输入的手机号码为数字!&&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&o&&!&/span&&span class=&p&&(&/span&&span class=&nx&&re2&/span&&span class=&p&&.&/span&&span class=&nx&&test&/span&&span class=&p&&(&/span&&span class=&nx&&input2&/span&&span class=&p&&))){&/span&
&span class=&nx&&alert&/span&&span class=&p&&(&/span&&span class=&s2&&&请输入正确格式的邮箱地址!&&/span&&span class=&p&&);&/span&
&span class=&nx&&f&/span&&span class=&p&&.&/span&&span class=&nx&&useremail&/span&&span class=&p&&.&/span&&span class=&nx&&focus&/span&&span class=&p&&();&/span&
&span class=&k&&return&/span& &span class=&kc&&false&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&o&&!&/span&&span class=&p&&(&/span&&span class=&sr&&/^[0-9a-zA-Z.]{6,16}$/&/span&&span class=&p&&.&/span&&span class=&nx&&test&/span&&span class=&p&&(&/span&&span class=&nx&&input3&/span&&span class=&p&&))){&/span&
&span class=&nx&&alert&/span&&span class=&p&&(&/span&&span class=&s2&&&密码必须是6~16位!&&/span&&span class=&p&&);&/span&
&span class=&nx&&f&/span&&span class=&p&&.&/span&&span class=&nx&&userpass&/span&&span class=&p&&.&/span&&span class=&nx&&focus&/span&&span class=&p&&();&/span&
&span class=&k&&return&/span& &span class=&kc&&false&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&k&&return&/span& &span class=&kc&&true&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&o&&&&/span&&span class=&err&&/script&&/span&
&/code&&/pre&&/div&&p&下面,我们来以登录为例,看一下用户登录时的Java代码实现。&/p&&p&首先,页面登录的部分html代码如下:&/p&&div class=&highlight&&&pre&&code class=&language-html&&&span&&/span&&span class=&p&&&&/span&&span class=&nt&&form&/span& &span class=&na&&action&/span&&span class=&o&&=&/span&&span class=&s&&&/Lyon/foreuserLogin&&/span& &span class=&na&&method&/span&&span class=&o&&=&/span&&span class=&s&&&post&&/span& &span class=&na&&onSubmit&/span&&span class=&o&&=&/span&&span class=&s&&&return validate(this)&&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&input&/span& &span class=&na&&type&/span&&span class=&o&&=&/span&&span class=&s&&&text&&/span& &span class=&na&&name&/span&&span class=&o&&=&/span&&span class=&s&&&userid&&/span& &span class=&na&&placeholder&/span&&span class=&o&&=&/span&&span class=&s&&&邮箱/手机号&&/span& &span class=&na&&required&/span&&span class=&o&&=&/span&&span class=&s&&&&&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&input&/span& &span class=&na&&type&/span&&span class=&o&&=&/span&&span class=&s&&&password&&/span& &span class=&na&&name&/span&&span class=&o&&=&/span&&span class=&s&&&userpass&&/span& &span class=&na&&placeholder&/span&&span class=&o&&=&/span&&span class=&s&&&密码&&/span& &span class=&na&&required&/span&&span class=&o&&=&/span&&span class=&s&&&&&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&ul&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&tick w3layouts agileits&&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&li&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&input&/span& &span class=&na&&type&/span&&span class=&o&&=&/span&&span class=&s&&&checkbox&&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&brand1&&/span& &span class=&na&&value&/span&&span class=&o&&=&/span&&span class=&s&&&&&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&span&/span& &span class=&na&&style&/span&&span class=&o&&=&/span&&span class=&s&&&color:#FFF&&/span&&span class=&p&&&&/span&记住我&span class=&p&&&/&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&li&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&ul&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&div&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&send-button w3layouts agileits&&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&input&/span& &span class=&na&&type&/span&&span class=&o&&=&/span&&span class=&s&&&submit&&/span& &span class=&na&&value&/span&&span class=&o&&=&/span&&span class=&s&&&登 录&&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&form&/span&&span class=&p&&&&/span&
&/code&&/pre&&/div&&p&当用户填写好账号密码,点击【登录】后,触发前一段JavaScript验证代码中的validate函数,当手机号/邮箱号,密码位数验证通过后,页面会执行跳转,跳转到http:localhost:8080/Lyon/foreuserLogin路径。&/p&&p&当然,此跳转会被各种过滤器Filter拦截,其中有个名为ForeServletFilter.java的拦截器如下:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kn&&package&/span& &span class=&nn&&blog.flowingsun.filter&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&java.io.IOException&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.Filter&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.FilterChain&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.FilterConfig&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.ServletException&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.ServletRequest&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.ServletResponse&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.http.HttpServletRequest&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.http.HttpServletResponse&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&org.apache.commons.lang.StringUtils&/span&&span class=&o&&;&/span&
&span class=&kd&&public&/span& &span class=&kd&&class&/span& &span class=&nc&&ForeServletFilter&/span& &span class=&kd&&implements&/span& &span class=&n&&Filter&/span& &span class=&o&&{&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&destroy&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&o&&}&/span&
&span class=&nd&&@Override&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&doFilter&/span&&span class=&o&&(&/span&&span class=&n&&ServletRequest&/span& &span class=&n&&req&/span&&span class=&o&&,&/span& &span class=&n&&ServletResponse&/span& &span class=&n&&resp&/span&&span class=&o&&,&/span& &span class=&n&&FilterChain&/span& &span class=&n&&chain&/span&&span class=&o&&)&/span& &span class=&kd&&throws&/span& &span class=&n&&IOException&/span&&span class=&o&&,&/span& &span class=&n&&ServletException&/span& &span class=&o&&{&/span&
&span class=&n&&HttpServletRequest&/span& &span class=&n&&request&/span& &span class=&o&&=&/span& &span class=&o&&(&/span&&span class=&n&&HttpServletRequest&/span&&span class=&o&&)&/span&&span class=&n&&req&/span&&span class=&o&&;&/span&
&span class=&n&&HttpServletResponse&/span& &span class=&n&&response&/span& &span class=&o&&=&/span& &span class=&o&&(&/span&&span class=&n&&HttpServletResponse&/span&&span class=&o&&)&/span&&span class=&n&&resp&/span&&span class=&o&&;&/span&
&span class=&n&&String&/span& &span class=&n&&contextPath&/span& &span class=&o&&=&/span& &span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&getServletContext&/span&&span class=&o&&().&/span&&span class=&na&&getContextPath&/span&&span class=&o&&();&/span&
&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&getServletContext&/span&&span class=&o&&().&/span&&span class=&na&&setAttribute&/span&&span class=&o&&(&/span&&span class=&s&&&contextPath&&/span&&span class=&o&&,&/span& &span class=&n&&contextPath&/span&&span class=&o&&);&/span&
&span class=&n&&String&/span& &span class=&n&&uri&/span& &span class=&o&&=&/span& &span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&getRequestURI&/span&&span class=&o&&();&/span&
&span class=&n&&uri&/span& &span class=&o&&=&/span& &span class=&n&&StringUtils&/span&&span class=&o&&.&/span&&span class=&na&&remove&/span&&span class=&o&&(&/span&&span class=&n&&uri&/span&&span class=&o&&,&/span& &span class=&n&&contextPath&/span&&span class=&o&&);&/span&
&span class=&k&&if&/span& &span class=&o&&(&/span&&span class=&n&&uri&/span&&span class=&o&&.&/span&&span class=&na&&startsWith&/span&&span class=&o&&(&/span&&span class=&s&&&/fore&&/span&&span class=&o&&))&/span& &span class=&o&&{&/span&&span class=&c1&&//后台其他路径&/span&
&span class=&n&&String&/span& &span class=&n&&method&/span& &span class=&o&&=&/span& &span class=&n&&StringUtils&/span&&span class=&o&&.&/span&&span class=&na&&substringAfterLast&/span&&span class=&o&&(&/span&&span class=&n&&uri&/span&&span class=&o&&,&/span&&span class=&s&&&/fore&&/span&&span class=&o&&);&/span&
&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&setAttribute&/span&&span class=&o&&(&/span&&span class=&s&&&method&&/span&&span class=&o&&,&/span& &span class=&n&&method&/span&&span class=&o&&);&/span&
&span class=&n&&req&/span&&span class=&o&&.&/span&&span class=&na&&getRequestDispatcher&/span&&span class=&o&&(&/span&&span class=&s&&&/HomeServlet&&/span&&span class=&o&&).&/span&&span class=&na&&forward&/span&&span class=&o&&(&/span&&span class=&n&&request&/span&&span class=&o&&,&/span& &span class=&n&&response&/span&&span class=&o&&);&/span&
&span class=&k&&return&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&&span class=&k&&else&/span& &span class=&k&&if&/span&&span class=&o&&(&/span&&span class=&n&&uri&/span&&span class=&o&&.&/span&&span class=&na&&equals&/span&&span class=&o&&(&/span&&span class=&s&&&/Home&&/span&&span class=&o&&)){&/span&
&span class=&n&&String&/span& &span class=&n&&method&/span& &span class=&o&&=&/span& &span class=&s&&&foreHome&&/span&&span class=&o&&;&/span&
&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&setAttribute&/span&&span class=&o&&(&/span&&span class=&s&&&method&&/span&&span class=&o&&,&/span& &span class=&n&&method&/span&&span class=&o&&);&/span&
&span class=&n&&req&/span&&span class=&o&&.&/span&&span class=&na&&getRequestDispatcher&/span&&span class=&o&&(&/span&&span class=&s&&&/HomeServlet&&/span&&span class=&o&&).&/span&&span class=&na&&forward&/span&&span class=&o&&(&/span&&span class=&n&&request&/span&&span class=&o&&,&/span& &span class=&n&&response&/span&&span class=&o&&);&/span&
&span class=&k&&return&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&n&&chain&/span&&span class=&o&&.&/span&&span class=&na&&doFilter&/span&&span class=&o&&(&/span&&span class=&n&&request&/span&&span class=&o&&,&/span& &span class=&n&&response&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&init&/span&&span class=&o&&(&/span&&span class=&n&&FilterConfig&/span& &span class=&n&&arg0&/span&&span class=&o&&)&/span& &span class=&kd&&throws&/span& &span class=&n&&ServletException&/span& &span class=&o&&{&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&p&当被ForeServletFilter.java拦截到以后,拦截器会将foreuserLogin取出,移除fore,剩下userLogin,并以此为method方法名,设置为request请求的属性。之后,跳转到HomeServlet.java中去,HomeServlet中的userLogin方法通过反射被调用执行。&/p&&p&这样,程序就来到了HomeServlet.java中的userLogin方法,代码如下:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&public&/span& &span class=&n&&String&/span& &span class=&nf&&userLogin&/span&&span class=&o&&(&/span&&span class=&n&&HttpServletRequest&/span& &span class=&n&&request&/span&&span class=&o&&,&/span&&span class=&n&&HttpServletResponse&/span& &span class=&n&&response&/span&&span class=&o&&){&/span&
&span class=&n&&List&/span&&span class=&o&&&&/span&&span class=&n&&String&/span&&span class=&o&&&&/span& &span class=&n&&info&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&ArrayList&/span&&span class=&o&&&&/span&&span class=&n&&String&/span&&span class=&o&&&();&/span&
&span class=&c1&&//保存所有返回信息&/span&
&span class=&n&&String&/span& &span class=&n&&userid&/span& &span class=&o&&=&/span& &span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&getParameter&/span&&span class=&o&&(&/span&&span class=&s&&&userid&&/span&&span class=&o&&);&/span&
&span class=&c1&&//接收用户登录email或手机号内容&/span&
&span class=&n&&String&/span& &span class=&n&&userpass&/span& &span class=&o&&=&/span& &span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&getParameter&/span&&span class=&o&&(&/span&&span class=&s&&&userpass&&/span&&span class=&o&&);&/span& &span class=&c1&&//接收userpass内容&/span&
&span class=&n&&String&/span& &span class=&n&&rephone&/span& &span class=&o&&=&/span& &span class=&s&&&^[0-9]+&&/span&&span class=&o&&;&/span&
&span class=&n&&User&/span& &span class=&n&&user&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&User&/span&&span class=&o&&();&/span&
&span class=&k&&if&/span&&span class=&o&&(&/span&&span class=&n&&Pattern&/span&&span class=&o&&.&/span&&span class=&na&&matches&/span&&span class=&o&&(&/span&&span class=&n&&rephone&/span&&span class=&o&&,&/span&&span class=&n&&userid&/span&&span class=&o&&)){&/span&
&span class=&c1&&//判断传入的userid值是邮箱还是手机号&/span&
&span class=&n&&user&/span&&span class=&o&&.&/span&&span class=&na&&setTelephone&/span&&span class=&o&&(&/span&&span class=&n&&userid&/span&&span class=&o&&);&/span&
&span class=&c1&&//根据不同情况设置具体的传入参数为邮箱号或手机号&/span&
&span class=&o&&}&/span&&span class=&k&&else&/span&&span class=&o&&{&/span&&span class=&n&&user&/span&&span class=&o&&.&/span&&span class=&na&&setEmail&/span&&span class=&o&&(&/span&&span class=&n&&userid&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&span class=&n&&user&/span&&span class=&o&&.&/span&&span class=&na&&setPassword&/span&&span class=&o&&(&/span&&span class=&n&&userpass&/span&&span class=&o&&);&/span&
&span class=&c1&&//设置password&/span&
&span class=&k&&try&/span&&span class=&o&&{&/span&
&span class=&c1&&//先用if语句查询用户邮箱和手机号,如果数据库中已存在,则用户已经注册过!否则,证明是新用户,else语句执行注册过程!&/span&
&span class=&n&&User&/span& &span class=&n&&usertoken&/span& &span class=&o&&=&/span& &span class=&n&&UserDAO&/span&&span class=&o&&.&/span&&span class=&na&&findLogin&/span&&span class=&o&&(&/span&&span class=&n&&user&/span&&span class=&o&&);&/span&
&span class=&k&&if&/span&&span class=&o&&(&/span&&span class=&n&&usertoken&/span&&span class=&o&&.&/span&&span class=&na&&getId&/span&&span class=&o&&()!=&/span&&span class=&mi&&0&/span&&span class=&o&&&&&/span&&span class=&n&&usertoken&/span&&span class=&o&&.&/span&&span class=&na&&getName&/span&&span class=&o&&()!=&/span&&span class=&kc&&null&/span&&span class=&o&&){&/span&
&span class=&n&&info&/span&&span class=&o&&.&/span&&span class=&na&&add&/span&&span class=&o&&(&/span&&span class=&s&&&&p&&font color='white'&亲爱的:&&/span&&span class=&o&&+&/span&&span class=&n&&usertoken&/span&&span class=&o&&.&/span&&span class=&na&&getName&/span&&span class=&o&&()+&/span&&span class=&s&&&&/font&登录成功!&/p&&&/span&&span class=&o&&);&/span&
&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&setAttribute&/span&&span class=&o&&(&/span&&span class=&s&&&info&&/span&&span class=&o&&,&/span&&span class=&n&&info&/span&&span class=&o&&);&/span&
&span class=&c1&&//保存info信息&/span&
&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&getSession&/span&&span class=&o&&().&/span&&span class=&na&&setAttribute&/span&&span class=&o&&(&/span&&span class=&s&&&user&&/span&&span class=&o&&,&/span& &span class=&n&&usertoken&/span&&span class=&o&&);&/span&
&span class=&k&&return&/span& &span class=&s&&&jsp/index.jsp&&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&&span class=&k&&else&/span&&span class=&o&&{&/span&
&span class=&n&&info&/span&&span class=&o&&.&/span&&span class=&na&&add&/span&&span class=&o&&(&/span&&span class=&s&&&&p&&font color='white'&账号或密码错误&font color='red'&登录失败,&/font&请再次尝试!&/font&&/p&&&/span&&span class=&o&&);&/span&
&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&na&&setAttribute&/span&&span class=&o&&(&/span&&span class=&s&&&info&&/span&&span class=&o&&,&/span&&span class=&n&&info&/span&&span class=&o&&);&/span&
&span class=&c1&&//保存info信息&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&&span class=&k&&catch&/span&&span class=&o&&(&/span&&span class=&n&&Exception&/span& &span class=&n&&e&/span&&span class=&o&&){&/span&
&span class=&o&&}&/span&&span class=&k&&return&/span& &span class=&s&&&jsp/userLogin.jsp&&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&p&User user = new User();实例化一个用户,将用户邮箱/手机号+密码信息传入这个user,然后通过UserDAO.java中的findLogin()方法可以判断出这个user是否存在于数据库中,findLogin()方法的代码如下:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&public&/span& &span class=&n&&User&/span& &span class=&nf&&findLogin&/span&&span class=&o&&(&/span&&span class=&n&&User&/span& &span class=&n&&user&/span&&span class=&o&&)&/span&&span class=&kd&&throws&/span& &span class=&n&&Exception&/span&&span class=&o&&{&/span&
&span class=&n&&Connection&/span& &span class=&n&&conn&/span&&span class=&o&&=&/span&&span class=&kc&&null&/span&&span class=&o&&;&/span&
&span class=&c1&&//定义数据库连接对象&/span&
&span class=&n&&PreparedStatement&/span& &span class=&n&&pstmt&/span& &span class=&o&&=&/span& &span class=&kc&&null&/span&&span class=&o&&;&/span&
&span class=&c1&&//定义数据库操作对象&/span&
&span class=&k&&try&/span&&span class=&o&&{&/span&
&span class=&n&&String&/span& &span class=&n&&sql&/span& &span class=&o&&=&/span& &span class=&s&&&SELECT id,usrname FROM User WHERE email=? AND password=? OR telephone=? AND password=?&&/span&&span class=&o&&;&/span&
&span class=&n&&Class&/span&&span class=&o&&.&/span&&span class=&na&&forName&/span&&span class=&o&&(&/span&&span class=&n&&DBDRIVER&/span&&span class=&o&&);&/span&
&span class=&c1&&//加载驱动程序&/span&
&span class=&n&&conn&/span& &span class=&o&&=&/span& &span class=&n&&DriverManager&/span&&span class=&o&&.&/span&&span class=&na&&getConnection&/span&&span class=&o&&(&/span&&span class=&n&&DBURL&/span&&span class=&o&&,&/span&&span class=&n&&DBUSER&/span&&span class=&o&&,&/span&&span class=&n&&DBPASSWORD&/span&&span class=&o&&);&/span&
&span class=&n&&pstmt&/span& &span class=&o&&=&/span& &span class=&n&&conn&/span&&span class=&o&&.&/span&&span class=&na&&prepareStatement&/span&&span class=&o&&(&/span&&span class=&n&&sql&/span&&span class=&o&&);&/span&&span class=&c1&&//实例化操作&/span&
&span class=&n&&pstmt&/span&&span class=&o&&.&/span&&span class=&na&&setString&/span&&span class=&o&&(&/span&&span class=&mi&&1&/span&&span class=&o&&,&/span&&span class=&n&&user&/span&&span class=&o&&.&/span&&span class=&na&&getEmail&/span&&span class=&o&&());&/span&
&span class=&c1&&//设置邮箱名称&/span&
&span class=&n&&pstmt&/span&&span class=&o&&.&/span&&span class=&na&&setString&/span&&span class=&o&&(&/span&&span class=&mi&&2&/span&&span class=&o&&,&/span&&span class=&n&&user&/span&&span class=&o&&.&/span&&span class=&na&&getPassword&/span&&span class=&o&&());&/span&
&span class=&c1&&//设置密码&/span&
&span class=&n&&pstmt&/span&&span class=&o&&.&/span&&span class=&na&&setString&/span&&span class=&o&&(&/span&&span class=&mi&&3&/span&&span class=&o&&,&/span&&span class=&n&&user&/span&&span class=&o&&.&/span&&span class=&na&&getTelephone&/span&&span class=&o&&());&/span& &span class=&c1&&//设置电话号码&/span&
&span class=&n&&pstmt&/span&&span class=&o&&.&/span&&span class=&na&&setString&/span&&span class=&o&&(&/span&&span class=&mi&&4&/span&&span class=&o&&,&/span&&span class=&n&&user&/span&&span class=&o&&.&/span&&span class=&na&&getPassword&/span&&span class=&o&&());&/span&
&span class=&c1&&//设置密码&/span&
&span class=&n&&ResultSet&/span& &span class=&n&&rs&/span& &span class=&o&&=&/span& &span class=&n&&pstmt&/span&&span class=&o&&.&/span&&span class=&na&&executeQuery&/span&&span class=&o&&();&/span&
&span class=&c1&&//取得查询结果&/span&
&span class=&n&&User&/span& &span class=&n&&usertoken&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&User&/span&&span class=&o&&();&/span&
&span class=&k&&if&/span&&span class=&o&&(&/span&&span class=&n&&rs&/span&&span class=&o&&.&/span&&span class=&na&&next&/span&&span class=&o&&()){&/span&
&span class=&n&&user&/span&&span class=&o&&.&/span&&span class=&na&&setId&/span&&span class=&o&&(&/span&&span class=&n&&rs&/span&&span class=&o&&.&/span&&span class=&na&&getInt&/span&&span class=&o&&(&/span&&span class=&mi&&1&/span&&span class=&o&&));&/span&
&span class=&n&&user&/span&&span class=&o&&.&/span&&span class=&na&&setName&/span&&span class=&o&&(&/span&&span class=&n&&rs&/span&&span class=&o&&.&/span&&span class=&na&&getString&/span&&span class=&o&&(&/span&&span class=&mi&&2&/span&&span class=&o&&));&/span&
&span class=&c1&&//取得用户名&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&&span class=&k&&catch&/span&&span class=&o&&(&/span&&span class=&n&&Exception&/span& &span class=&n&&e&/span&&span class=&o&&){&/span&
&span class=&k&&throw&/span& &span class=&n&&e&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&&span class=&k&&finally&/span&&span class=&o&&{&/span&
&span class=&k&&if&/span&&span class=&o&&(&/span&&span class=&n&&pstmt&/span&&span class=&o&&!=&/span&&span class=&kc&&null&/span&&span class=&o&&){&/span&
&span class=&k&&try&/span&&span class=&o&&{&/span&
&span class=&n&&pstmt&/span&&span class=&o&&.&/span&&span class=&na&&close&/span&&span class=&o&&();&/span&
&span class=&c1&&//关闭操作&/span&
&span class=&o&&}&/span&&span class=&k&&catch&/span&&span class=&o&&(&/span&&span class=&n&&Exception&/span& &span class=&n&&e&/span&&span class=&o&&){&/span&
&span class=&k&&throw&/span& &span class=&n&&e&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&span class=&k&&return&/span& &span class=&n&&user&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&p&如果查询成功,表名该用户存在于数据库中,实例化一个usertoken来保存用户登录信息(用户id和用户名信息)&/p&&p&查询成功后if(usertoken.getId()!=0&&usertoken.getName()!=null)成立,则用户登录成功,跳转到首页,并且通过request.getSession().setAttribute(&user&, usertoken);在session范围内添加用户登录成功的信息。这样,一个完整的登录过程就结束了!&/p&&p&登录功能演示视频:&/p&&a class=&video-box& href=&https://link.zhihu.com/?target=https%3A//www.zhihu.com/video/061312& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic3.zhimg.com/80/v2-fe41f8ac51fe72ceca2ae_b.jpg& data-lens-id=&061312&&
&img class=&thumbnail& src=&https://pic3.zhimg.com/80/v2-fe41f8ac51fe72ceca2ae_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/061312&/span&
&hr&&p&竟然有人点赞,开心 ,我就详细说一下评论模块的实现吧!&/p&&h2&8.开发文章评论、点赞模块&/h2&&p&先看一下评论模块长什么样子:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-f0e5eb82de2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&842& data-rawheight=&590& class=&origin_image zh-lightbox-thumb& width=&842& data-original=&https://pic1.zhimg.com/v2-f0e5eb82de2_r.jpg&&&/figure&&p&看一下,留言区的HTML代码:&/p&&div class=&highlight&&&pre&&code class=&language-html&&&span&&/span&&span class=&p&&&&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&div&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&commentHeader&&/span& &span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&h3&/span&&span class=&p&&&&&/span&&span class=&nt&&span&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&f-ff2&&/span&&span class=&p&&&&/span&留言区&span class=&p&&&/&/span&&span class=&nt&&span&/span&&span class=&p&&&&/&/span&&span class=&nt&&h3&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&textarea&/span& &span class=&na&&style&/span&&span class=&o&&=&/span&&span class=&s&&&height:100&&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&writeComment&&/span& &span class=&na&&placeholder&/span&&span class=&o&&=&/span&&span class=&s&&&告诉我,你的梦想!&&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&comment&&/span&&span class=&p&&&&/&/span&&span class=&nt&&textarea&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&button&/span& &span class=&na&&type&/span&&span class=&o&&=&/span&&span class=&s&&&button&&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&commentsubmit&&/span&
&span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&btn btn-default btn-xs &&/span& &span class=&na&&style&/span&&span class=&o&&=&/span&&span class=&s&&&background-color:#7D9EC0;color:#FFFFFF;width=5height=5float:&&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&img&/span& &span class=&na&&src&/span&&span class=&o&&=&/span&&span class=&s&&&images/comment2.png&&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&commentIcon&&/span&&span class=&p&&/&&/span& 评论
&span class=&p&&&/&/span&&span class=&nt&&button&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&div&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&commentList&&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&div&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&commentCounts&&/span& &span class=&p&&&&/span&
共&span class=&p&&&&/span&&span class=&nt&&span&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&j-flag&&/span&&span class=&p&&&&/span&2&span class=&p&&&/&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&条评论
&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&div&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&commentItem&&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&div&/span&&span class=&p&&&&&/span&&span class=&nt&&a&/span& &span class=&na&&href&/span&&span class=&o&&=&/span&&span class=&s&&&#&&/span&&span class=&p&&&&/span&亲爱的猪猪&span class=&p&&&/&/span&&span class=&nt&&a&/span&&span class=&p&&&&/span&:不吃主食,真会更健康吗?&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&()&span class=&p&&&&/span&&span class=&nt&&a&/span& &span class=&na&&href&/span&&span class=&o&&=&/span&&span class=&s&&&#&&/span&&span class=&p&&&&/span&回复&span class=&p&&&/&/span&&span class=&nt&&a&/span&&span class=&p&&&&/&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&div&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&praise&&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&span&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&praise&&/span&&span class=&p&&&&&/span&&span class=&nt&&img&/span& &span class=&na&&src&/span&&span class=&o&&=&/span&&span class=&s&&&images/zan.png&&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&praise-img&&/span& &span class=&p&&/&&/&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&span&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&praise-txt&&/span&&span class=&p&&&&/span&1&span class=&p&&&/&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&span&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&add-num&&/span&&span class=&p&&&&&/span&&span class=&nt&&em&/span&&span class=&p&&&&/&/span&&span class=&nt&&em&/span&&span class=&p&&&&/&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&span&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&commentId&&/span& &span class=&na&&style&/span&&span class=&o&&=&/span&&span class=&s&&&display:&&/span&&span class=&p&&&&/span&65&span class=&p&&&/&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&div&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&commentItem&&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&div&/span&&span class=&p&&&&&/span&&span class=&nt&&a&/span& &span class=&na&&href&/span&&span class=&o&&=&/span&&span class=&s&&&#&&/span&&span class=&p&&&&/span&阳光流淌&span class=&p&&&/&/span&&span class=&nt&&a&/span&&span class=&p&&&&/span&:啊&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&()&span class=&p&&&&/span&&span class=&nt&&a&/span& &span class=&na&&href&/span&&span class=&o&&=&/span&&span class=&s&&&#&&/span&&span class=&p&&&&/span&回复&span class=&p&&&/&/span&&span class=&nt&&a&/span&&span class=&p&&&&/&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&div&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&praise&&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&span&/span& &span class=&na&&class&/span&&span class=&o&&=&/span&&span class=&s&&&praise&&/span&&span class=&p&&&&&/span&&span class=&nt&&img&/span& &span class=&na&&src&/span&&span class=&o&&=&/span&&span class=&s&&&images/zan.png&&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&praise-img&&/span& &span class=&p&&/&&/&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&span&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&praise-txt&&/span&&span class=&p&&&&/span&0&span class=&p&&&/&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&span&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&add-num&&/span&&span class=&p&&&&&/span&&span class=&nt&&em&/span&&span class=&p&&&&/&/span&&span class=&nt&&em&/span&&span class=&p&&&&/&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&span&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&&commentId&&/span& &span class=&na&&style&/span&&span class=&o&&=&/span&&span class=&s&&&display:&&/span&&span class=&p&&&&/span&66&span class=&p&&&/&/span&&span class=&nt&&span&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&/code&&/pre&&/div&&p&&br&&/p&&p&重点看一下这段:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&o&&&&/span&&span class=&nx&&textarea&/span& &span class=&nx&&style&/span&&span class=&o&&=&/span&&span class=&s2&&&height:100&&/span& &span class=&kr&&class&/span&&span class=&o&&=&/span&&span class=&s2&&&writeComment&&/span& &span class=&nx&&placeholder&/span&&span class=&o&&=&/span&&span class=&s2&&&告诉我,你的梦想!&&/span& &span class=&nx&&id&/span&&span class=&o&&=&/span&&span class=&s2&&&comment&&/span&&span class=&o&&&&&/span&&span class=&err&&/textarea&&/span&
&span class=&o&&&&/span&&span class=&nx&&button&/span& &span class=&nx&&type&/span&&span class=&o&&=&/span&&span class=&s2&&&button&&/span& &span class=&nx&&id&/span&&span class=&o&&=&/span&&span class=&s2&&&commentsubmit&&/span&
&span class=&kr&&class&/span&&span class=&o&&=&/span&&span class=&s2&&&btn btn-default btn-xs &&/span& &span class=&nx&&style&/span&&span class=&o&&=&/span&&span class=&s2&&&background-color:#7D9EC0;color:#FFFFFF;width=5height=5float:&&/span&&span class=&o&&&&/span&
&span class=&o&&&&/span&&span class=&nx&&img&/span& &span class=&nx&&src&/span&&span class=&o&&=&/span&&span class=&s2&&&images/comment2.png&&/span& &span class=&kr&&class&/span&&span class=&o&&=&/span&&span class=&s2&&&commentIcon&&/span&&span class=&o&&/&&/span& &span class=&nx&&评论&/span&
&span class=&o&&&&/span&&span class=&err&&/button&&/span&
&/code&&/pre&&/div&&p&其中,textarea是留言区的大文字输入框,后面跟着评论按button(id=&commentsubmit&)&/p&&p&当用户输入文字,点击评论时,会触发页面上的一段Javascript验证程序,用来判断用户是否登录。&/p&&p&如未登录,则alert弹出一个警告框,&亲,您还未登录,请先登录后再来评论哦!&&/p&&p&如果登录,则将用户的评论传入数据库,同时在页面动态生成一段用户评论的html代码。JavaScript验证代码如下:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&o&&&&/span&&span class=&nx&&script&/span&&span class=&o&&&&/span&
&span class=&nx&&$&/span&&span class=&p&&(&/span&&span class=&kd&&function&/span&&span class=&p&&(){&/span&
&span class=&kd&&var&/span& &span class=&nx&&xmlhttp&/span&&span class=&p&&;&/span&
&span class=&nx&&$&/span&&span class=&p&&(&/span&&span class=&s2&&&#commentsubmit&&/span&&span class=&p&&).&/span&&span class=&nx&&click&/span&&span class=&p&&(&/span&&span class=&kd&&function&/span&&span class=&p&&(){&/span&
&span class=&nx&&$&/span&&span class=&p&&.&/span&&span class=&nx&&get&/span&&span class=&p&&(&/span&
&span class=&s2&&&forecheckLogin&&/span&&span class=&p&&,&/span&
&span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&result&/span&&span class=&p&&){&/span&
&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&s2&&&success&&/span&&span class=&o&&==&/span&&span class=&nx&&result&/span&&span class=&p&&){&/span&
&span class=&kd&&var&/span& &span class=&nx&&usrComment&/span& &span class=&o&&=&/span& &span class=&nx&&$&/span&&span class=&p&&(&/span&&span class=&s2&&&#comment&&/span&&span class=&p&&).&/span&&span class=&nx&&val&/span&&span class=&p&&();&/span&
&span class=&kd&&var&/span& &span class=&nx&&articleId&/span& &span class=&o&&=&/span& &span class=&mi&&134&/span&&span class=&p&&;&/span&
&span class=&kd&&var&/span& &span class=&nx&&url&/span& &span class=&o&&=&/span& &span class=&s2&&&foresetblogComment&&/span&&span class=&p&&;&/span&
&span class=&nx&&xmlhttp&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&XMLHttpRequest&/span&&span class=&p&&();&/span&
&span class=&nx&&xmlhttp&/span&&span class=&p&&.&/span&&span class=&nx&&onreadystatechange&/span&&span class=&o&&=&/span&&span class=&nx&&checkResult&/span&&span class=&p&&;&/span& &span class=&c1&&//响应函数&/span&
&span class=&nx&&xmlhttp&/span&&span class=&p&&.&/span&&span class=&nx&&open&/span&&span class=&p&&(&/span&&span class=&s2&&&POST&&/span&&span class=&p&&,&/span&&span class=&nx&&url&/span&&span class=&p&&,&/span&&span class=&kc&&true&/span&&span class=&p&&);&/span&
&span class=&nx&&xmlhttp&/span&&span class=&p&&.&/span&&span class=&nx&&setRequestHeader&/span&&span class=&p&&(&/span&&span class=&s2&&&Content-Type&&/span&&span class=&p&&,&/span& &span class=&s2&&&application/x-www-form-&&/span&&span class=&p&&);&/span&
&span class=&nx&&xmlhttp&/span&&span class=&p&&.&/span&&span class=&nx&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&articleId=&&/span&&span class=&o&&+&/span&&span class=&nx&&articleId&/span&&span class=&o&&+&/span&&span class=&s2&&&&usrComment=&&/span&&span class=&o&&+&/span&&span class=&nx&&usrComment&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&&span class=&k&&else&/span&&span class=&p&&{&/span&
&span class=&nx&&alert&/span&&span class=&p&&(&/span&&span class=&s2&&&亲,您还未登录,请先登录后再来评论哦!&&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&span class=&p&&);&/span&&span class=&k&&return&/span& &span class=&kc&&false&/span&&span class=&p&&;&/span&
&span class=&p&&});&/span&
&span class=&kd&&function&/span& &span class=&nx&&checkResult&/span&&span class=&p&&(){&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&nx&&xmlhttp&/span&&span class=&p&&.&/span&&span class=&nx&&readyState&/span&&span class=&o&&==&/span&&span class=&mi&&4&/span& &span class=&o&&&&&/span& &span class=&nx&&xmlhttp&/span&&span class=&p&&.&/span&&span class=&nx&&status&/span&&span class=&o&&==&/span&&span class=&mi&&200&/span&&span class=&p&&){&/span&
&span class=&kd&&var&/span& &span class=&nx&&usrComment&/span& &span class=&o&&=&/span& &span class=&nb&&document&/span&&span class=&p&&.&/span&&span class=&nx&&getElementById&/span&&span class=&p&&(&/span&&span class=&s1&&'comment'&/span&&span class=&p&&).&/span&&span class=&nx&&value&/span&&span class=&p&&;&/span&
&span class=&kd&&var&/span& &span class=&nx&&newdiv&/span& &span class=&o&&=&/span& &span class=&nb&&document&/span&&span class=&p&&.&/span&&span class=&nx&&createElement&/span&&span class=&p&&(&/span&&span class=&s2&&&div&&/span&&span class=&p&&);&/span&
&span class=&kd&&var&/span& &span class=&nx&&commentlist&/span& &span class=&o&&=&/span& &span class=&nb&&document&/span&&span class=&p&&.&/span&&span class=&nx&&getElementById&/span&&span class=&p&&(&/span&&span class=&s2&&&commentList&&/span&&span class=&p&&);&/span&
&span class=&nx&&newdiv&/span&&span class=&p&&.&/span&&span class=&nx&&className&/span& &span class=&o&&=&/span& &span class=&s1&&'commentItem'&/span&&span class=&p&&;&/span&
&span class=&nx&&newdiv&/span&&span class=&p&&.&/span&&span class=&nx&&innerHTML&/span& &span class=&o&&=&/span& &span class=&s1&&'&div&&a href=&&&阳光流淌&/a&:'&/span&&span class=&o&&+&/span&&span class=&nx&&usrComment&/span&&span class=&o&&+&/span&&span class=&s1&&'&/div&&span&10月28日13:28&/span&&div id=&praise&&&span class=&praise& onclick=&return function(this)&&&img src=&images/zan.png& id=&praise-img& /&&/span&&span id=&praise-txt&&0&/span&&span id=&add-num&&&em&&/em&&/span&&/div&'&/span&&span class=&p&&;&/span&
&span class=&nx&&commentlist&/span&&span class=&p&&.&/span&&span class=&nx&&appendChild&/span&&span class=&p&&(&/span&&span class=&nx&&newdiv&/span&&span class=&p&&);&/span&
&span class=&k&&return&/span& &span class=&kc&&true&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&span class=&p&&});&/span&
&span class=&o&&&&/span&&span class=&err&&/script&&/span&
&/code&&/pre&&/div&&p&&br&&/p&&p&功能演示:&/p&&p&&br&&/p&&p&&br&&/p&&a class=&video-box& href=&https://link.zhihu.com/?target=https%3A//www.zhihu.com/video/116096& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic1.zhimg.com/80/v2-9fb818ca00efa7ca72f6cc_b.jpg& data-lens-id=&116096&&
&img class=&thumbnail& src=&https://pic1.zhimg.com/80/v2-9fb818ca00efa7ca72f6cc_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/116096&/span&
&p&&br&&/p&&p&&br&&/p&&p&评论的大致流程就是这样,下面让我们来看一下【如果登录,则将用户的评论传入数据库】这句话的java代码是怎样实现的?&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&s2&&&success&&/span&&span class=&o&&==&/span&&span class=&nx&&result&/span&&span class=&p&&){&/span&
&span class=&kd&&var&/span& &span class=&nx&&usrComment&/span& &span class=&o&&=&/span& &span class=&nx&&$&/span&&span class=&p&&(&/span&&span class=&s2&&&#comment&&/span&&span class=&p&&).&/span&&span class=&nx&&val&/span&&span class=&p&&();&/span&
&span class=&kd&&var&/span& &span class=&nx&&articleId&/span& &span class=&o&&=&/span& &span class=&mi&&134&/span&&span class=&p&&;&/span&
&span class=&kd&&var&/span& &span class=&nx&&url&/span& &span class=&o&&=&/span& &span class=&s2&&&foresetblogComment&&/span&&span class=&p&&;&/span&
&span class=&nx&&xmlhttp&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&XMLHttpRequest&/span&&span class=&p&&();&/span&
&span class=&nx&&xmlhttp&/span&&span class=&p&&.&/span&&span class=&nx&&onreadystatechange&/span&&span class=&o&&=&/span&&span class=&nx&&checkResult&/span&&span class=&p&&;&/span& &span class=&c1&&//响应函数&/span&
&span class=&nx&&xmlhttp&/span&&span class=&p&&.&/span&&span class=&nx&&open&/span&&span class=&p&&(&/span&&span class=&s2&&&POST&&/span&&span class=&p&&,&/span&&span class=&nx&&url&/span&&span class=&p&&,&/span&&span class=&kc&&true&/span&&span class=&p&&);&/span&
&span class=&nx&&xmlhttp&/span&&span class=&p&&.&/span&&span class=&nx&&setRequestHeader&/span&&span class=&p&&(&/span&&span class=&s2&&&Content-Type&&/span&&span class=&p&&,&/span& &span class=&s2&&&application/x-www-form-&&/span&&span class=&p&&);&/span&
&span class=&nx&&xmlhttp&/span&&span class=&p&&.&/span&&span class=&nx&&send&/span&&span class=&p&&(&/span&&span class=&s2&&&articleId=&&/span&&span class=&o&&+&/span&&span class=&nx&&articleId&/span&&span class=&o&&+&/span&&span class=&s2&&&&usrComment=&&/span&&span class=&o&&+&/span&&span class=&nx&&usrComment&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&&span class=&k&&else&/span&&span class=&p&&{&/span&
&span class=&nx&&alert&/span&&span class=&p&&(&/span&&span class=&s2&&&亲,您还未登录,请先登录后再来评论哦!&&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&如果用户已登录(&success&==result)则,新建XHR请求(XHR对象可以在不向服务器提交整个页面的情况下,实现局部更新网页。详见&a href=&https://link.zhihu.com/?target=https%3A//baike.baidu.com/item/XMLHTTPRequest& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&XMLHTTPRequest_百度百科&/a&)向服务器指定的servlet程序发送文章ID、用户评论信息。&/p&&p&这个处理请求的servlet程序,就是foresetblogComment。(var url = &foresetblogComment&;)XHR请求的地址换成明文的Get请求地址是这样的:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&http://localhost:8080/Lyon/foresetblogComment?articleId=...&usrComment=...
&/code&&/pre&&/div&&p&其中http://localhost:8080/Lyon这个是整个项目的本地路径,即每个请求都会以它开头。&/p&&p&foresetblogComment即本次即将跳转的程序别名,然后本篇博客文章ID(articleId)和用户评论内容(usrComment)将会通过XHR的POST请求发送给服务器。&/p&&hr&&p&重点来了!这个XHR请求,会被过滤器拦截下来,准确的说,每一次请求都会被过滤器拦截。&/p&&p&&b&过滤器ForeServletFilter.java拦截了本次请求,后取得了本次访问的uri(foresetblogComment),然后移除了'fore',通过java反射,唤醒了对应的名为setblogComment的方法。并将本次请求跳转到HomeServlet.java继续处理。&/b&&/p&&p&&br&&/p&&p&ForeServletFilter.java的代码如下:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kn&&package&/span& &span class=&nn&&blog.flowingsun.filter&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&java.io.IOException&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.Filter&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.FilterChain&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.FilterConfig&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.ServletException&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.ServletRequest&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.ServletResponse&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.http.HttpServletRequest&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&javax.servlet.http.HttpServletResponse&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&org.apache.commons.lang.StringUtils&/span&&span class=&o&&;&/span&
&span class=&kd&&public&/span& &span class=&kd&&class&/span& &span class=&nc&&ForeServletFilter&/span& &span class=&kd&&implements&/span& &span class=&n&&Filter&/span& &span class=&o&&{&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&destroy&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&o&&}&/span&
&span class=&nd&&@Override&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&doFilter&/span&&span class=&o&&(&/span&&span class=&n&&ServletRequest&/span& &span class=&n&&req&/span&&span class=&o&&,&/span& &span class=&n&&ServletResponse&/span& &span class=&n&&resp&/span

我要回帖

更多关于 iphone se发布会 的文章

 

随机推荐