終於要開始研究框架了,沒有大神的指導,只能自己上網摸索着來,沒有唯一對的方案,只能找到最適合自己的就可以了。
首先整理一下,代碼是參考別人的代碼,按照別人的版本有問題,大概整理了一下,自己重新弄了一個,注意下標紅的部分,每個人碰到的問題可能不一樣,這次的環境(基本都是當前最新的,64位,如果有需要的可以留言):
Eclispe:eclipse-jee-mars-R-win32-x86_64 (J2EE)
Tomcat:apache-tomcat-8.0.24-windows-x64
Structs:struts-2.3.24-apps.zip (因為里面會有空的blank例子,包肯定是正確的)
完成的功能:映射顯示jsp頁面,validation驗證。
1.首先要確保自己的JDK、和Tomcat配置正確,這里就不一一敘述了。
2.Eclipse里面File-> New-> Dynamic Web Progect (基本都選擇默認的就可以了),本例子的名字為SSHProject (之后會繼續整合Spring和Hibernate)
3.拷貝相應的包
3.1解壓打開struts-2.3.24-apps.zip 里面app下面的 struts2-blank.war (打開war的方法,可以再相同工作目錄下,建立一個rar,雙擊rar,然后如圖示點擊向上,就可以顯示war,雙擊解壓即可)
3.2 把blank中 WEB-INF中lib下面的包 都拷貝到 新建工程的 WEB-INF的lib中(不要多拷貝,也不要少拷貝)
3.3 打開blank.app.WEB-INF 下面的web.xml 將其中的Filter部分拷貝到工程對應的web.xml中
4.建立工程代碼
4.1 struts.xml
(注意拼寫和大小寫,要在Java Resources下的 src下面 )
寫出具體jsp的映射(先看代碼,讀完后面的可以再返回來理解)
<?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> <include file="struts-default.xml" /> <package name="tiny" extends="struts-default"> <action name="register" class="com.tiny.ssh.action.RegisterAction"> <result name="input">/Register.jsp</result> <result name="success">/success.jsp</result> <result name="error">/fail.jsp</result> </action> </package> </struts>
4.2 其他包的相應的代碼:
RegisterAction.java:
package com.tiny.ssh.action; import com.opensymphony.xwork2.ActionSupport; import com.tiny.ssh.beans.UserForm; import com.tiny.ssh.service.UserManager; import com.tiny.ssh.serviceImp.UserManagerImpl; public class RegisterAction extends ActionSupport { private static final long serialVersionUID = 1L; private UserForm user; private UserManager userManager; public UserForm getUser() { return user; } public void setUser(UserForm user) { this.user = user; } public UserManager getUserManager() { return userManager; } public void setUserManager(UserManager userManager) { this.userManager = userManager; } public String execute() { try { this.setUserManager(new UserManagerImpl()); userManager.regUser(user); return SUCCESS; } catch (Exception e) { e.printStackTrace(); return ERROR; } } }
RegisterAction-validation.xml(上一個的驗證,固定名字 [Action-Name]-validation,注意上面的頭部代碼,會因為版本的問題出現錯誤,選擇其中好使的一個):
以前param的name都為expression struts2 2.3.x這個版本不好使了 要改為regex 可以自行查閱文檔。
<?xml version="1.0" encoding="GBK"?> <!-- 版本不一致 選擇下面兩個的一個 --> <!-- <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> --> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <validators> <!-- 添加對用戶名的校驗 --> <field name="user.username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>用戶名不能為空</message> </field-validator> <field-validator type="regex"> <param name="regex"><![CDATA[(\w{6,16})]]></param> <message>用戶名輸入不合法,必須為長度在6~16中間的數字或字母</message> </field-validator> </field> <!-- 添加對密碼的校驗 --> <field name="user.password"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>密碼不能為空</message> </field-validator> <field-validator type="regex"> <param name="regex"><![CDATA[(\w{6,16})]]></param> <message>密碼輸入不合法,必須為長度在6~16之間的數字或者字母</message> </field-validator> </field> </validators>
UserForm.java:
package com.tiny.ssh.beans; public class UserForm { private String username; private String password; private int gender; 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 int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } }
UserManager.java:
package com.tiny.ssh.service; import com.tiny.ssh.beans.UserForm; public interface UserManager { public void regUser(UserForm user); }
UserManagerImpl.java:
package com.tiny.ssh.serviceImp; import com.tiny.ssh.beans.UserForm; import com.tiny.ssh.service.UserManager; public class UserManagerImpl implements UserManager { @Override public void regUser(UserForm user) { } }
Register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>User Register Page</title> </head> <body> <s:form action="register"> <s:textfield name="user.username" label="用戶名"></s:textfield> <s:password name="user.password" label="密碼"></s:password> <s:select list="#{'1':'男','0':'女'}" listKey="key" listValue="value" name="user.gender" label="性別" value="1"></s:select> <s:submit value="注冊"></s:submit> </s:form> </body> </html>
success.jsp 只是顯示了Success一句話。
最終的層次圖如下:
5.建立新的Tomcat服務器,網址輸入http://localhost:8080/SSHProject即可
(別忘了改在web.xml的歡迎界面,本例子改為Register.jsp)
結果圖:
6.總結
Struts是當今Java比較流行的三大框架之一,三大框架是Struts,spring,hibernate。
Struts框架包括Struts1和Struts2,由於兩個版本相差比較大,Struts1已經被淘汰,現在企業基本上全部都用Struts2,本例子使用的就是Struts2。
該框架的作用,可以理解為將用戶和訪問的JSP解耦,交給Action來做,struts.xml中配置相應的映射關系,通過映射找到對應的jsp頁面。
下面的圖利於理解:
希望讀者好好體會,以便於應用。
參考鏈接:
http://blog.csdn.net/yeohcooller/article/details/9316923
http://bbs.csdn.net/topics/390755826
http://blog.163.com/sean_zwx/blog/static/169032755201091595558378/
