java - recibir - ¿Cómo puedo asegurarme de que no haya ningún parámetro en la url?
manual de programacion android pdf (7)
No estoy seguro de lo que quiere decir con "para asegurarse de que no haya ningún parámetro" ... simplemente no puede, los clientes pueden usar la URL que quieran para acceder a su servidor. Solo puede elegir procesar en función de la cadena de URL que recibe su código de servidor.
De lo contrario, aquí hay dos consejos:
¿Estás tratando de verificar o analizar la URL? Si es así, puede hacer: url.indexOf (''?'') <0, suponiendo que url varialble tiene toda la cadena de url ...
También vea Java URL api para obtener una cadena de consulta, etc.
Sé cómo asegurarme de que exista un parámetro específico en la url. Me gustaría asegurarme de que no haya ningún parámetro en la url, no solo uno específico. ¿Cómo puedo lograr esto? Tengo una larga lista de parámetros y parece ineficaz tener una lista de condiciones para todos ellos.
La URL de muestra es: www.domain.com/Product/UniqueId
Como cada producto tiene muchos parámetros únicos, los usuarios pueden llegar a las páginas de los productos a través de un código único, un proveedor único, sig único, pod único, etc. de los productos.
Por ejemplo:
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
Las preguntas que encontré relevantes pero no útiles en mi caso fueron 1 , 2 , 3 , 4
Necesito hacer tales pruebas en JSP, no en Java.
intente esto http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#contains(java.lang.CharSequence) .
Te di el código solo para encontrar si hay algún parámetro aprobado en la url. No dará la cantidad de parámetros como ese ...
String stringObj ="www.domain.com/Product/UniqueId";
(stringObj.contains("?"))?true: false;
JSP mantiene un objeto implícito a paramValue
que mapea los parámetros de solicitud a una matriz. Puede usar este objeto y la función de longitud JSTL para conocer la cantidad de parámetros directamente en jsp, algo así como
<c:if test="${fn:length(paramValues) gt 0}">...</c:if>
asegúrese de incluir los siguientes taglibs al comienzo de su página jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
Seguir
Con el nuevo requisito de que debe hacerse en JSP, aunque el código del controlador de Spring que figura en la respuesta original a continuación podría agregar un atributo de Modelo con la información relevante, aquí se explica cómo hacerlo.
Dos formas similares a continuación:
<!-- 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>
Respuesta original
Etiquetaste spring-mvc
, por lo que significa que tienes algo así (hubiera sido bueno si lo hubieras publicado) :
@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
}
}
Aquí hay dos formas de verificar "sin parámetros de consulta":
// 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
}
Es posible que desee consultar este enlace para conocer los diversos tipos de parámetros que Spring puede proporcionarle:
http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-arguments
Esto funciona un poco más fácil con la clase 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"
}
}
Entonces, si getQuery()
devuelve null
no hay parámetros. De lo contrario, hay.
Respecto a su edición: Bueno, realmente no recomiendo poner código dentro de un JSP. Se considera una mala práctica hoy en día.
Pero si debe hacerlo, parece que puede solicitar todos los parámetros y si el resultado es 0, no hubo ninguno.
<%
Map params = request.getParameterMap();
boolean noParams = (params.getSize() == 0);
%>
El código JSP no ha sido probado, pero debería darle la idea. Luego puede usar boolean noParams
en el código JSP.
Podemos verificar fácilmente los parámetros usando Regex . Digamos que tienes las siguientes URL:
www.domain.com/Product/UniqueId?foo=bar
www.domain.com/Product/UniqueId
Ahora, la URL real puede ser cualquier cosa. Podemos marcarlo como . * , Lo que significa cualquier cosa. (Punto = cualquier carácter, * = cero o más veces. Hay expresiones regulares más complejas para verificar las URL, pero usted dijo que le dieron URL, por lo tanto, no son relevantes).
Después de que coincida con su URL, desea verificar los parámetros. Los parámetros están en la sintaxis de:
?key=value&key=value&key=value...
Entonces queremos verificar si hay un signo de interrogación seguido de una combinación de claves y valores. La expresión regular sería:
/?((.*=.*)(&?))+
Eso coincide con un signo de interrogación, seguido por: una clave (. ), Un signo igual, un valor (. ) Y un posible & (&?), 1 o más veces (+)
Entonces puedes ponerlo en un método como ese:
public boolean hasParameters(String url){
return url.matches(".*//?((.*=.*)(&?))+");
}
www.domain.com/Product/UniqueId?foo=bar coincidiría con la expresión regular, y www.domain.com/Product/UniqueId no lo haría, porque no está seguido de los parámetros.
PD: La barra doble antes del signo de interrogación es en honor a Java, no en honor a la expresión regular.
Enlace: corrector Regex con la siguiente expresión regular y ejemplo
Si desea usarlo en JSP, simplemente ponga este método en un scriplet (comenzado con <% y terminado con%>), o en cualquier otro lugar en su código en realidad.
Use los métodos de java.net.URI para obtener todo lo que necesita sobre la URL.