转发与重定向的区别
转发的特点:一次请求 地址栏不变 只能访问项目的类不资源 *转发的性能要优于重定向*
RequestDispatcher dispatcher = request.getRequestDispatcher("/login/login.jsp");
//请求转发器 服务端路径默认以项目访问路径开头
dispatcher.forward(request,response);//调用forward 转发页面
重定向的特点:两次请求 地址栏改变 能请求外部网站资源从一个服务器跳转到另一个服务器
response.setStatus(302);//告诉浏览器再发一次请求 302:重定向
response.setHeader("location","https://www.baidu.com");//location 设置重定向跳转的地址 客户端路径
//location 设置重定向跳转的地址 客户端路径
response.sendRedirect("/aaa/login/login.jsp")//写项目访问路径
//只有转发写服务端路经 直接写项目地址
-
request 请求信息
-
request 适用范围 一次请求 不管转发多少次 都属于一次请求 所以可以在转发的2个jsp页面共享request数据
-
session 使用范围 一次会话 可以在一次会话的多次请求中共享一个session数据 一次会话一个session对象
setAttribute(String s, Object o);//只要浏览器不关 session的数据一直存在
getAttribute()
romoveAttribute()
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
String code = request.getParameter("code");
String login_code = (String) session.getAttribute("login_code");
if(login_code.equalsIgnoreCase(code)){//如果验证码正确就进入第二个if
if("admin".equals(username)&& "m123".equals(pwd)){
//登陆成功 一定使用 重定向 跳转首页
//将用户名存入session 代表用户已经登录
session.setAttribute("user",username);
response.sendRedirect(request.getContextPath()+"/session/index.jsp");
}else {
//用户名错误 或者密码错误
//1.存一些错误的信息 key value 都是自定义的
request.setAttribute("error","用户名或者密码错误!!");//存值
//2.请求转发 实现页面跳转 页面跳转同时传递错误信息
//转发的特点一次请求 地址栏不变 只能访问项目的类不资源
RequestDispatcher dispatcher = request.getRequestDispatcher("/session/login.jsp");//请求转发器 服务端路径默认以项目访问路径开头
dispatcher.forward(request,response);//调用forward 转发页面
}
}else {
request.setAttribute("error","验证码错误,请重新输入");
request.getRequestDispatcher("/session/login.jsp").forward(request,response);//转发
//一般登录的时候用session 共享数据 重定向 response.sendRedirect();
}