【问题标题】:Redirect the servlet request to another servlet将 servlet 请求重定向到另一个 servlet
【发布时间】:2018-04-26 09:14:57
【问题描述】:

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

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

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

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

由于模板很多,需要大量人工,有什么方法可以将 Userlogin 的请求重定向到 Userloginsso。我们可以在 web.xml 中进行任何配置吗?

【问题讨论】:

  • 任何答案对您有用吗?如果是,请将对您有用的标记为已接受:)

标签: java tomcat jakarta-ee web


【解决方案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】:

    你可以在你的 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);
    }
    

    【讨论】:

    • 通过response.encodeRedirectURL添加一次旅行,你会得到我的支持:)
    • @ChristopherSchultz 感谢您的改进建议! :)
    【解决方案3】:

    如果我正确理解您的问题,您可以使用过滤器example here 获取网址并将其转发到您的应用中的其他位置。或者和我们这样的url重写库this one

    如果您仍然想要一个 servlet,您可以使用 ProxyServlet。已经有很多好的实现了。

    例子:

    Complex proxy servlet with all features

    Simple proxy servlet, limited features

    【讨论】:

      猜你喜欢
      • 2015-01-17
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 2023-04-05
      • 2016-04-08
      • 2018-01-05
      • 1970-01-01
      • 2022-10-06
      相关资源
      最近更新 更多