转发与重定向的区别

                                       转发与重定向的区别

1.转发

转发可以说是服务器端的行为。可以认为客户端浏览器发送请求给A,A接受请求,于是它在内部容器内做了一系列的处理(转发),A处理完之后得到结果给了B。也可以这样理解,A向B借钱,B并没有钱,但是B并没有告诉A他没有钱,而是接受A借钱的这个请求,B为了完成这个请求,B向C去借了钱给了A,但是A并不知是B向C借了钱,A只知道是B帮助了他。所以说这可以理解为是在服务器端的行为。

1.1图解

1.2实现转发的方法

request.getRequestDispatcher("welcomeServletDemo").forward(request, response);

1.3实现转发的代码

@WebServlet("/registerServlet")

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String name = request.getParameter("username");

String pwd = request.getParameter("password");

String createPassword = PasswordUtil.createPassword(pwd);

String sql="insert into user values(?,?,?)";

Connection connection = DruidUtilDemo.getConnection();

try {

PreparedStatement prepareStatement = connection.prepareStatement(sql);

prepareStatement.setString(1, name);

prepareStatement.setString(2, createPassword);

prepareStatement.setInt(3, 0);

int executeUpdate = prepareStatement.executeUpdate();

if(executeUpdate>0){

System.out.println("注册成功");

request.getRequestDispatcher("welcomeServletDemo").forward(request, response);//实现转发

}

} catch (SQLException e) {

e.printStackTrace();

}

}

 

@WebServlet("/welcomeServletDemo")

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setCharacterEncoding("utf-8");//编码格式

response.setContentType("text/html;charset=utf-8");

PrintWriter writer = response.getWriter();

writer.println("注册成功.....");

writer.println("请登录...");

2.重定向

重定向可以认为是客户端的行为。客户浏览器发送请求给A服务器,A接受后,发送302状态码响应,并给它一个B的地址,浏览器发现是302状态码,就又重新发送一个新的请求(A给它的B的地址),他发送请求给了B,B给它做出了回应。这种方式叫做重定向。也可以这么理解,浏览器(A)向B借钱,B没有钱,B告诉A ,C有钱给了A  B的地址,A又去向C借钱,C借给了他,这种方式A发送了两次请求,得到了两次回应,它知道是C借给他的钱,这种方式浏览器路径得到了变化,所以说是客户端的行为。

2.1图解

2.2实现重定向的方法

response.sendRedirect("login.jsp");

response.sendRedirect("http://www.baidu.com");

2.3实现代码

@WebServlet("/registerServlet")

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String name = request.getParameter("username");

String pwd = request.getParameter("password");

String createPassword = PasswordUtil.createPassword(pwd);

String sql="insert into user values(?,?,?)";

Connection connection = DruidUtilDemo.getConnection();

try {

PreparedStatement prepareStatement = connection.prepareStatement(sql);

prepareStatement.setString(1, name);

prepareStatement.setString(2, createPassword);

prepareStatement.setInt(3, 0);

int executeUpdate = prepareStatement.executeUpdate();

if(executeUpdate>0){

System.out.println("注册成功");

response.sendRedirect("login.jsp");//重定向

}

} catch (SQLException e) {

e.printStackTrace();

}

}

 

@WebServlet("/LoginServletDemo")

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String name = request.getParameter("username");

String pwd = request.getParameter("password");

String createPassword = PasswordUtil.createPassword(pwd);

String sql="select * from user where username=? and password=?";

Connection connection = DruidUtilDemo.getConnection();

try {

PreparedStatement prepareStatement = connection.prepareStatement(sql);

prepareStatement.setString(1, name);

prepareStatement.setString(2, createPassword);

ResultSet resultSet = prepareStatement.executeQuery();

if(resultSet.next()){

System.out.println(name+"......"+createPassword);

System.out.println("登陆成功");

}

} catch (SQLException e) {

e.printStackTrace();

}

}

区别

1、转发是在服务端内部的转发,浏览器不知道,浏览器的路径不会改变。重定向是客户端的行为,两次请求,两次回应,会改变路径。

2、sendRedirect()方法不但可以在位于同一个主机上的不同Web应用程序之间进行重定向,而且可以将客户端重定向到其他服务器上的Web应用程序资源。而forward()方法只能将请求转发给同一Web应用的组件。

3.执行转发的时候是先执行转发,在执行后面语句;重定向是先执行结束在进行重定向。

4.转发的时间要比重定向的时间短,给服务器造成的压力也少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值