Struts 1.X工作原理

Struts 是Apache所開發的一個web應用框架,用來簡化web開發的中常用、重複的工作。

原理圖:

在以前的的開發中,瀏覽器的請求會找一個Servlet處理,然後返回瀏覽器,而在struts中所有的請求都會找一個叫做ActionServlet處理,它會根據配置文件配的action來將請求交給指定的Action來處理。

 

配置Struts:

1.引入Struts的jar包

2.在web工程目錄下新建struts-config.xml(它用來配置struts如何工作)

3.配置web.xml中Struts的ActionServlet處理請求

引入jar包和配置文件後工程結構目錄應爲:

web.xml 配置如下節點:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>Struts</display-name>
	<servlet>
	<!-- 這個ActionServlet是Struts用來處理所有請求並根據配置文件調用指定的Action,沒有它Struts無從談起 -->
	<servlet-name>ActionServlet</servlet-name>
	<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
	<!-- ActionServet在init方法中讀取config配置項,來決定如何處理這個請求。 -->
	<init-param>
	<param-name>config</param-name>
	<param-value>/WEB-INF/struts-config.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
	</servlet>
	<!--  處理所有*.st的請求 -->
	<servlet-mapping>
	<servlet-name>ActionServlet</servlet-name>
	<url-pattern>*.st</url-pattern>
	</servlet-mapping>
</web-app>

配置struts-config.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>

</struts-config>

這裏的配置文件是空的,struts所有的配置都在<struts-config></struts-config>節點中配置

 

從上面的Struts工作原理圖可以看出,請求先被ActionServlet處理,然後轉到指定的Action中進行業務邏輯的處理(這個Action可以理解爲MVC模式裏的控制器),處理完畢後返回ActionServlet,再由ActionServlet返回瀏覽器。

第一個案例:

1.新建一個處理請求的Action並覆蓋父類的execute方法,它繼承至Action類

2.配置struts-config.xml文件,指定某個請求由這個Action處理.

 

新建一個用於處理請求的Action



 

package struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class IndexAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		request.setAttribute("msg", "IndexAction 處理.....");
		return mapping.findForward("index");//這個index在struts-config.xml文件中action節點的子節點中配置,表示跳轉路徑。
	}

}


在struts-config.xml中配置action

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<action-mappings>
<action path="/Index" type="struts.action.IndexAction">
<forward name="index" path="/WEB-INF/jsp/Index.jsp"></forward>
</action>
</action-mappings>
</struts-config>

這裏的action-mapping節點中的每一個action節點表示一個action

action節點的屬性含義

path:它表示這個action處理它指定的路徑

type:action處理類的路徑

action節點中的forward節點表示,跳轉路徑。

到這裏就配置完畢了,啓動tomcat,訪問:http://localhost:8080/DemoStruts/Index.st

就會看到

是不是挺簡單,不過strtus只能做這點事情,用它幹嘛呢?

它可以簡化web開發中的一些重複、繁雜的勞動,僅僅是簡化而已,而不是替代,它能做得事情用傳統的jsp技術也能做。

 

簡化一  表單註冊,它自動封裝表單數據到一個bean

1.新建一個bean 繼承至actionfrom

package struts.bean;

import org.apache.struts.action.ActionForm;

public class RegisterUserBean extends ActionForm {
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

2.新建一個Action用於處理這個請求

package struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import struts.bean.RegisterUserBean;

public class RegisterAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//從ActionForm拿到封裝後表單數據
		RegisterUserBean userbean=(RegisterUserBean) form;
		System.out.println(userbean.getUsername());
		request.setAttribute("msg", userbean.getUsername());
		return mapping.findForward("index");
	}

}


3.配置struts-config.xml 配置

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
<form-bean name="registeruser" type="struts.bean.RegisterUserBean"></form-bean>
</form-beans>
<action-mappings>
<action path="/Index" type="struts.action.IndexAction">
<forward name="index" path="/WEB-INF/jsp/Index.jsp"></forward>
</action>
<action path="/RegisterUI" type="struts.action.RegisterUIAction">
<forward name="registerui" path="/WEB-INF/jsp/RegisterUser.jsp"></forward>
</action>
<action path="/RegisterAction" name="registeruser" type="struts.action.RegisterAction">
<forward name="index" path="/WEB-INF/jsp/Index.jsp"></forward>
</action>
</action-mappings>
</struts-config>


這樣就配置OK了.

 

Struts 轉發請求:


 

 

 瀏覽器發起一個請求,首先進入ActionServlet,它根據配置文件對這個請求做一系列的封裝和處理(可以理解爲預處理)後調用處理這個請求的Action類的Execute方法,Action處理完畢後返回一個ActionForward,ActionSerlvet根據返回的ActionServlet決定如何跳轉。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章