重定向与转发的区别
- 重定向:服务器告诉客户端,你去请求另外一个地址,这是客户端行为,但是是服务器干的事情。
地址栏会变;
不能携带参数;
重定向可以访问自己web应用以外的资源。
response.sendRedirect("https://baidu.com");
- 转发:服务器自己转发到服务器上的其他请求 服务器行为
地址栏不会变;
可以携带参数;
转发不能访问自己web应用以外的资源;
package com.baidu;
import org.junit.Test;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.*;
import java.awt.*;
import java.io.IOException;
@WebServlet(name = "Servlet02")
public class Servlet02 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String name = request.getParameter("username");
String password = request.getParameter("password");
String passwordagain = request.getParameter("passwordagain");
String[] hobbies = request.getParameterValues("hobby");
for (int i = 0; i < hobbies.length; i++) {
System.out.println(hobbies[i]);
}
System.out.println(name);
System.out.println(password);
System.out.println(passwordagain);
if (name.equals("admin")&& (password.equals("12345678")) && (passwordagain.equals(password))){
JOptionPane.showMessageDialog(null,"跳转到成功页面","提示",JOptionPane.INFORMATION_MESSAGE);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.getServletContext().getRequestDispatcher("/Successful.jsp").forward(request,response);
}else {
JOptionPane.showMessageDialog(null,"用户名或密码错误","提示",JOptionPane.INFORMATION_MESSAGE);
response.sendRedirect("http://localhost:8080/Servlet03_war_exploded/Register.jsp");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}