In diesem Artikel wird hauptsächlich das URL-Abfangen von Struts1_bezogenen Informationen vorgestellt, die von der Power Node Java Academy zusammengestellt wurden. Freunde in Not können sich darauf beziehen
Das URL-Abfangen von Struts1
Lassen Sie uns zunächst ActionServlet eingehend analysieren. Wir verwenden Breakpoint-Debugging, um den zugrunde liegenden Quellcode zu untersuchen. Da diese Instanz im Post-Modus übermittelt wird, legen Sie den Haltepunkt auf die doPost-Methode fest.
Wir debuggen das laufende Programm und geben die Methode in doPost ein:
Diese Methode Es ist sehr wichtig, dass es die Kernmethode für die Ausführung von ActionServlet ist.
Wir geben diese Methode ein:
Dann geben Sie weiter ein:
Wir haben plötzlich entdeckt, dass eine solche Methode die Methode „processPath“ ist, eine Methode zum Abfangen von Zeichenfolgen. Der Quellcode dieser Methode lautet wie folgt:
/** * <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); }
Analysieren Sie diesen Code:
path = (String)request.getAttribute(INCLUDE_PATH_INFO); if (path == null) { path = request.getPathInfo(); } if ((path != null) && (path.length() > 0)) { return (path); }
Dieser Code ermittelt zunächst, ob die Pfadinformationen in javax.servlet.include.path_info vorhanden sind. Hier müssen Sie wissen, dass dieser Attributwert nur vorhanden ist, wenn eine Seite im RequestDispatcher.include-Modus angezeigt wird. Wenn hier also kein Wert vorhanden ist, wird das Programm path=request.getPathInfo() eingegeben. Der von getPathInfo hier erhaltene Wert ist die Pfadinformation relativ zum 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; }
Mit diesem Codeteil wird ermittelt, ob javax.servlet.include.servlet_path einen Wert hat. Dieser Attributwert existiert nur, wenn eine Seite im requestDispatcher.include-Modus angezeigt wird, daher gibt es hier keinen Wert . . Geben Sie dann path = request.getServletPath(); ein. Diese Methode dient dazu, die Teilzeichenfolge nach der Rückgabe des Anforderungs-URI-Kontexts abzurufen. Der Rückgabewert lautet hier also „/“ sowie der Name und das Suffix der Zugriffsseite (ist dies dasselbe wie bei meiner MVC-Instanz). abfangen? Prinzip). Geben Sie dann den folgenden Code ein:
path = path.substring(prefix.length()); intslash = path.lastIndexOf("/"); intperiod = path.lastIndexOf("."); if((period >= 0) && (period > slash)) { path = path.substring(0, period); } return (path);
Die Methode hier ist im Wesentlichen die gleiche wie meine oben, die Hauptsache ist, das Suffix zu entfernen.
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in das Abfangen von Struts1-URLs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!