1,創建web工程 java EE5,在lib中導入struts2的各個包(參見前面的“sturts2配置”)形成的具體工程結構圖如下:

2,創建用戶注冊模塊的視圖界面register.jsp registerSuccess.jsp
register.jsp的代碼如下:
View Code
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="struts" %> <% 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>My JSP 'register.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <struts:text name="register.jsp.label.heading"/> <struts:fielderror/> <hr/> <center> <struts:form action="register" method="post"> <struts:textfield name="userName" key="register.jsp.label.username"></struts:textfield> <struts:password name="psw1" key="register.jsp.label.psw1"></struts:password> <struts:password name="psw2" key="register.jsp.label.psw2"></struts:password> <struts:textfield name="telNum" key="register.jsp.label.age"></struts:textfield> <struts:textfield name="email" key="register.jsp.label.telnum"></struts:textfield> <struts:submit key="register.jsp.button.submit"></struts:submit> </struts:form> </center> </body> </html>
registerSuccess.jsp的代碼如下:
View Code
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="struts" %> <% 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>My JSP 'registerSuccess.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <center><struts:text name="registerSuccess.jsp.heading"></struts:text></center> <hr/> <struts:text name="registerSuccess.jsp.label.welcome"/> <struts:property value="userName"/> <struts:fielderror/> </body> </html>
3,在src下創建資源信息文件Application.properties 並創建struts.properties配置文件
Application.properties的內容如下:
View Code
register.jsp.label.title=Register Page register.jsp.label.heading=<center><h2>User Register</h2></center> register.jsp.label.username=User Name* register.jsp.label.psw1=Password* register.jsp.label.psw2=Validation Password* register.jsp.label.age=Age register.jsp.label.email=E_Mail* register.jsp.label.telnum=Telephone Number register.jsp.button.submit=Submit register.jsp.button.reset=Reset registerSuccess.jsp.title=Welcome Page registerSuccess.jsp.heading=<center><h2>Welcome to Our System</h2></center> registerSuccess.jsp.label.welcome=Welcome username.required=Please input your user name. username.maxlength=The length of your user name shouldn't exceed 20 characters. psw.required=Please input your password. psw.maxlength=The length of your password shouldn't exceed 20 characters. errors.validwhen=password isn't equal to validation password. sex.required=Please input your sex. age.error=Your age must be in this interval(0,200). tel.error=Please input correct telephone number(7-15 figures). email.required=Please input your E_Mail. email.error=E_Mail illegal. username.exist=This user name exists.
讓struts2框架識別資源配置文件的代碼為“struts.custom.i18n.resources=Application", struts.properties的代碼如下:
View Code
struts.action.extension=action
struts.custom.i18n.resources=Application
struts.locale=en_GB
4,創建Action:action.RegisterAction.java, 代碼如下:
View Code
在RegisterAction類所在路徑下創建名為RegisterAction-validation.xml的配置文件,該配置文件的命名規則是:<ActionClassName>-validation.xml,該文件的存放路徑要和RegisterAction類在同一路徑下,即放在action包中,,具體代碼如下:
View Code
<?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="userName"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>${getText("username.required")}</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">0</param> <param name="maxLength">20</param> <message>${getText("username.maxlength")}</message> </field-validator> </field> <!-- 檢查密碼是否為空,輸入的兩個密碼是否一致 --> <field name="psw1"> <field-validator type="requiredstring"> <message>${getText("psw.required")}</message> </field-validator> <field-validator type="fieldexpression"> <param name="expression"><![CDATA[(psw2==psw1)and(psw1!=null)]]></param> <message>${getText("errors.validwhen")}</message> </field-validator> </field> <!-- 檢查年齡,年齡在0-200之間 --> <field name="age"> <field-validator type="int"> <param name="min">0</param> <param name="max">200</param> <message>${getText("age.error")}</message> </field-validator> </field> <!-- 檢查電話號碼,判斷是否為0-9之間的7-15位數字 --> <field name="telNum"> <field-validator type="regex"> <param name="expression"><![CDATA[[0-9]{7,15}$]]></param> <message>${getText("tel.error")}</message> </field-validator> </field> <!-- 檢查電子郵箱是否合法 --> <field name="email"> <field-validator type="requiredstring"> <message>${getText("email.required")}</message> </field-validator> <field-validator type="email"> <message>${getText("email.error")}</message> </field-validator> </field> </validators>
然后將Struts2的JAR包中的xwork-validation-1.0.2.dtd文件放到和數據校驗配置文件同路徑下,即放到包action中。
5,為解決中文亂碼問題,創建過濾器filter.CharacterEncodingFilter.java
View Code
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharacterEncodingFilter implements Filter {
private String characterEncoding;//編碼方式在web.xml中
private boolean enabled;//是否啟動filter,初始值在web.xml中
@Override
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
//初始化時加載參數
//從配置文件中讀取設置到編碼方式
characterEncoding=config.getInitParameter("characterEncoding");
//啟動該過濾器完成編碼方式到修改
enabled="true".equalsIgnoreCase(characterEncoding.trim())
||"1".equalsIgnoreCase(characterEncoding.trim());
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
if(enabled||characterEncoding!=null){
request.setCharacterEncoding(characterEncoding);//設置request編碼方式
response.setCharacterEncoding(characterEncoding);//設置response編碼方式
}
chain.doFilter(request, response);//doFilter將修改好的request和response參數向下傳遞;
}
@Override
public void destroy() {
// TODO Auto-generated method stub
characterEncoding=null;
}
}
6, 配置web.xml
View Code
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>register.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> <init-param> <param-name>struts.action.extension</param-name> <param-value>action</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>characterEncoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>enable</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
7,配置struts.xml (注意配置input)
View Code
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="main" extends="struts-default"> <action name="register" class="action.RegisterAction"> <result name="input">/register.jsp</result> <result>/registerSuccess.jsp</result> </action></package> </struts> <!-- 這里 struts中必須配置input返回視圖,否則會報錯, 官方的解釋是:if you don't have this,you'll get a:"No result defined for action xxx.xxx.xxx and result input"error -->
8,發布即可。。。
參考資料:
(1)Struts2中的校驗框架 :http://blog.csdn.net/jadyer/article/details/6176122
(2)
