//三层模型 : Web Service Dao : 分工明确 细化功能
//MVC模型 : 模型模块 视图模块 控制模块:三层模型是对C模块的细分
首先在idea 下web文件新建head.jsp register.jsp login.jsp 在WEB-INF文件下新建main.jsp页面
在head.jsp中引入jQuery和jstl包
然后在regist.jsp和login.jsp中引入head.jsp
在页面中编写input标签,用于接收参数传输给后台进行接收及处理
1、可以写按钮事件,在js事件中通过jQuery获取输入框中内容
2、可以写入form表单中传递数据
$("#userName").val().trim();
之后通过ajax传值到后端进行数据处理
function submit(){
if(!userCheck){
alert("对不起,用户名不可用")
return;
}
var userName =$("#userName").val().trim();
var password =$("#password").val().trim();
if(password.trim()==""||password.length<6){
alert("对不起,密码不符合规则")
return;
}
var repassword =$("#repassword").val().trim();
if(password!=repassword){
alert("对不起,两次密码不一致")
return;
}
var d = {userName:userName,password:password,repassword:repassword};
$.ajax({
url:"/user/register",
type:"post",
data:d,
dataType:"json",
success:function (data) {
if(data.code==-1){
$("#message").text(data.message);
}else{
$("#message").text(data.message+",立即为您跳转页面");
setTimeout(function () {
location.href="/resource/pages/login.jsp";
},2000)
}
}
})
在web层接收前台传递过来的参数,可以用String userName =req.getParameter("userName");属性名的方式获取
也可导入工具包commons-beanutils-1.8.3.jar,用工具接收直接封装入javaBean中,(接收的属性名必须和javaBean中的成员变量名相同)UserBean user = WebUtils.populate(UserBean.class,req);
接着调用service层中UserService中的各种方法得到从数据库获取的值,进行判断登陆、注册等操作
service层中一般直接调用Dao层的方法获取原始数据,可以在本层进行一些简单的业务处理,如数据库long型时间转换日期型,密码加密存入数据库等,加密语句如下,
MessageDigest digest = MessageDigest.getInstance("md5");
//加密之前是字符串,加密之后是字节数组, 如果我们把字节数组存到数据库, 那么查询时的效率极低
byte[] bs = digest.digest(userBean.getPassword().getBytes());
//可以将任意字节数组转成明文的字符串
//01100001 01100010 01100011
//011000 010110 001001 100011
//24 22 9 35
Base64.Encoder encoder = Base64.getEncoder();
String str = encoder.encodeToString(bs);
userBean.setPassword(str);
而在DAO层则直接是根据方法名含义直接获取数据库中的数据
bean中则直接写javaBean类,成员变量名与数据库中的字段名相同,且类型相同
在web层调用获取的数据,经过处理可以放入Session域中,前端jsp页面通过jQuery获取后台的到信息进行展示,如商品展示。可以分页展示,
需要分页的信息,对应的java Bean中要继承 Basebean。
里面存放总页数当前页等,在调用提取写好封装的paging类中的方法,根据javabean的开始页数和分页大小,还有二次调用传过来的当前页,判断当前页并拼接当前请求所带来的所有参数,再拼写分页当前页,使用字符串拼接成页面,返回一个字符串,在页面中引入这个字符串,则会自动转换成对应标签和信息,
在页面显示的商品详情则只会显示,调用时传递过去的开始页,及页面大小数量的所有商品。
相应的在shopback后台系统中判断用户登录之后才能对商品表的信息进行增删改查等操作,否则则会拦截。
如果用户没有登录,跳到登录页面,可以通过拦截器实现,在拦截器中判断
用户登录成功,则在该用户的session中放置登录标志,否则无
在拦截器中,只有登录才能显示商品详情及操作,或者可以查看一些静态页面,否则就跳到登录页面
//因为要使用session,所以将ServletRequest强转成HttpServletRequest
HttpServletRequest request = (HttpServletRequest) servletRequest;
//有一些静态资源和serlvet请求是不需要拦截的, 放行
//获取请求路径 /项目名/请求地址
String str = request.getRequestURI();
if(str.startsWith("/shopback/resource/")||str.startsWith("/shopback/user/login")){
filterChain.doFilter(request,servletResponse);
return;
}
//获取登陆标志
Object userBack = request.getSession().getAttribute("user");
//判断使用已经登陆
if(userBack==null){
request.getRequestDispatcher("/resource/pages/login.jsp").forward(request,servletResponse);
}else{
filterChain.doFilter(request,servletResponse);
}