将servlet请求重定向到另一个servlet

时间:2018-04-26 09:14:57

标签: java tomcat java-ee web

在我们的应用程序中,我们通过邮件触发所有通知。

所有模板都有非sso链接 > / Userlogin?param1 = param2value& param2 = param2value“>链接访问应用

我需要将所有模板中的此链接修改为

> / Userloginsso?param1 = param2value& param2 = param2value“>链接访问应用

由于有很多模板并且需要大量的手动工作,我们是否可以将Userlogin的请求重定向到Userloginsso。我们可以在web.xml中做什么配置?

3 个答案:

答案 0 :(得分:1)

您可以使用以下内容在UserLogin servlet中执行简单的重定向:

public void doGet (HttpServletRequest request, HttpServletResponse response) throws IOException {
    String param1 = request.getParameter ("param1");
    String param2 = request.getParameter ("param2");
    // other parameters 

    // Build the new url: if too much parameters, prefer using a StringBuilder over String concatenation for better performances 
    String baseUrl = request.getContextPath () + "/Userloginsso?param1=" + param1 + "&param2=" + param2;

    String encodedUrl = response.encodeRedirectURL (baseUrl);

    response.sendRedirect (encodedUrl);
}

答案 1 :(得分:1)

考虑到您在web.xml中有Userlogin的映射,如下所示:

<web-app>
    <servlet>
         <servlet-name>Userlogin</servlet-name>
         <servlet-path>com.something.Userlogin</servlet-path>
    </servlet>
    <servlet-mapping>
         <servlet-name>Userlogin</servlet-name>
         <url-pattern>/Userlogin</url-pattern>
    </servlet-mapping>
</web-app>

将现有映射修改为:

<web-app>
    <servlet>
         <servlet-name>Userloginsso</servlet-name>
         <servlet-path>com.something.Userloginsso</servlet-path>
    </servlet>
    <servlet-mapping>
         <servlet-name>Userloginsso</servlet-name>
         <url-pattern>/Userlogin</url-pattern>
    </servlet-mapping>
</web-app>

现在对Userlogin的所有调用都将重定向到Userloginsso servlet。

答案 2 :(得分:0)

如果我正确理解了您的问题,您可以使用过滤器example here获取该网址,并在您的应用中将其放入其他地方。或者和url重写库,例如我们this one

如果您仍然需要servlet,则可以使用ProxyServlet。已经有很多很好的实现。

示例:

Complex proxy servlet with all features

Simple proxy servlet, limited features