Java design pattern-responsibility chain

Source: Internet
Author: User

Analysis of filters, interceptors in the Java Web

Filters: When a user requests a server, multiple filters can be added to filter the request.

Each filter has a different filtering process for the request

Multiple filters will form a filter chain

When the filter chain is complete, the server begins processing the request

Return results after processing is complete response

Response will also be processed in reverse order by filter chain

Return the user after completion such as:


Code section:

Request and return object public class Request {public String requeststring;} public class Response {public String responsestring;} Filter interface public interface Filter {public void DoFilter (Request request, Response Response, Filterchain chain);} Filter implementation class public class Htmlfilter implements filter{@Overridepublic void DoFilter (Request request, Response Response, Filterchain chain) {request. requeststring = Request. Requeststring.replace ("<", "["). Replace (">", "]"); SYSTEM.OUT.PRINTLN ("Htmlfilter request processing completed request. requeststring = "+request. requeststring); Chain.dofilter (request, response, chain); response. responsestring = Response. Responsestring + "| Htmlfilter response Treatment "; SYSTEM.OUT.PRINTLN ("htmlfilter response returns processing complete response. responsestring = "+response. responsestring);}} public class Sensitivefilter implements filter{@Overridepublic void DoFilter (Request request, Response Response, Filterchain chain) {request. requeststring = Request. Requeststring.replace ("Sensitive", "* *"); System.out.println ("Sensitivefilter reQuest processing Complete request. requeststring = "+request. requeststring); Chain.dofilter (request, response, chain); response. responsestring = Response. Responsestring + "| Sensitivefilter response Treatment "; SYSTEM.OUT.PRINTLN ("sensitivefilter response returns processing complete response. responsestring = "+response. responsestring);}} Filter chain public class Filterchain {private list<filter> filters = new arraylist<filter> ();p ublic Filterchain AddFilter (filter filter) {Filters.add (filter); return this;} int index = -1;public void DoFilter (Request request,response Response, Filterchain chain) {if (Filters.size () > + + Index {filters.get (index). DoFilter (Request, response, chain);} else if (filters.size () = = index) {response. responsestring = "" Server Processes Code section ""; System.out.println ("Return after business logic processing:" + response.) responsestring);}}} Test class public class Maintest {public static void main (string[] args) {Request req = new Request (); req. requeststring = "O (∩_∩) o haha ~ <script> <style> I am a sensitive word"; Response res = new Response (); Filterchain Chain = new Filterchain (); Chain.addfilter (new Htmlfilter ()). addfilter (New Sensitivefilter ()); Chain.dofilter (req, res, chain);}} Execution result htmlfilter request processing complete request. requeststring = O (∩_∩) o haha ~ [script] [style] I am the sensitive word sensitivefilter request processing complete request. requeststring = O (∩_∩) o haha ~ [script] [style] I am * * return after business logic processing: "Server processes Code section" Sensitivefilter Response return to processing complete response. responsestring = "Server processing code section" | Sensitivefilter Response Processing Htmlfilter response return processing complete response. responsestring = "Server processing code section" | Sensitivefilter Response Treatment | Htmlfilter Response Treatment
Summary: Request-->htmlfilter filtering-->sensitivefilter filtering-->server processing returns response-->sensitivefilter processing Htmlfilter processing

Problem: If you encounter some illegal requests you need to return directly to the

The code is as follows:

Add Illegal filter class public class Errorfilter implements filter{@Overridepublic void DoFilter (Request request, Response Response, Filterchain chain) {request. requeststring = Request. Requeststring.replace ("(:", "^-_-^"); SYSTEM.OUT.PRINTLN ("Errorfilter request processing completed request. requeststring = "+request. requeststring); System.out.println ("********** here Error intercept return **********"); Boolean flag = false;//Impersonation Error request if (flag) {Chain.dofilter (Request, Response, chain);} System.out.println ("********** here Error intercept return **********"); response. responsestring = Response. Responsestring + "| Errorfilter response Treatment "; SYSTEM.OUT.PRINTLN ("errorfilter response returns processing complete response. responsestring = "+response. responsestring);}} Modify the test code to place the error filter between HTML and sensitive public class Maintest {public static void main (string[] args) {Request Req = new Request (); Req. requeststring = "O (∩_∩) o haha ~ <script> <style> I am a sensitive word"; Response res = new Response (); Filterchain chain = new Filterchain () Chain.addfilter (New Htmlfilter ()). addfilter (New Errorfilter ()). AddFilter (New Sensitivefilter ()); Chain.dofilter (req, res, chain);}} Execution result htmlfilter request processing complete request. requeststring = O (∩_∩) o haha ~ [script] [style] I am the sensitive word errorfilter request processing complete request. requeststring = O (∩_∩) o haha ~ [script] [style] I'm a sensitive word, ********** here. Intercept return ******************** error here intercept return ********** Errorfilter response returns processing complete response. Responsestring = NULL | Errorfilter Response Processing Htmlfilter response return processing complete response. Responsestring = NULL | Errorfilter Response Treatment | Htmlfilter response processing looks to see the null value in the response return result that the value represents has not been directly returned by the server and has not been sensitivefilter processed

Summarize:

In the filter, if you encounter an illegal request that requires a direct return, you do not need to call the Chain.dofilter () function request to return directly.


Java design pattern-responsibility chain

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.