有没有一种简单的方法来获取URL中的URL

问题描述:

我正在为网站的电子邮件验证链接工作。当用户注册并完成填写他们的个人数据(并通过所有检查)时,他们会被发送到一个jsp页面,表明一封电子邮件已发送到他们作为用户名输入的地址,并带有一个点击链接以验证电子邮件地址。因此,这部分是一切都很好,我生成的链接(现在只是使用我的本地主机),它看起来像这样的例子http://localhost:9999/javawork/msc/validate/?6FRQ8RAT&u=1s3w1Iih64egX01188HT。当他们点击链接时,它会进入验证文件夹中的jsp页面index.jsp。在这一点上,我需要抓住整个URL并将其发送给一个函数,以确保URL格式正确(出于安全目的)。如果它通过并且格式正常,我需要在'?'后立即获取8位数的代码。还有'u'的价值。然后,我将这些值发送到一个函数,检查它们是否与我们在数据库中的匹配,如果他们这样做,我用验证日期更新数据库记录,以便我们知道他们已验证了他们的电子邮件地址。有没有一种简单的方法来获取URL中的URL

所以我的问题是第一,我如何抓住整个URL来检查格式,第二,我如何抓住8位数的代码和'u'的值?我一直在网上查找,所有示例都需要创建多个函数或类,并使用URL类。他们都希望我创建一个URL对象的实例并使用整个URL对其进行初始化。但它不是一个静态URL,对于每一个注册的用户来说都不一样,因为它会生成一个随机的8位数字代码来检查,而'u'的值是来自数据库的被屏蔽的用户ID。我不明白如何才能要求您初始化整个网址以获取值,直到您从网址获取值时才知道值是什么。

是否有一种简单的方法来获取值和整个URL?即使我可以在'?'之后获取所有内容,我知道基本URL,并且可以构建一个新的String来检查格式化,如果我可以从'?'中获得之后。请帮助那部分。谢谢。

+0

你正在编写一个servlet来处理来自客户端的请求或简单的'.jsp'页面吗? – 2012-07-27 15:34:11

+0

只是一个jsp页面。我已经有一个java类的函数来检查数据库的值。我只需要jsp页面来获取URL值,将它们传递给函数(返回一个布尔值),然后如果返回true,jsp页面将显示成功消息,如果返回false,则显示失败消息。 – kei23th 2012-07-27 15:35:44

接口HTTPServletRequest包含一个方法getRequestURL,它返回一个StringBuffer,您可以使用该方法检查整个URL的格式。 你可以得到它,在一个JSP页面:

<%=request.getRequestURL()%> 

如果您使用的是您在上面指定的请求格式,那么你的第二个问题:

我怎么抢了8位数代码和'u'的值?

可以通过操纵那个StringBuffer来在?和8位数字代码的&。 或使用其他请求方法, ServletRequest.getParameter(java.lang.String name)

要抓住每一个参数,不过,我不能肯定它会怎么收场处理8位代码的未命名参数。让我知道那是怎么回事。

+0

这正是我所需要的。一旦我有了整个URL,我就可以将它分成'?'像你说的。非常感谢。 – kei23th 2012-07-27 16:35:50

+1

''只让我看到'?'但不是'?'或之后的anythnig。任何想法如何抓住查询字符串参数呢? – kei23th 2012-07-27 17:31:15

+0

你说得很好,我的错误。我提供的第二种方法可以做到这一点。 [request.getParameterNames()](http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html)将返回一个参数名称的启用,您可以使用[请求.getParameter(java.lang.String name)](http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getParameter%28java.lang.String%29)遍历每个参数并获得它的值。 – OYRM 2012-07-27 17:52:29

不要将8位代码视为未命名参数。把它看作没有价值的参数。

request.getParameterNames()将为您提供8位代码以及“u”。所以你可以这样循环: String code =“”;

for(String paramName : request.getParameterNames()) { 
    if(!paramName.equalsIgnoreCase("u")) 
     code = paramName; 
}