一、请求转发和重定向:
1.请求转发:
请求转发的介绍:
(1)请求转发解决的问题:
服务器在接收到浏览器的请求后,仅仅使用一个Servlet 进行请求处理,会造成不同的 Servlet 逻辑代码冗余,Servlet 的职责不明确。
请求转发的作用:
(1)作用:
解决了一次请求内的不同 Servlet 的数据(请求数据+其他数
据)共享问题。
(2)作用域:
基于请求转发,一次请求中的所有 Servlet 共享。
特点:
(1)由服务器创建;
(2) 每次请求都会创建;
(3)生命周期一次请求;
常用方法:
(1)存储数据:request.setAttribute(String name,String value);
(2)获取数据:request.getAttribute(Object obj);
(3)转发路径:request.getRequestDispathcher(“转发路径”).forward(request,response);
总结
代码示例:
package com.zlw.servlet2;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Login2 extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//获取request对象中请求转发流转数据
// String str = (String)request.getAttribute("str");
String str = ((request.getAttribute("str"))==null?"":(String)request.getAttribute("str"));
//响应处理结果
PrintWriter out = response.getWriter();
out.print("");
out.print("
用户登录");out.print("
");out.print("
");out.print(""+str+"");
out.print("
");
out.print("用户名:
");
out.print("密码:
");
out.print("");
out.print("
");out.print(" ");
out.print("");
}
}
package com.zlw.servlet2;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ToLogin extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter("username");
String pwd = request.getParameter("pwd");
if("李四".equals(name)&&"1234".equals(pwd)){
response.getWriter().write("登录成功!");
}else{
// response.getWriter().write("用户名或密码错误!");
//将数据存储到request对象中
request.setAttribute("str", "用户名或密码错误!");
//请求转发
request.getRequestDispatcher("login2").forward(request, response);
return;
}
}
}
正确的用户名和密码
登录成功
错误的用户名和密码
跳转的请求
2.重定向:
重定向解决 的问题:
如果当前的请求,Servlet 无法进行处理;
如果使用请求转发,造成表单数据重复提交;
特点:
(1)两次请求;
(2)浏览器地址栏信息改变 ;
(3)避免表单重复提交 ;
使用方法: