tutorial - servlet java




Comment s'assurer qu'il n'y a pas de paramètre dans l'URL? (5)

Je sais comment m'assurer qu'un paramètre spécifique existe dans l'url. Je voudrais m'assurer qu'il n'y a aucun paramètre dans l'url pas juste un spécifié. Comment puis-je accomplir cela? J'ai une longue liste de paramètres et il semble inefficace d'avoir une liste de conditions pour chacun d'entre eux.

Exemple d'URL: www.domain.com/Product/UniqueId

Comme chaque produit a de nombreux paramètres uniques, les utilisateurs peuvent accéder aux pages de produits à travers, code unique, fournisseur unique, sig unique, pod unique, etc des produits.

Par exemple:

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

Les questions que j'ai trouvées pertinentes mais inutiles dans mon cas étaient 1 , 2 , 3 , 4

J'ai besoin de faire un tel test dans JSP pas Java.


Vous ne savez pas exactement ce que vous entendez par "pour vous assurer qu'il n'y a pas de paramètre". Vous ne pouvez pas, les clients peuvent utiliser n'importe quelle URL qu'ils veulent toucher votre serveur. Vous pouvez uniquement choisir de traiter en fonction de la chaîne d'URL que votre code serveur reçoit.

Sinon, voici deux pointeurs:

  1. Essayez-vous de vérifier ou d'analyser l'URL? Si c'est le cas, vous pouvez faire: url.indexOf ('?') <0, en supposant que l'URL varialble ait toute la chaîne de l'URL ...

  2. Voir aussi Java URL api pour obtenir la chaîne de requête, etc.



Suivre

Avec la nouvelle exigence que cela doit être fait dans JSP, même si le code du gestionnaire de Spring listé dans la réponse originale ci-dessous pourrait ajouter un attribut Modèle avec les informations pertinentes, voici comment faire.

Similaire deux façons comme ci-dessous:

<!-- 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>

Réponse originale

Vous avez tagué spring-mvc , ce qui signifie que vous avez quelque chose comme ça ( ça aurait été bien si vous l'aviez posté) :

@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
    }
}

Voici deux façons de vérifier les "paramètres sans requête":

// 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
}

Vous pourriez vouloir vérifier ce lien pour tous les différents types de paramètres que Spring peut vous donner:
http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-arguments


Cela fonctionne un peu plus facilement avec la classe 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"
   }
}

Donc, si getQuery() renvoie null il n'y a pas de paramètres. Sinon, il y en a.

En ce qui concerne votre édition: Eh bien, je ne recommande pas vraiment de mettre du code dans une JSP. C'est considéré comme une mauvaise pratique de nos jours.

Mais si vous le devez, il semble que vous puissiez demander tous les paramètres et si le résultat est 0, il n'y en a pas.

<%
   Map params = request.getParameterMap();
   boolean noParams = (params.getSize() == 0);
%>

Le code JSP n'est pas testé, mais devrait vous donner l'idée. Vous pouvez ensuite utiliser le noParams booléen plus tard dans le code JSP.


Utilisez les méthodes de java.net.URI pour obtenir tout ce dont vous avez besoin sur l'URL.





jsp