当前位置: 首页 > news >正文

网站建设带有注册账号云商城是合法的吗

网站建设带有注册账号,云商城是合法的吗,事件营销名词解释,wordpress前台主题切换文章目录 #x1f343;后台分页#x1f345;后台分页导航 #x1f343;首页分页#x1f345;首页分页导航#x1f345;首页搜索#x1f345;两个奇怪的问题#x1f345;会员显示登录名#x1f345;注销登录#x1f345;验证码 #x1f343;后台分页 程序框架图 1.… 文章目录 后台分页后台分页导航 首页分页首页分页导航首页搜索两个奇怪的问题会员显示登录名注销登录验证码 后台分页 程序框架图 1.新建com.zzw.furns.entity.Page //Page是一个Javabean, 是一个分页的数据模型(包含了分页的各种信息) //T表示泛型, 因为将来分页模型对应的数据类型是不确定的 public class PageT {//因为每页显示多少条记录, 是其它地方也可以使用的public static final Integer PAGE_SIZE 3;//pageNo 前端页面传来的private Integer pageNo;//表示显示当前页[即显示第几页]private Integer pageSize PAGE_SIZE;//表示每页显示几条记录//pageTotal 计算得到的private Integer pageTotal;//表示共有多少页//totalRow 是可以从数据库来的, 由DAO来完成private Integer totalRow;//表示共有多少条记录//items 从数据库DB来的, 由DAO完成private ListT items;//表示当前页,要显示的数据private String url;//分页导航的字符串public Page() {}public Page(Integer pageSize, Integer pageNo) {this.pageSize pageSize;this.pageNo pageNo;} }2.参考 3.修改FurnDao.java //Page的哪些属性是可以从数据库中获取的, 就把获取这个属性的任务放在DAO层 public int getTotalRow();/*** 获取当前页要显示的数据** param begin 表示当前数据从第几条记录开始获取, 从0开始计算* param pageSize 表示取出多少条记录* return*/ public ListFurn getPageItems(int begin, int pageSize);4.修改FurnDaoImpl.java Override public int getTotalRow() {String sql SELECT COUNT(*) FROM furn;//return (Integer) queryScalar(sql);//会报cast异常//java.lang.Long cannot be cast to java.lang.Integerreturn ((Number) queryScalar(sql)).intValue(); }Override public ListFurn getPageItems(int begin, int pageSize) {String sql select id, name,business,price,saleNum,inventory,image_path from furn limit ?,?;return queryMany(sql, Furn.class, begin, pageSize); }5.测试FurnDaoTest.java Test public void getTotalRow() {int totalRow furnDao.getTotalRow();System.out.println(totalRow); }Test public void getPageItems() {ListFurn pageItems furnDao.getPageItems(1, 5);for (Furn furn : pageItems) {System.out.println(furn);} }6.修改FurnService.java /*** 根据传入的 pageNo和 pageSize, 返回对应的page对象* param pageNo* param pageSize* return*/ public PageFurn page(int pageNo, int pageSize);7.修改FurnServiceImpl.java Override public PageFurn page(int pageNo, int pageSize) {//先创建一个page对象, 然后根据实际情况, 填充属性PageFurn page new Page();page.setPageNo(pageNo);//(1)表示显示当前页[即显示第几页]page.setPageSize(pageSize);//(2)表示每页显示几条记录int totalRow furnDAO.getTotalRow();page.setTotalRow(totalRow);//(3)表示共有多少条记录//比如 6 2 6 / 2 3//比如 5 2 5 / 2 2//比如 7 2 7 / 2 3//比如 0 2 0 / 2 0int pageTotal totalRow / pageSize;if (totalRow % pageSize 0) {pageTotal;}page.setPageTotal(pageTotal);//(4)表示共有多少页//比如: pageNo1, pageSize3 begin1//比如: pageNo2, pageSize3 begin4//比如: pageNo3, pageSize2 begin4//注意: 这里隐藏了一个坑, 此刻还看不到, 之后会暴露int begin (pageNo - 1) * pageSize;ListFurn pageItems furnDAO.getPageItems(begin, pageSize);page.setItems(pageItems);//(5)表示当前页,要显示的数据//还差一个url[分页导航], 后面需要return page; }8.测试FurnServiceTest.java Test public void page() {//小技巧: 如果我们需要看一个对象, 这个对象比较复杂, 可以debug看对象PageFurn page furnService.page(2, 2);System.out.println(page page); }9.修改src/com/zzw/furns/web/FurnServlet.java, web层获取page对象 protected void page(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {int pageNo DataUtils.parseInt(req.getParameter(pageNo), 1);int pageSize DataUtils.parseInt(req.getParameter(pageSize), Page.PAGE_SIZE);//调用service, 获取page对象PageFurn page furnService.page(pageNo, pageSize);//将page放入到request域req.setAttribute(page, page);//请求转发到家居管理页面req.getRequestDispatcher(/views/manage/furn_manage.jsp).forward(req, resp); }10.修改manage_menu.jsp, 取缔list方法 div classheader-bottom-set dropdowna hrefmanage/furnServlet?actionpage家居管理/a /div11.测试, 管理员登陆后, 点击家居管理 12.修改web/views/manage/furn_manage.jsp c:forEach items${requestScope.page.items} varitem trtd classproduct-thumbnaila href#img classimg-responsive ml-3 src${item.imagePath}alt//a/tdtd classproduct-namea href#${item.name}/a/tdtd classproduct-namea href#${item.business}/a/tdtd classproduct-price-cartspan classamount${item.price}/span/tdtd classproduct-quantity${item.saleNum}/tdtd classproduct-quantity${item.inventory}/tdtd classproduct-removea hrefmanage/furnServlet?actiondisplayid${item.id}i classicon-pencil/i/aa furnName${item.name} hrefmanage/furnServlet?actiondelid${item.id}i classicon-close/i/a/td /tr /c:forEach后台分页导航 需求分析 管理员进入到家居管理后台页面可以通过分页导航条来进行分页显示完成上页, 下页, 显示共多少页点击分页导航, 可以显示对应页的家居信息在管理员进行修改, 删除, 添加后, 能够回显原来操作所在页面的数据 程序框架图 1.粘贴首页的分页导航代码 !-- Pagination Area Start -- div classpro-pagination-style text-center mb-md-30px mb-lm-30px mt-6 data-aosfade-upullia href#首页/a/lilia href#上页/a/lilia classactive href#3/a/lilia href#4/a/lilia href#5/a/lilia href#下页/a/lilia href#末页/a/lilia共10页/a/lilia共90记录/a/li/ul /div !-- Pagination Area End --2.放到web/views/manage/furn_manage.jsp, 并做修改 !-- Pagination Area Start -- div classpro-pagination-style text-center mb-md-30px mb-lm-30px mt-6 data-aosfade-upul%--如果当前页 1, 就显示首页和上一页--%lia style${requestScope.page.pageNo 1 ? pointer-events: none; color: lightgray : }hrefmanage/furnServlet?actionpagepageNo1pageSize${requestScope.page.pageSize}首页/a/lilia style${requestScope.page.pageNo 1 ? pointer-events: none; color: lightgray : }hrefmanage/furnServlet?actionpagepageNo${requestScope.page.pageNo - 1}pageSize${requestScope.page.pageSize}上一页/a/li%--显示所有的分页数 先确定开始的页数 begin 1; 再确定结束的页数 endpageTotal--%%--最多显示10页, 这里涉及算法--%c:set scopepage varbegin value1/c:setc:set scopepage varend value${requestScope.page.pageTotal}/c:set%--循环显示--%c:forEach begin${pageScope.begin} end${pageScope.end} vari%--总的页数--%%--如果i是当前页, 就使用classactive来修饰--%lia class${i eq requestScope.page.pageNo ? active : }hrefmanage/furnServlet?actionpagepageNo${i}pageSize${requestScope.page.pageSize}${i}/a/li/c:forEach%--如果当前页 总的页数, 就显示末页和下一页--%lia style${requestScope.page.pageNo requestScope.page.pageTotal ? pointer-events: none; color: lightgray : }hrefmanage/furnServlet?actionpagepageNo${requestScope.page.pageNo 1}pageSize${requestScope.page.pageSize}下一页/a/lilia style${requestScope.page.pageNo requestScope.page.pageTotal ? pointer-events: none; color: lightgray : }hrefmanage/furnServlet?actionpagepageNo${requestScope.page.pageTotal}pageSize${requestScope.page.pageSize}末页/a/lilia共${requestScope.page.pageTotal}页/a/lilia共${requestScope.page.totalRow}记录/a/li/ul /div !-- Pagination Area End --3.修改后返回原页面 4.删除后返回原页面 5.添加后返回原页面 首页分页 首页分页导航 需求分析 顾客进入首页页面分页显示家居正确显示分页导航条, 即功能完善, 可以使用 程序框架图 1.新建src/com/zzw/furns/web/CustomerFurnServlet.java, 使用注解方式 WebServlet(urlPatterns /customerFurnServlet) public class CustomerFurnServlet extends BasicServlet {private FurnService furnService new FurnServiceImpl();protected void page(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Integer pageNo DataUtils.parseInt(req.getParameter(pageNo), 1);Integer pageSize DataUtils.parseInt(req.getParameter(pageSize), Page.PAGE_SIZE);PageFurn page furnService.page(pageNo, pageSize);//保存到request域req.setAttribute(page, page);//请求转发到/views/customer/index.jspreq.getRequestDispatcher(/views/customer/index.jsp).forward(req, resp);} }2.将项目页面移到web/views/customer目录下. 3.新建web/index.jsp, 负责请求转发. 4.直接请求CustomerFurnServlet, 获取网站首页要显示的分页数据. 类似我们网站的入口页面 5.分页显示数据 c:forEach items${requestScope.page.items} varitemdiv classcol-lg-3 col-md-6 col-sm-6 col-xs-6 mb-6 data-aosfade-updata-aos-delay200!-- Single Prodect --div classproductdiv classthumba hrefshop-left-sidebar.jsp classimageimg src${item.imagePath} altProduct/img classhover-image srcassets/images/product-image/5.jpgaltProduct//aspan classbadgesspan classnewNew/span/spandiv classactionsa href# classaction wishlist data-link-actionquickviewtitleQuick view data-bs-togglemodaldata-bs-target#exampleModaliclassicon-size-fullscreen/i/a/divbutton titleAdd To Cart class add-to-cartAddTo Cart/button/divdiv classcontenth5 classtitlea hrefshop-left-sidebar.jspSimple 北欧${item.name} /a/h5span classpricespan classnew家居: ${item.name}/span/spanspan classpricespan classnew厂商: ${item.business}/span/spanspan classpricespan classnew价格: ${item.price}/span/spanspan classpricespan classnew销量: ${item.saleNum}/span/spanspan classpricespan classnew库存: ${item.inventory}/span/span/div/div/div /c:forEach6.首页分页导航 c:set varpageNo value${requestScope.page.pageNo}/c:set c:set varpageTotal value${requestScope.page.pageTotal}/c:set c:set varpageSize value${requestScope.page.pageSize}/c:set !-- Pagination Area Start -- div classpro-pagination-style text-center mb-md-30px mb-lm-30px mt-6 data-aosfade-upullia hrefcustomerFurnServlet?actionpagepageNo1pageSize${pageSize}首页/a/lilia style${pageNo 1 ? pointer-events: none; color: lightgray : } hrefcustomerFurnServlet?actionpagepageNo${pageNo - 1}pageSize${pageSize}上页/a/lic:forEach begin1 end${pageTotal} varilia class${pageNo i ? active : } hrefcustomerFurnServlet?actionpagepageNo${i}pageSize${pageSize}${i}/a/li/c:forEachlia style${pageNo pageTotal ? pointer-events: none; color: lightgray;: } hrefcustomerFurnServlet?actionpagepageNo${pageNo 1}pageSize${pageSize}下页/a/lilia hrefcustomerFurnServlet?actionpagepageNo${pageTotal}pageSize${pageSize}末页/a/lilia共${pageTotal}页/a/lilia共${requestScope.page.totalRow}记录/a/li/ul /div !-- Pagination Area End --首页搜索 需求分析 1.顾客进入首页页面 2.点击搜索按钮, 可以输入家居名 3.正确显示分页导航条, 并且要求在分页时, 保留上次搜索条件 程序框架图 代码实现 1.修改com.zzw.furns.FurnDAO, 模糊查询 //根据name查询furn对象的个数 public int getTotalQuantityByName(String name);//根据begin,pageSize,name查询furn对象 public ListFurn getPageItemsByName(int begin, int pageSize, String name);2.修改com.zzw.furns.impl.FurnDaoImpl Override public int getTotalQuantityByName(String name) {String sql SELECT COUNT(*) FROM furn WHERE name LIKE ?;return ((Number) queryScalar(sql, % name %)).intValue(); }Override public ListFurn getPageItemsByName(int begin, int pageSize, String name) {//mysql中, limit默认从0开始String sql SELECT id, name, business, price, saleNum, inventory, image_path as imagePath FROM furn WHERE name LIKE ? Limit ?, ?;return queryMany(sql, Furn.class, % name %, begin, pageSize); }3.测试, 修改FurnDaoTest Test public void getTotalQuantityByName() {System.out.println(furnDAO.getTotalQuantityByName(小台灯)); }Test public void getPageItemsByName() {ListFurn furns furnDAO.getPageItemsByName(3, 2, 小台灯);for (Furn furn : furns) {System.out.println(furn);} }4.修改com.zzw.furns.FurnService //根据传入的pageNo,pageSize,name, 返回对应的page对象 public PageFurn pageByName(int pageNo, int pageSize, String name);5.修改com.zzw.furns.impl.FurnServiceImpl Override public PageFurn pageByName(int pageNo, int pageSize, String name) {//先创建一个page对象, 然后根据实际情况, 填充属性PageFurn page new Page();page.setPageNo(pageNo);//(1)表示显示当前页[即显示第几页]page.setPageSize(pageSize);//(2)表示每页显示几条记录int countByName furnDAO.getTotalQuantityByName(name);page.setTotalRow(countByName);//(3)根据家居名 返回总的记录数//比如 6 2 6 / 2 3//比如 5 2 5 / 2 2//比如 7 2 7 / 2 3//比如 0 2 0 / 2 0int pageTotal countByName / pageSize;//计算得到总的页数if (countByName % pageSize 0) {pageTotal;}page.setPageTotal(pageTotal);//(4)表示共有多少页//比如: pageNo1, pageSize3 begin1//比如: pageNo3, pageSize2 begin4//注意: 这里隐藏了一个坑, 此刻还看不到, 之后会暴露int begin (pageNo - 1) * pageSize;ListFurn pageItems furnDAO.getPageItemsByName(begin, pageSize, name);page.setItems(pageItems);//(5)表示当前页,要显示的数据//还差一个url[分页导航], 后面需要return page; }6.测试,修改com.zzw.furns.impl.FurnServiceTest Test public void pageByName() {PageFurn page furnService.pageByName(蚂蚁, 1, 5);System.out.println(page); }6.web层 - 修改src/com/zzw/furns/web/CustomerFurnServlet.java, 增加pageByName方法 protected void pageByName(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取家居名//1.如果参数有name, 但是没有值, 这时接收到的是空串, 查询所有家居信息//2.如果参数name都没有, 接收到的是nullString name req.getParameter(name);name (name null) ? : name;int pageNo DataUtils.parseInt(req.getParameter(pageNo), 1);int pageSize DataUtils.parseInt(req.getParameter(pageSize), Page.PAGE_SIZE);//调用service方法, 获取page对象PageFurn page furnService.pageByName(pageNo, pageSize, name);//将家居名[搜索条件]封装到page对象的url属性StringBuilder url new StringBuilder(customerFurnServlet?actionpageByName);if (!.equals(name)) {//如果name不为, 则拼接name参数url.append(name).append(name);}page.setUrl(url.toString());//将page放入到request域req.setAttribute(page, page);//请求转发到index.jspreq.getRequestDispatcher(/views/customer/index.jsp).forward(req, resp); }7.修改web/views/customer/index.jsp div classdropdown_searchform classaction-form actioncustomerFurnServletinput typehidden nameaction valuepageByNameinput typehidden namepageSize value${param.pageSize}input classform-control namename placeholderEnter your search key typetextbutton classsubmit typesubmiti classicon-magnifier/i/button/form /div8.修改web/views/customer/index.jsp导航栏 c:set varpageNo value${requestScope.page.pageNo}/c:set c:set varpageTotal value${requestScope.page.pageTotal}/c:set c:set varpageSize value${requestScope.page.pageSize}/c:set c:set varurl value${requestScope.page.url}/c:set !-- Pagination Area Start -- div classpro-pagination-style text-center mb-md-30px mb-lm-30px mt-6 data-aosfade-upullia href${url}pageNo1pageSize${pageSize}首页/a/lilia style${pageNo 1 ? pointer-events: none; color: lightgray : } href${url}pageNo${pageNo - 1}pageSize${pageSize}上页/a/lic:forEach begin1 end${pageTotal} varilia class${pageNo i ? active : } href${url}pageNo${i}pageSize${pageSize}${i}/a/li/c:forEachlia style${pageNo pageTotal ? pointer-events: none; color: lightgray;: } href${url}pageNo${pageNo 1}pageSize${pageSize}下页/a/lilia href${url}pageNo${pageTotal}pageSize${pageSize}末页/a/lilia共${pageTotal}页/a/lilia共${requestScope.page.totalRow}记录/a/li/ul /div !-- Pagination Area End --两个奇怪的问题 1.点击家居管理, 发出两个请求 从manage_menu.jsp到furn_manage.jsp 抓包 原因: furn_manage.jsp有图片url 2.首页分页出现问题 原因 会员显示登录名 需求分析 1.会员登陆成功 2.如果登陆成功后返回首页面, 显示订单管理和安全退出 3.如果用户没有登陆过, 首页就显示登录注册, 后台管理超链接 程序框架图 1.修改src/com/zzw/furns/web/MemberServlet.java if (memberService.login(member)) {//登陆成功System.out.println(登陆成功);//将member存入到session域request.getSession().setAttribute(member, member);if (admin.equals(member.getUsername())) {//管理员登录成功request.getRequestDispatcher(/views/manage/manage_menu.jsp).forward(request, response);} else {//普通用户登陆成功request.getRequestDispatcher(/views/member/login_ok.jsp).forward(request, response);} }2.修改web/views/customer/index.jsp !-- Single Wedge Start -- c:if test${sessionScope.member ! null}div classheader-bottom-set dropdown欢迎: ${sessionScope.member.username}/divdiv classheader-bottom-set dropdowna href#订单管理/a/divdiv classheader-bottom-set dropdowna href#安全退出/a/div /c:if c:if test${sessionScope.member null}div classheader-bottom-set dropdowna hrefviews/member/login.jsp登录|注册/a/divdiv classheader-bottom-set dropdowna hrefviews/manage/manage_login.jsp后台管理/a/div /c:if !-- Single Wedge End --注销登录 思路分析 1.用户登录成功后 2.login_ok.jsp, 点击安全退出, 注销登录 3.返回首页, 也可点击安全退出, 注销登录 程序框架图 代码实现 1.修改src/com/zzw/furns/web/MemberServlet.java增加方法logout //安全退出 protected void logout(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(member 被调用...);HttpSession session req.getSession();//让当前session立即无效session.invalidate();//默认访问index.jsp 首页面//req.getContextPath() http://localhost://jiaju_mall/resp.sendRedirect(req.getContextPath()); }2.修改web/views/customer/index.jsp div classheader-bottom-set dropdowna hrefmemberServlet?actionlogout安全退出/a /div验证码 表单重复提交情况 提交完表单. 服务器使用请求转发进行页面跳转. 用户刷新(F5), 会发起最后一次的请求, 造成表单重复提交问题. 解决:用重定向.用户正常提交, 由于网络延迟等原因, 未收到服务器的响应. 这时, 用户着急多点了几次提交操作, 也会造成表单重复提交. 解决: 验证码用户正常提交, 服务器也没有延迟, 但是提交完成后, 用户回退浏览器. 重新提交, 也会造成表单重复提交. 解决: 验证码恶意注册, 使用可以批量发送Http的工具, 比如 Postman, Jemeter等, 使用验证码防护 程序框架图 代码实现 1.引入kaptcha-2.3.2.jar包 2.web层, 配置KaptchaServlet servletservlet-nameKaptchaServlet/servlet-nameservlet-classcom.google.code.kaptcha.servlet.KaptchaServlet/servlet-class /servlet servlet-mappingservlet-nameKaptchaServlet/servlet-nameurl-pattern/kaptchaServlet/url-pattern /servlet-mapping3.KAPTCHA_SESSION_KEY是一个常量, 使用前需要导入 import static com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY; 4.修改前端页面web/views/member/login.jsp input typetext idcaptchaText namecaptcha stylewidth: 50%placeholder验证码/  img idcaptcha alt width150px srckaptchaServlet5.测试 6.增加js代码, 点击图片更换验证码 $(#captcha).click(function () {$(this).attr(src, kaptchaServlet?zzw new Date()); });7.增加校验 ⇒ 点击提交, 验证码不能为空 var captchaText $(#captchaText).val().trim(); if (captchaText || captchaText null) {$(span.errorMsg).text(验证码不能为空!);return false; }8.修改MemberServlet protected void register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//todo 构建member//获取用户提交的验证码String captcha request.getParameter(captcha);//从session中获取 生成的验证码HttpSession session request.getSession();String token (String) session.getAttribute(KAPTCHA_SESSION_KEY);//立即删除session中的验证码, 防止该验证码重复使用session.removeAttribute(KAPTCHA_SESSION_KEY);//如果token不为空, 并且和用户提交的验证码保持一致, 就继续if (token ! null token.equalsIgnoreCase(captcha)) {//todo 判断用户名是否可用 可用注册用户 不可用返回注册页面} else {request.setAttribute(msg, 验证码不正确);request.setAttribute(username, username);//回显用户名request.setAttribute(password, password);//回显密码request.setAttribute(email, email);//回显邮件request.setAttribute(active, register_tab);request.getRequestDispatcher(/views/member/login.jsp).forward(request, response);} }
http://www.hkea.cn/news/14585418/

