Structs是Java三大框架之一,Struts是采用JavaServlet/JavaServer Pages技術,開發Web應用程序的開放源碼的Framework。采用Structs開發是基於MVC的應用框架。
首先簡單再說一下MVC(Model/View/Controller):
M是指數據模型,在Structs中通常由ActionForm Bean表示,
V是指用戶界面,視圖通常是由JSP建立的,Structs包含擴展自定義標簽庫(TagLib),可以簡化用戶界面的創建過程。目前的標簽庫包括:Bean Tags 、 HTML tags 、 Logic Tags 、 Nested Tags 以及 Template Tags 等。
C則是控制器,在Structs中實現控制邏輯的是Action,在struts-config.xml配置文件中ActionMapping 與 ActionForward 則指定瞭不同業務邏輯或流程的運行方向。
使用MVC的目的是將M和V的實現代碼分離,從而使同一個程序可以使用不同的表現形式,C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新。
Structs隻能用於Web程序開發,那麼它的工作流程是怎麼走的呢?在Struts中,用戶的請求一般以*.do作為請求服務名,所有的*.do請求均被指向ActionSevlet,ActionSevlet根據Struts-config.xml中的配置信息,將用戶請求封裝成一個指定名稱的FormBean,並將此FormBean傳至指定名稱的ActionBean,由ActionBean完成相應的業務操作,如文件操作,數據庫操作等。每一個*.do均有對應的FormBean名稱和ActionBean名稱,這些在Struts-config.xml中配置。所以說Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。
下面做一個登陸頁面的小Demo和大傢分享:
首先是JSP頁面的代碼(其中使用瞭taglib):
[html]
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="https://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="https://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="https://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="https://struts.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<html:base />
<title>登陸頁面</title>
</head>
<body>
<center>
<font color="red"><html:errors property="loginerror" /></font><br>
<form action="login.do" method="post" focus="login">
<table border="0">
<tr>
<td>用戶名:</td>
<td><input name="username" type="text" /></td>
<td>
<font color="red"><html:errors property="username"/></font>
</td>
</tr>
<tr>
<td>密碼:</td>
<td>
<input name="password" type="password" />
</td>
<td>
<font color="red"><html:errors property="password"/></font>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交"/>
</td>
</tr>
</table>
</form>
</center>
</body>
</html:html>
接著是ActionServlet代碼:
[java]
package com.sinosoft.servlet.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 org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import com.sinosoft.servlet.form.LoginForm;
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LoginForm loginForm=(LoginForm)form;
if(loginForm.getUsername().equals("xdp") && loginForm.getPassword().equals("123")){
//登陸成功,將用戶信息設置到session中
request.getSession().setAttribute("user", loginForm.getUsername());
//跳轉到指定的頁面
return mapping.findForward("success");
}else{
//登陸失敗,處理
ActionMessages errors=new ActionMessages();
errors.add("loginerror",new ActionMessage("login.error"));
this.addErrors(request, errors);
//獲取配置文件中action的input屬性,並跳轉到這個頁面
return mapping.getInputForward();
}
}
}
下面是ActionForm的代碼:
[java]
package com.sinosoft.servlet.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
public class LoginForm 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;
}
/**
* 驗證函數
*/
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors=new ActionErrors();
//判斷用戶名,加入錯誤信息
if(this.username==null || this.username.trim().equals(""))
{
errors.add("username", new ActionMessage("username.null"));
}
//判斷密碼,加入錯誤信息 www.heatpress123.net
if(this.password==null || this.password.trim().equals(""))
{
errors.add("password", new ActionMessage("password.null"));
}
return errors;
}
}
我們還添加瞭一個配置文件ApplicationResources.properties,用來存放錯誤提示信息:
最後一個是struts-config.xml配置信息:
[html] www.aiwalls.com
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "https://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<form-beans>
<form-bean name="loginForm" type="com.sinosoft.servlet.form.LoginForm"/>
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings>
<action path="/login" attribute="loginForm"
input="/login.jsp" name="loginForm" scope="request"
type="com.sinosoft.servlet.action.LoginAction">
<forward name="success" path="success.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="com.yourcompany.struts.ApplicationResources"></message-resources>
</struts-config>