login.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>系统登录</title>
</head>
<body style="margin:0px;">
<div
style="width:320px;margin-left:auto;margin-right:auto;margin-top:150px;float:none;">
<center>
<h2>系统登录</h2>
</center>
<s:form name="form1" action="login" method="POST">
<s:textfield name="user.userId" label="用户名" value=""
style="width:200px;height:30px; line-height:20px;padding:5px;"></s:textfield>
<s:password name="user.password" label="密 码" value=""
style="width:200px;height:30px; line-height:20px;padding:5px;"></s:password>
<s:submit value="提交" style="width:80px;height:25px;"></s:submit>
<s:reset value="重置" style="width:80px;height:25px;"></s:reset>
</s:form>
</div>
<div>${tip}</div>
</body>
</html>
LoginUserAction:
package com.gifer.action;
import com.gifer.model.LoginUser;
import com.opensymphony.xwork2.ActionSupport;
public class LoginUserAction extends ActionSupport {
private static final long serialVersionUID = -4200395139850721503L;
private String tip;
private LoginUser user;
public LoginUser getUser() {
return user;
}
public void setUser(LoginUser user) {
this.user = user;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
@Override
public String execute() throws Exception {
this.tip = "登录验证成功!";
return SUCCESS;
}
}
LoginUserAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="user.userId">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>必须输入用户名</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>必须输入密码</message>
</field-validator>
</field>
</validators>
实体类:LoginUser
package com.gifer.model;
import java.sql.Timestamp;
public class LoginUser implements java.io.Serializable {
// Fields
/**
*
*/
private static final long serialVersionUID = 5822711476237052251L;
private String userId;
private String userName;
private String password;
private String sex;
private Timestamp birth;
private String url;
private String remark;
private Timestamp registerTime;
private Timestamp lastLoginTime;
private Long status;
// Constructors
/** default constructor */
public LoginUser() {
}
/** minimal constructor */
public LoginUser(String userName, String password) {
this.userName = userName;
this.password = password;
}
/** full constructor */
public LoginUser(String userName, String password, String sex,
Timestamp birth, String url, String remark, Timestamp registerTime,
Timestamp lastLoginTime, Long status) {
this.userName = userName;
this.password = password;
this.sex = sex;
this.birth = birth;
this.url = url;
this.remark = remark;
this.registerTime = registerTime;
this.lastLoginTime = lastLoginTime;
this.status = status;
}
// Property accessors
public String getUserId() {
return this.userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Timestamp getBirth() {
return this.birth;
}
public void setBirth(Timestamp birth) {
this.birth = birth;
}
public String getUrl() {
return this.url;
}
public void setUrl(String url) {
this.url = url;
}
public String getRemark() {
return this.remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Timestamp getRegisterTime() {
return this.registerTime;
}
public void setRegisterTime(Timestamp registerTime) {
this.registerTime = registerTime;
}
public Timestamp getLastLoginTime() {
return this.lastLoginTime;
}
public void setLastLoginTime(Timestamp lastLoginTime) {
this.lastLoginTime = lastLoginTime;
}
public Long getStatus() {
return this.status;
}
public void setStatus(Long status) {
this.status = status;
}
}
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="com.gifer.action" extends="json-default">
<action name="login" class="com.gifer.action.LoginUserAction">
<result name="input">/login.jsp</result>
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
在学习的过程有几点值得注意:
1、action的result必须包含input的返回,最开始我用的是login,结果每次都报错。验证失败后,拦截器默认是向input结果跳转。
2、验证配置xml文件的格式是这样的:xxx-validation.xml 其中"xxx"代表action的类名,这里我的action是:LoginUserAction,
所以验证配置应用文件名是:LoginUserAction-validation.xml
3、文件LoginUserAction-validation.xml中 <field name="user.password">的name属性应与表单中的field的name属性相呼应,表示这个验证提示信息显示的位置。