相关文章:

  • 网站建设扁平化企业网站建设指导规范
  • 东莞市手机网站建设公司网站标题栏
  • 网站开发容易找工作吗万网域名指向网站
  • 安阳网站优化公司推荐出名的网站建设公司
  • 制作外贸网站成本高端平面设计网站
  • 网站建设公司不挣钱的原因销售平台是什么意思
  • .net 快速网站开发坪山新区城市建设局网站
  • 网站建设外包 源代码高端网站设计高端网站制作
  • 关于电商网站规划方案百度排行榜小说
  • 虐做视频网站网络营销推广的概念
  • 惠州网站建设 翻译科技网站建设
  • 网站建设 文档下载给公司做宣传网站的好处
  • html源码网站建设中网站用什么做
  • 网站建设代码编译的问题及解决方案最近10个新闻
  • 突唯阿网站seo长沙网站建设长沙
  • 织梦网站如何打通百度小程序做网站需要神
  • 郑口住房和城乡建设局网站深圳小程序推广
  • 猪八戒做网站排名南宁网站外包
  • 北京高端网站建设公司酒类营销网站
  • 深圳做网站的价格什么软件制作网站快
  • 网站建设,h5,小程序新东方教育机构官网
  • 化工企业网站模板58同城最新消息招聘
  • 外国做足球数据网站网站备案可以自己备案吗
  • 昭通网站建设怎样删除网站虚拟主机内容
  • 自己做网站怎么弄安全网站开发
  • 网站建设汇报评估宁夏网络推广公司
  • 如何更换网站服务商重庆展厅设计制作要点
  • 优化网站步骤石家庄网站建设公司怎么样
  • 如何做网站效果图丹东做网站哪家好
  • 昆明建设网站制作成都公司做网站的