一.页面功能需求
1.主页面
- 跳转:登录页,注册页,我的收藏页,后台管理页
- 展示:展示所有的商品
- 功能:添加商品到我的收藏
2.登录页
- 跳转:注册页,登录成功页
- 展示:登录表单项
- 功能:提交登录表单
3.注册页:
- 跳转:注册成功页
- 展示:注册表单项
- 功能:提交注册表单项
4.我的收藏页:
- 跳转:主页面
- 展示:展示我的收藏的商品
- 功能:删除,清空,下载我收藏(图片)
5.后台管理:
- 跳转:主页
- 展示:所有的商品项
- 功能:增加,删除,修改商品项
二.登录注册(数据库流程)
1.数据库:
2.javabean
3.Dao持久层
- BaseDao抽象类:完成基本的增删改查操作
- UserDao接口:定义方法的规范
用户名查表(select)
用户名密码查表(select)
保存用户名密码(insert) - UserDaoImpl实现类和继承类:具体实现上述方法
4.Service业务层
- UserService接口:定义方法的规范
登录:登录校验(返回null登录失败)
注册:用户名重名(返回false用户名可用)
用户名保存数据库 - UserServiceImpl实现类
5.Web层
- BaseServlet抽象类:获取action值,反射调用该方法
- UserServlet继承类:获取参数,处理业务,跳转页面
登录:调用service方法和获取的参数,结果存入域中,跳转页面
6.客户端
三.我的收藏管理(session技术)
1.javabean对象和cart对象
- javabean的cartItem对象
- cart对象(保存cartItem对象)
Map
添加cartitem
删除cartitem
修改cartitem
清空cart
获取cartitem的数量
2.CartServlet(完成servlet与web联调)
- 加入我的收藏
获取http请求的参数获取对象存入session中 - 删除我的收藏
获取session域中的cartitem删除 - 清空我的收藏
获取cart并clear
四.前段架构
1.前端架构
2.项目中的使用
①html的使用
<form action="UserServlet">
<input type="hidden" name="action" value="login">
<input type="text" name="username" value="具体文本">
<input type="password" name="password" value="具体文本">
<input type="submit" name="" value="">
form>
<table>
<tr>
<td><td>
<td><td>
<td><td>
tr>
table>
<a href="">
<div>div>
<span>span>
②js-jquery的使用(导包)
- js中的confirm
询问是否继续完成 - jquery代替js元素代码的触发事件
$(function(){})
$("").click(functiono(){})
$("").blur(function(){})
③jsp的应用
- 四大域对象
常用两个:request和session
request:一次请求有效
session:一次会话有效 - EL表达式 原生jsp(<%=%>) EL表达式(${ } 不指明域默认从小到大)
原生:
request.getparameter(String name)
EL表达式
requestScope.name
sessionScope.Cart(返回的列表)
User.username(域中存的对象,可以直接通过该方法访问对象的属性)
<c:foreach items="${requestScope.items}" var="item">循环
<c :if test="">条件判断
true则执行
c if>
五.实现的功能逻辑
1.功能1:表单回显和错误回显(登录密码错误保留用户名,返回错误信息msg)
- 服务器:
request.getParameter() 获取客户端发来的客户请求信息 HTTP请求数据
request.serAttribute() 对request域中保存数据 - 客户端
requestScope.getAttribute() 对requestScope域中取出数据
=request.getAttribute()
2.功能2:对列表的遍历输出
<c:for each items="${requestScope.books}" var="book">
<tr>
<td>${book.name}<td>
<tr>
3.功能3:同一个页面实现add/update操作
- add:http请求不需要id,且request域中无lover 页面跳转
- update:http请求需要id,且request域中有 lover 页面-servlet查询数据-页面
此时查询数据已经把数据保存值request域中(使用请求转发)
<input type="hidden" name="action" value="${empty param.id?"add":"update"}">
4.功能4:未登录不允许进入manager后台管理页面
> doFilter拦截,请求权限检查 user=session.getAttribute("user") if(user==null)返回首页
> else filterchain.dofilter() 继续执行
5.功能5:实现事务
- 利用threadlocal来保存一个connection
- 利用dofilter过滤所有的service加上try-catch
try{filterchain.doFilter();提交事务}
catch(){回滚事务}
- service抛出–servlet抛出–dopost处理(抛出异常给filter)
即最终异常会到dopost中
6.功能6:验证用户名是否可用
- json数据
json对象 {“name”:}
json字符串"{“name”:}" - ajax请求
局部更新页面:请求和响应局部
异步发起请求:不需要等待服务器传送的数据即可向下执行 - 验证用户名是否可用
正常:blur跳转访问服务器,再重新加载页面
ajax:只需局部更新数据即可 - 具体流程
服务器:
Gson gon = new Gson();
String json = gson.toJson(Map<String,Integer>)
resp.getWriter.write(json)
jsp页面:
$.getJson(url,data,function(data){data.existUsername})
7.功能7:验证码的使用(解决重复提交问题)
- 加载kaptcha-2.3.2 jar包
- 配置 xml文件(/kaptcha.jpg)
客户端:
img中的src:/kaptcha.jpg(服务器请求图片)
服务器:
token:获取session中的验证码然后立马删除session中的验证码
getParameter(“code”)
token==code - 单击更改kaptcha.jpg只需更改src的地址
kaptcha.jpg是按照请求的参数生成
加入new Date() 即每次都不同