Maison >Java >javaDidacticiel >Introduction détaillée à l'interception d'URL Struts1
Cet article présente principalement l'interception d'URL des informations liées à Struts1_compilées par la Power Node Java Academy. Les amis dans le besoin peuvent s'y référer
L'interception d'URL de Struts1
Analysons d'abord ActionServlet en profondeur. Nous utilisons le débogage des points d'arrêt pour examiner le code source sous-jacent. Étant donné que cette instance est soumise en mode post, définissez le point d'arrêt sur la méthode doPost./** * <p>Identify and return the path component(from the request URI) that * we will use to select an <code>ActionMapping</code> with which todispatch. * If no such path can be identified,create an error response and return * <code>null</code>.</p> * * @param request The servlet request weare processing * @param response The servlet response weare creating * * @exception IOException if an input/outputerror occurs */ protectedString processPath(HttpServletRequest request, HttpServletResponse response) throws IOException { String path = null; // For prefix matching, match on the path info (if any) path = (String) request.getAttribute(INCLUDE_PATH_INFO); if (path == null) { path = request.getPathInfo(); } if ((path != null) && (path.length() > 0)) { return (path); } // For extension matching, strip the module prefix and extension path = (String) request.getAttribute(INCLUDE_SERVLET_PATH); if (path == null) { path = request.getServletPath(); } String prefix = moduleConfig.getPrefix(); if (!path.startsWith(prefix)) { String msg =getInternal().getMessage("processPath"); log.error(msg + " " + request.getRequestURI()); response.sendError(HttpServletResponse.SC_BAD_REQUEST, msg); return null; } path = path.substring(prefix.length()); int slash = path.lastIndexOf("/"); int period = path.lastIndexOf("."); if ((period >= 0) && (period >slash)) { path = path.substring(0, period); } return (path); }Analyser ce code :
path = (String)request.getAttribute(INCLUDE_PATH_INFO); if (path == null) { path = request.getPathInfo(); } if ((path != null) && (path.length() > 0)) { return (path); }Ce code détermine d'abord si les informations de chemin existent dans javax.servlet.include.path_info, ici Il faut savoir que cette valeur d'attribut n'existe que si une page est affichée en mode RequestDispatcher.include. Donc s'il n'y a pas de valeur ici, il entrera dans le programme path=request.getPathInfo(). La valeur obtenue par getPathInfo ici est l'information de chemin relative au servlet.
// For extension matching, stripthe module prefix and extension path = (String) request.getAttribute(INCLUDE_SERVLET_PATH); if (path == null) { path = request.getServletPath(); } String prefix = moduleConfig.getPrefix(); if (!path.startsWith(prefix)) { String msg =getInternal().getMessage("processPath"); log.error(msg + " " + request.getRequestURI()); response.sendError(HttpServletResponse.SC_BAD_REQUEST, msg); return null; }Ce morceau de code sert à déterminer si javax.servlet.include.servlet_path a une valeur. Cette valeur d'attribut n'existe que lorsqu'une page est affichée en mode requestDispatcher.include, il n'y a donc pas de valeur ici. . Entrez ensuite path = request.getServletPath(); Cette méthode consiste à obtenir la sous-chaîne après avoir renvoyé le contexte de l'URI de la requête, donc la valeur de retour ici est "/" ainsi que le nom et le suffixe de la page d'accès (est-ce la même chose que mon instance mvc principe des interceptions ? Entrez ensuite le code suivant :
path = path.substring(prefix.length()); intslash = path.lastIndexOf("/"); intperiod = path.lastIndexOf("."); if((period >= 0) && (period > slash)) { path = path.substring(0, period); } return (path);La méthode ici est essentiellement la même que la mienne ci-dessus, l'essentiel est de supprimer le suffixe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!