學了mvc模式的設計,現在再來看struts,它其實也是mvc模式的,只是用了struts,能減少我們用mvc的時間。
對於應用struts來說,主要用到struts裏的org.apache.struts.action.ActionServlet,org.apache.struts.action.Action、org.apache.struts.action.ActionForm,通過xml的配置文件,實現jsp和servlet的響應請求和轉發。
以用戶登錄爲例,解說struts請求轉發的流程
1.配置servlet
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<!--struts的配置路徑 -->
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>
<!--控制器的映射路徑 ,以.do發起的請求交給ActionServlet處理-->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
2.jsp登陸界面
<form name="loginForm" method="post" action="LoginAction.do">
用戶名:<input type="text" name="username" id="username" ></input>
<p></p>
密 碼:<input type="text" name="psw" id="psw" ></input>
<p></p>
<input type="submit" name="apply" id="apply" value="提交"></input>
<input type="submit" name="cancel" id="cancel" value="取消"></input>
</form>
3.編寫javabean文件
public class LoginBean extends org.apache.struts.action.ActionForm{
private String username;
private String psw;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPsw() {
return psw;
}
public void setPsw(String psw) {
this.psw = psw;
}
4.編寫action類
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception{
LoginBean lb=(LoginBean)form;
//獲得請求的參數名和密碼
String username=lb.getUsername();
String psw=lb.getPsw();
if(username.equals("plh")&&psw.equals("123456")){
return mapping.findForward("LoginOK");
}else{
return mapping.findForward("LoginFail");
}
}
5.編寫struts-config.xml配置文件,使struts的action,formBean,以及jsp界面聯繫起來
<struts-config>
<form-beans>
<!--配置LoginBean的名字loginForm -->
<form-bean name="LoginForm" type="test.Bean.LoginBean"></form-bean>
</form-beans >
<action-mappings>
<action attribute="LoginForm" name="LoginForm" path="/LoginAction" scope="request" type="test.Action.LoginAction">
<forward name="LoginOK" path="/LoginOK.jsp" contextRelative="true"></forward>
<forward name="LoginFail" path="/LoginFail.jsp" contextRelative="true"></forward>
</action>
</action-mappings>
</struts-config>
在struts-config.xm中,Actionservlet根據WEB-INF/struts-config.xml中的配置處理請求,首先根據action中的name屬性,找到相應的formbean
<form-bean name="LoginForm" type="test.Bean.LoginBean"></form-bean>
並生成test.Bean.LoginBean對象,自動解析請求中的參數和賦值給LoginBean對象,然後根據path屬性匹配請求路徑,獲得test.Action.LoginAction對象,調用其中重寫的execute方法,傳入LoginBean對象和請求,應答等對象
同時,LoginBean對象以attribute="LoginForm"爲屬性配置的名字放在scope=“request”裏
在跳轉界面裏可以通過${requestScope.LoginForm.username}獲得屬性值
好了,就這樣了。