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決定如何跳轉。