Как вызвать класс через RequestDispatcher из JSP

Я создал класс RedirectManager который имеет метод doRedirect(request, response, url) и его роль заключается в пересылке на указанный URL (аргумент String) с использованием метода RequestDispatcher forward(). Я хочу, чтобы при нажатии ссылки на странице JSP (рассмотрите существующий) объект RedirectManager вызывает doRedirect(url).

Как вызвать этот метод при нажатии ссылки?

1 ответ

Ну, один из способов сделать это (я думаю) отправляет HTTP-запрос GET из вашей ссылки, например

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<a href="./MyJspAction?targetUrl=page.html" target="_blank">click here</a>

этот JSP отправит запрос сервлету

package mypackage;
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 MyJspAction */
@WebServlet("/MyJspAction")
public class MyJspAction extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String targetUrl = request.getParameter("targetUrl"); new RedirectManager().doRedirect(request,response,targetUrl); }
}

то сервлет вызывает ваш объект RedirectManager

package mypackage;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RedirectManager { public void doRedirect(HttpServletRequest request, HttpServletResponse response, String targetUrl) throws ServletException, IOException { request.getRequestDispatcher(targetUrl).forward(request, response); }
}

отправка запроса на страницу.html

Hello

Обратите внимание, что пересылка и перенаправление - это разные вещи.

licensed under cc by-sa 3.0 with attribution.