2014-01-12 55 views
0

我正在编写一个检索请求参数的Servlet,但需要在init方法中使用它们。由于init方法将在doGet方法之前调用,并且由于init方法没有将HttpServletRequest对象作为参数,所以我不知道如何获取请求参数。如何从servlet初始化方法获取请求参数

public class OpenIdServlet extends HttpServlet 
{ 
    ... 
    ... 
    private OpenIdManager manager; 

    @Override 
    public void init() throws ServletException 
    { 
     super.init(); 
     manager = new OpenIdManager(); 
     manager.setRealm("http://localhost:8080/OpenIDSample"); 
     manager.setReturnTo("http://localhost:8080/OpenIDSample/openid"); //I need to append the value of a request parameter here... 
    } 
    ... 
    ... 
} 

所以现在的问题是:有什么办法可以在一个servlet的init()方法得到HttpServletRequest参数?如果没有其他更好的方法可以用来解决这个问题?谢谢。

+0

说明库OpenIdManager来自哪里。 – McDowell

+0

@McDowell它来自JOpenID-1.08 – Jevison7x

回答

3

init在启动时调用一次。所以你必须忍受部分returnTo,并根据请求处理(doGet/doPost)完成请求参数。

实际上,管理器似乎是依赖于请求的,因此应该在请求中创建 - 从不作为字段。因为可能有几个请求。也许作为会话属性持久。

+1

增加了一个评论,说相同,+1;) – 2014-01-12 20:29:18

+0

@Joop Eggen:但是当我在doGet()方法中声明它时,管理器拒绝工作。你熟悉这种OpenID技术吗? – Jevison7x

+0

已知的技术,虽然没有使用jOpenId库。如果在init中需要,你可以给一个固定的URL,并在doGet/doPost中调用getAuthentication调用setUserPrincipal或设置一些会话属性。 returnTo将会重定向。 –

1

你的问题没有意义。 init()方法被调用时没有请求。它在容器初始化过程中被调用。

你的意思是初始参数?它们可以通过作为init()的参数提供的ServletContext来使用。

相关问题