1. 程式人生 > >struts2的工作原理是什麼?

struts2的工作原理是什麼?

作者:郭無心
連結:https://www.zhihu.com/question/28583043/answer/74684588
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		//1.獲取請求引數
		String servletPath = req.getServletPath();
		System.out.println(servletPath);
		
		String path = null;
		
		//2.判斷servletPath,若其等於“product-input.action”,則轉發到
		//WEB-INF/pages/input.jsp
		if("/product-input.action".equals(servletPath)){
			path = "/WEB-INF/pages/input.jsp";
		}
		
		//3.判斷servletPath,若其等於"/product-save.action", 則
		if("/product-save.action".equals(servletPath)){
			//1).獲取請求引數
			String productName = request.getParameter("productName");
			String productDesc = request.getParameter("productDesc");
			String productPrice = request.getParameter("productPrice");
			
			//2).將請求封裝成一個Product物件
			Product product = new Product(null, productName, productDesc, Double.parseDouble(productPrice));
			
			//3).執行儲存操作
			System.out.println("Save Product: " + product);
			product.setProductId(1001);
			
			//4). 將product物件儲存到request當中 //${param.productName} -> ${requestScope.product.productName}
			request.setAttribute("product", product);
			
			path = "/WEB-INF/pages/details.jsp";
		}
		
		if(path != null){
			request.getRequestDispatcher(path).forward(request, response);
			return;
		}
		
	}

 

1、客戶端(Client)向伺服器傳送一個請求(request) 
2、客器(Container)通過web.xml對映請求,並獲得控制器(Controller)的名字。 
3、容器(Container)呼叫控制元件器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前呼叫FilterDispatcher,Struts2.1之後呼叫StrutsPrepareAndExecuteFilter。 
4、控制器(Controller)通過ActionMapper獲得Action的資訊。 
5、控制器(Controller)呼叫ActionProxy。 
6、ActionProxy讀取struts.xml檔案讀取相應的action和interceptor stack的資訊。 
7、ActionProxy把request請求傳遞給ActionInvocation。 
8、ActionInvocation依次呼叫action和interceptor。 
9、根據action執行結果,產生result。 
10、Result資訊返回給ActionInvocation。 
11、產生一個HttpServletResponse響應。 
12、將產生的響應返回給客戶端。