📜  Servlet – 页面重定向

📅  最后修改于: 2022-05-13 01:55:50.491000             🧑  作者: Mango

Servlet – 页面重定向

网站编程是一门艺术。为了以突出的方式提供视图,正在采取许多步骤。通常,客户端(一个简单的 JSP 页面)向 Web 服务器或应用服务器提供请求,它们会处理请求并提供响应。有时,为了平衡服务器的负载,可能会将一些页面移动到其他地方,或者根据授权的身份验证凭据,响应应该被转移。在本文中,让我们看看如何处理这些场景。 ie 使用页面重定向可以通过servlet 来实现。

sendRedirect():它将响应重定向到服务器内部甚至外部的另一个资源。因此它使客户端(浏览器)创建一个新请求,因此我们可以在浏览器中看到新的 URL。 sendRedirect() 可以接受相对 URL,因此只能在服务器内部或外部进行重定向。

进行页面重定向的正确语法是

public void sendRedirect(String URL)throws IOException;  

让我们看一个如何做到这一点的例子。在这里,让我们做一个用户正在搜索一个关键术语,然后单击该按钮,它将被重定向到 GeelsforGeeks 页面。

例子

JSP 代码:index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Learn Courses Online


    

Example to show page redirection!

Enter your search term:

Java代码:(Servlet 代码)-> SearchServlet。Java

Java
import java.io.IOException;
  
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
// Servlet implementation class SearchServlet
@WebServlet("/searchServlet")
public class SearchServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
         
    public SearchServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    // @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
  
          // set response content type
          response.setContentType("text/html");
  
          // New location to be redirected, it is an example
          String site = new String("https://www.geeksforgeeks.org/learn-java-on-your-own-in-20-days-free/");
            
          // We have different response status types. 
          // It is an optional also. Here it is a valid site
          // and hence it comes with response.SC_ACCEPTED
          response.setStatus(response.SC_ACCEPTED);
          response.setHeader("Location", site); 
          response.sendRedirect(site);
          return;
    }
  
}


XML


    sampleProject1
    
    
        index.html
        index.htm
        index.jsp
        default.html
        default.htm
        default.jsp
    


Java
import java.io.IOException;
  
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
@WebServlet("/searchServlet")
public class SearchServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
         
    public SearchServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
  
    // @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
  
          // searchpage.jsp should be available in 
          // the mentioned webserver, then below code works fine  
          request.getRequestDispatcher("searchpage.jsp").forward(request, response);
          return;
    }
  
}


上面这组代码应该出现在动态 Web 项目模式中,一旦在 Eclipse 中创建,默认情况下它会随web.xml文件一起提供

XML



    sampleProject1
    
    
        index.html
        index.htm
        index.jsp
        default.html
        default.htm
        default.jsp
    

一旦 index.jsp 页面在服务器上运行(通常是 Apache Tomcat),我们可以看到以下输出。一个简短的视频将解释它是如何完成的

通过使用request.getRequestDispathcer(“”).forward(request, response) 我们可以进行页面重定向。但是指定的页面应该在正在使用的网络服务器中可用。否则它不能转发/重定向。作为一个经验法则,如果要求重定向到服务器外部存在的页面,那么请使用 response.sendRedirect。该名称本身指定它始终是一个新请求,并且可以在服务器内部或外部使用。主要的是它在客户端工作。关于 HttpResponse.setStatus,我们有不同的状态集

让我们看看如何使用“getRequestDispatcher().forward”实现页面重定向。单独的 Servlet 代码将发生变化,而且由于转发的页面应该在同一个 Web 服务器中可用,因此这里也显示了它。

搜索页面.jsp

附加视频中解释了输出

结论

因此,通过使用 response.sendRedirection(“”) 可以出现在同一个 webserver/outside 和 request.getRequestDispatcher(“”).forward(request, response ) 我们可以进行页面重定向。由于几个原因,它可以做到。最终概念是为最终用户提供适当的响应页面。