环境搭建:创建Web工程,在Eclipse IDE中新建Dynamic Web Project
在WebContent/WEB-INF/lib目录下,导入jar包,如图所示:
图1
简单的方法是将Struts1下载文件中/webapps/struts-blank.war解压缩,将WEB-INF/lib目录下的jar包复制过去
在WEB-INF目录下将若干文件导入,如图所示:
图2
package mypack;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
public class LoginForm extends ActionForm {
private String password = null;
private String username = null;
// Password Accessors
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
// Username Accessors
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
// This method is called with every request. It resets the Form
// attribute prior to setting the values in the new request.
public void reset(ActionMapping mapping, HttpServletRequest request) {
this.password = null;
this.username = null;
}
public ActionErrors validate(ActionMapping arg0,HttpServletRequest arg1){
ActionErrors errors=new ActionErrors();
if(username==null || username.equals("") ){
errors.add("username",new ActionError("error.username"));
}
return errors;
}
}
分别创建login.jsp welcome.jsp与error.jsp,具体如下:
welcome.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title><bean:message key="app.title" /></title>
</head>
<body>
<b><bean:message key="app.hello" />: <%= request.getAttribute("USER") %></b>
</body>
</html>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title><bean:message key="app.title"/></title>
</head>
<body>
<html:errors />
<html:form action="login.do" method="POST" >
<table >
<tr>
<td><bean:message key="app.username"/>:</td>
<td><html:text property="username" /></td>
</tr>
<tr>
<td><bean:message key="app.password"/>:</td>
<td><html:password property="password" /></td>
</tr>
<tr>
<td colspan="2" align="center"><html:submit /></td>
</tr>
</table>
</html:form>
</body>
</html>
error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title><bean:message key="app.title" /></title>
</head>
<body>
<b><bean:message key="app.loginerror" />
<a href="login.jsp"><bean:message key="app.loginagain" /></a></b>
</body>
</html>
# --helloapp
app.title=helloapp
app.username= User Name
app.password=Password
app.hello=Welcome
app.loginerror=Your username or password are invalid.
app.loginagain=Login Again
error.username=<font color="red">Please input username</font>
java代码:
LoginAction.java
package mypack;
import java.io.IOException;
import javax.servlet.ServletException;
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 LoginAction extends Action {
protected String checkUser(String username, String password) {
String user = null;
// You would normally do some real User lookup here, but
// for this example we will have only one valid username "swq"
if ( username.equals("abc") && password.equals("1234") ) {
user = new String("Java Coder");
}
return user;
}
public ActionForward execute(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException {
String user = null;
// Default target to success
String target = new String("success");
// Use the LoginForm to get the request parameters
String username = ((LoginForm)form).getUsername();
String password = ((LoginForm)form).getPassword();
user = checkUser(username, password);
// Set the target to failure
if ( user == null ) {
((LoginForm)form).setUsername("username");
((LoginForm)form).setPassword("password");
target = new String("failure");
}
else {
request.setAttribute("USER", user);
}
// Forward to the appropriate View
return (mapping.findForward(target));
}
}
LoginForm.java
package mypack;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
public class LoginForm extends ActionForm {
private String password = null;
private String username = null;
// Password Accessors
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
// Username Accessors
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
// This method is called with every request. It resets the Form
// attribute prior to setting the values in the new request.
public void reset(ActionMapping mapping, HttpServletRequest request) {
this.password = null;
this.username = null;
}
public ActionErrors validate(ActionMapping arg0,HttpServletRequest arg1){
ActionErrors errors=new ActionErrors();
if(username==null || username.equals("") ){
errors.add("username",new ActionError("error.username"));
}
return errors;
}
}
完整的工程视图:
图3
修改struts-config.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<!-- ================================================ Form Bean Definitions -->
<form-beans>
<form-bean name="loginForm" type="mypack.LoginForm"></form-bean>
</form-beans>
<!-- ========================================= Global Exception Definitions -->
<global-exceptions>
<!-- sample exception handler
<exception
key="expired.password"
type="app.ExpiredPasswordException"
path="/changePassword.jsp"/>
end sample -->
</global-exceptions>
<!-- =========================================== Global Forward Definitions -->
<global-forwards>
<!-- Default forward to "Welcome" action -->
<!-- Demonstrates using index.jsp to forward -->
<forward
name="welcome"
path="/Welcome.do"/>
</global-forwards>
<!-- =========================================== Action Mapping Definitions -->
<action-mappings>
<action path="/login" type="mypack.LoginAction"
name="loginForm" scope="session"
input="/login.jsp"
validate="true" >
<forward name="success" path="/welcome.jsp" />
<forward name="failure" path="/error.jsp" />
</action>
</action-mappings>
<!-- ============================================= Controller Configuration -->
<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>
<!-- ======================================== Message Resources Definitions -->
<message-resources parameter="resources.application" />
<!-- =============================================== Plug Ins Configuration -->
<!-- ======================================================= Tiles plugin -->
<plug-in className="org.apache.struts.tiles.TilesPlugin" >
<!-- Path to XML definition file -->
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
<!-- Set Module-awareness to true -->
<set-property property="moduleAware" value="true" />
<set-property property="definitions-parser-validate" value="true" />
</plug-in>
<!-- =================================================== Validator plugin -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
启动Tomcat服务器,在地址栏输入:http://localhost:8080/MyStruts1/login.jsp,出现界面:
图4
输入用户名:abc,密码:1234,提交表单,出现页面:
图5
如果验证不通过,出现界面:
图6
到此,一个完整的Struts1工程示例结束