我知道如何确定网址中是否存在特定参数。 我想确保网址中的没有任何参数,而不仅仅是指定的参数。我怎么能做到这一点?我有一长串参数,并且列出所有条件的条件似乎效率低下。
示例网址为:www.domain.com/Product/UniqueId
由于每个产品都有许多独特的参数,用户可以通过产品页面,独特的代码,独特的供应商,独特的sig,独特的pod等产品。
例如:
www.domain.com/Product/UniqueId?code=uniqueCode
www.domain.com/Product/UniqueId?sig=uniqueSig
www.domain.com/Product/UniqueId?pod=uniquepod
www.domain.com/Product/UniqueId?circle=circleNumber&location=Location&color=Color
我需要在JSP而不是Java中进行此类测试。
答案 0 :(得分:5)
使用URI类可以更容易一些:
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
public class UrlTest2
{
public static void main( String[] args )
throws MalformedURLException, URISyntaxException
{
URI url = new URI( "www.domain.com/Product/UniqueId" );
System.out.println( url.getQuery() ); // prints "null"
URI url2 = new URI( "www.domain.com/Product/UniqueId?pod=uniquepod" );
System.out.println( url2.getQuery() ); // prints "pod=uniquepod"
}
}
因此,如果getQuery()
返回null
,则没有参数。否则就有了。
关于你的编辑:嗯,我并不是真的建议把代码放在JSP中。它现在考虑不好的做法。
但如果你必须,看起来你可以要求所有的参数,如果结果是0,那就没有。
<%
Map params = request.getParameterMap();
boolean noParams = (params.getSize() == 0);
%>
JSP代码未经测试,但应该给你一个想法。然后,您可以稍后在JSP代码中使用布尔noParams
。
答案 1 :(得分:4)
<强>跟进强>
由于新的要求必须在JSP中完成,即使下面原始答案中列出的Spring处理程序代码可以添加带有相关信息的Model属性,下面是如何执行此操作。
类似的两种方式如下:
<!-- Use the parameter Map -->
<c:if test="${empty param}">
<!-- no query parameters given -->
</c:if>
<!-- Use the request object -->
<c:if test="${pageContext.request.queryString == null}">
<!-- no query parameters given -->
</c:if>
原始答案
您标记了spring-mvc
,这意味着您有类似的内容(如果您发布了它会很好):
@Controller
public class ProductController {
@RequestMapping("/Product/UniqueId")
public String uniqueId(Model model,
@RequestParam(path="code" , required=false) String code,
@RequestParam(path="sig" , required=false) String sig,
@RequestParam(path="pod" , required=false) String pod,
@RequestParam(path="circle" , required=false) String circle,
@RequestParam(path="location", required=false) String location,
@RequestParam(path="color" , required=false) String color) {
// code here
}
}
以下是两种检查&#34;无查询参数的方法&#34;:
// Get all parameters in a Map
public String uniqueId(Model model,
...,
@RequestParam Map<String, String> allParams) {
if (allParams.isEmpty()) {
// no query parameters given
}
// code here
}
// Use the request object
public String uniqueId(Model model,
...,
HttpServletRequest request) {
if (request.getQueryString() == null) {
// no query parameters given
}
// code here
}
您可能需要查看此链接,了解Spring可以为您提供的所有各种类型的参数:
http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-arguments
答案 2 :(得分:2)
试试这个http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#contains(java.lang.CharSequence)。
我给你的代码只是为了找到在url中传递的任何参数。它不会给出那样的参数数量。
String stringObj ="www.domain.com/Product/UniqueId";
(stringObj.contains("?"))?true: false;
答案 3 :(得分:2)
不确定您的意思&#34;以确保没有任何参数&#34; ..您不能,客户可以使用他们想要访问您服务器的任何网址。您只能选择根据服务器代码接收的URL字符串进行处理。
否则,这里有两个指针:
您是否尝试检查或解析网址?如果是这样,你可以做到: url.indexOf(&#39;?&#39;)&lt; 0,假设url varialble有整个url string ...
另请参阅Java URL api以获取查询字符串等
答案 4 :(得分:2)
JSP持有一个隐式对象paramValue
,它将请求参数映射到数组。您可以使用此对象和JSTL length函数直接在jsp中学习参数的数量,例如
<c:if test="${fn:length(paramValues) gt 0}">...</c:if>
确保在jsp页面的开头包含以下标记库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
答案 5 :(得分:2)
我们可以使用 Regex 轻松检查参数。假设您有以下网址:
www.domain.com/Product/UniqueId?foo=bar
www.domain.com/Product/UniqueId
现在,实际的URL可以是任何内容。我们可以将其标记为。* ,这意味着什么。 (Dot =任何字符,* =零次或更多次。有更复杂的正则表达式来检查URL,但是你说你有URL,因此它们并不相关)。
匹配网址后,您需要检查参数。 参数的语法为:
?key=value&key=value&key=value...
因此,我们要检查问号,然后检查键和值的组合。正则表达式将是:
\?((.*=.*)(&?))+
匹配一个问号,后跟:一个键(。),一个等号,一个值(。)和一个可能的&amp; (&amp;?),1次或多次(+)
所以你可以把它放在这样的方法中:
public boolean hasParameters(String url){
return url.matches(".*\\?((.*=.*)(&?))+");
}
www.domain.com/Product/UniqueId?foo=bar 与正则表达式匹配, www.domain.com/Product/UniqueId 不会,因为参数后面没有。
P.S:问号之前的双斜线是为了java而不是正则表达式。
链接:Regex checker with the following regex & example
如果要在JSP中使用它,只需将此方法放入scriplet(以&lt;%开头并以%&gt;结尾)或实际代码中的任何其他位置。
答案 6 :(得分:2)
使用java.net.URI的方法来获取有关网址的所有信息。