說明:此教程是oksonic視頻教程的修改,我移植到eclipse3.2+myEclipse5.0環境下。原來放在我在和訊的博客上,寫的比較早,完成于去年下半學期,當時還在學校,現在出來打工了,今年7月畢業。感覺在CSDN的高手多,所以轉移至此。
功能:集合了SSH框架,完成簡單的登陸功能
工具:
eclipse-SDK-3.2.1、MyEclipse_5.0.1GA_E3.2、Tomcat_5.5.15、mysql-5.0.18
相關資料下載
原來的資料都是放在gbaopan下,現在gbaopan關了,沒有地方放了,只能放在郵箱里,在發件箱里的附件中
視頻教程下載郵件主題: struts+hibernate+spring視頻.part1
struts+hibernate+spring視頻.part2
工程下載郵件主題: struts+hibernate+spring_src.part1
struts+hibernate+spring_src.part1
說明文件郵件主題: struts+hibernate+spring_說明
properties2GBK.bat struts+hibernate+spring_說明
開始。。新建工程:名稱為 login
創建Struts框架
創建 index.jsp,增加一鏈接指向 login.jsp
<html>
<head>
<title>Struts+Spring+Hibernate</title>
</head>
<body>
<a href="login.jsp">Login</a>
</body>
</html>
按下Ctrl + N,創建 login.jsp、LoginAction,使用MyEclipse的向導就可以了,記得選對正確的版本
在ActionForm配置頁中選擇類型為動態Form,并繼承于DynaValidatorForm,新增兩個屬性:username、password,
在創建jsp文件打上鉤,將路徑改為/login.jsp,然后下一步,改LoginAction的Input source改為/login.jsp,點擊完成
按下Ctrl + N 創建一個forwards,記得選對正確的版本
name 輸入 indexGo
路徑選擇 /index.jsp
配置validator
先添加Struts插件,使用向導
Plugin class : org.apache.struts.validator.ValidatorPlugIn
Property : pathnames
Value : /WEB-INF/validator-rules.xml,/WEB-INF/validation.xml
這里需要兩個xml文件
現在創建“validation.xml” 文件
文件內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD
Commons Validator Rules Configuration 1.1.3//EN"
"validator_1_1_3.dtd" >
<form-validation>
<formset>
<form name="loginForm">
<field property="username"
depends="required">
<arg0 key="prompt.username" />
</field>
<field property="password"
depends="required">
<arg0 key="prompt.password" />
</field>
</form>
</formset>
</form-validation>
編輯資源文件“ApplicationResources.properties”
增加以下內容
prompt.username=User Name
prompt.password=User Password
errors.required={0} is required.
再創建中文件資源文件“ApplicationResources_zh_CN.properties”
增加以下內容
prompt.username=用戶名稱
prompt.password=登錄密碼
errors.required={0} 必需填寫!
我這沒有用Properties Editor插件,所以在tomcat發布后會顯示亂碼,我們可以用native2ascii來解決
我建了個批處理文件properties2GBK.bat
native2ascii -encoding gbk ApplicationResources_zh_CN.properties
temp.properties
del ApplicationResources_zh_CN.properties
rename temp.properties ApplicationResources_zh_CN.properties
放在你的classpath下,或者拷到你要轉GBK的地方,雙擊一下就可以了
我剛開始在eclipse編輯中文properties文件,保存后再打開,也會出現亂碼,只要在eclipse上設置一下就可以了
具體設置:Eclipse-->Preferences...-->在“type filter text“欄中輸入”Content Types“查找,
然后在選擇右邊的Text下邊相應的文件后綴名,即properties.修改其編碼就可。可以修改成GBK
我這已經改好了,直接打開就是漢語了。。。
建議下載 properties Editor插件,我這上不了外國網站,沒有辦法。。。。有空再下吧。。
修改struts-config.xml文件
在以下位置增加validate="true"
<action-mappings >
<action
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
validate="true"
type="com.test.struts.action.LoginAction" />
</action-mappings>
這里說明提交的數據必需經過驗證,而驗證則是通過validator框架進行的。
修改web.xml文件
增加
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
顯示主頁
修改LoginAction.java文件的execute方法,內容如下
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
DynaValidatorForm loginForm = (DynaValidatorForm) form;
String username=loginForm.getString("username");
String password=loginForm.getString("password");
if(username.equals("test")||password.equals("test")){
return mapping.findForward("indexGo");
}else{
return mapping.getInputForward();
}
}
現在再修改一下login.jsp
增加以下部份
<%@ page language="java" contentType="text/html;
charset=UTF-8" %>
其中charset=UTF-8 是使用UTF-8的字符編碼,這也是為了支持國際化而使用的。要不然中文還是會顯示亂碼
關于亂碼解決,網上查資料,一查就有一堆
我們現在還沒有傳遞中文參數,要不然還得加個過濾器。。
好了,現在可以啟動Tomcat進行測試了
http://localhost:8080/login/
如果不輸入任何數據而直接提交表單的話就可以看到效果了。
好了,如果沒有什么問題的話就繼續往下看吧,如果有問題的話就得往上看了^_^
出現了亂碼,我們用native2ascii來解決,非得我重啟一下!> ok了
現在創建Spring框架了,在這里我將Spring所有的包全部加載進去,因為我還不知道具體用到哪些類,全部加進去方便點
單選框選第二個,這樣的話所有的類庫和標簽等都將拷貝到項目中去,這樣方便以后的布署
下一步后是創建配置文件,將文件放到“WebRoot/WEB-INF”目錄下,文件名稱為“applicationContext.xml”
配置struts-config.xml文件,添加(spring)的插件
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
</plug-in>
修改LoginAction配置
原:
<action
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
validate="true"
type="com.test.struts.action.LoginAction" />
</action-mappings>
改為:
<action
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
validate="true"
type="org.springframework.web.struts.DelegatingActionProxy" />
</action-mappings>
這里將使用spring的代理器來對Action進行控制
當提交到/login.do是將控制權交給了spring,然后由spring來決定是否轉回到struts的Action
現在來配置spring
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
<beans>
<bean name="/login"
class="com.test.struts.action.LoginAction"
singleton="false"></bean>
</beans>
屬性singleton="false",指明了Action 的實例獲取方式為每次重新創建。解決了Struts中令人詬病的線程安全問題(Struts中,由一個Action實例處理所有的請求,這就導致了類公用資源在并發請求中的線程同步問題。)(摘自spring開發指南)
測試一下,如果沒有什么問題的話就繼續往下看吧,如果有問題的話就得往上看了^_^
好的,struts spring倆人成為朋友了,友好的集成到了一起。。。
建立數據庫在 這里我使用的是mysql-5.0.18
配置好mySql連接......
不好意思,這里我忘記驅動怎么寫了。。。
CREATE TABLE `user` (
`ID` int(11) NOT NULL auto_increment,
`USERNAME` varchar(50) NOT NULL default '',
`PASSWORD` varchar(50) NOT NULL default '',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
添加記錄 insert into user (USERNAME,PASSWORD) values
('test','test')
創建Hibernate框架
新建包com.test.hibernate
com.test.beans
選hibernate3.1 libraries全選,我也不知道那個具體有什么用^_^,可能只選第一個也行,但考慮還要用DAO,第三個也選上了,
看第二是高級支持,也加上了,沒試里面的作用,大家有空可以試一下。。
第二步選 spring configuration file 我們直接在Spring配置hibernate的連接。。就不用創建hibernate.cfg.xml了
第三步選existing Spring configuration file我們剛才已經創建了一個。。
SessionFactory ID就直接填sessionFactory
第四步 Bean Id填 dataSource 我們用JDBC Driver,DB Profile選剛才配置好的
使用MyEclipse的數據Database Explorer工具創建User.hmb.xml、AbstractUser.java、User.java,UserDAO文件
這里選項比較多,大家看視頻。。我就不一一說明了。。。不懂的看書^_^
打開User.hbm.xml配置文件,把 catalog="meilvin" 這一項刪除了,要不后果很嚴重。因為mySql在連接的時候要寫上數據庫
如果我們在這里也寫上數據庫的名字的話就會重復了,就變成了meilvin.meilvin.user,顯然是錯的。后面就會報錯,我深有體會。
修改UserDAO,增加如下方法
public boolean isValidUser(String username, String password) {
String hql = "from User u where u.username=? and
u.password=?";
String []userInfo=new String[2];
userInfo[0]=username;
userInfo[1]=password;
List userList = this.getHibernateTemplate().find(hql, userInfo);
if (userList.size() > 0) {
return true;
}
return false;
}
修改LoginAction.java文件,使用userDao的方法來進行用戶驗證
package com.test.struts.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.validator.DynaValidatorForm;
import com.test.UserDAO;
public
class LoginAction extends Action {
private
UserDAO userDAO;
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaValidatorForm loginForm = (DynaValidatorForm) form;
// TODO Auto-generated method stub
String username = (String) loginForm.get("username");
String password = (String) loginForm.get("password");
loginForm.set("password", null);
if (userDAO.isValidUser(username,password)) {
return mapping.findForward("indexGo");
} else {
return mapping.getInputForward();
}
}
}
現在剩下最后的spring配置了
把原來的
<bean name="/login"
class="com.test.struts.action.LoginAction"
singleton="false"></bean>
刪除了
在最底下增加
<bean name="/login"
class="com.test.struts.action.LoginAction"
singleton="false">
<property name="userDAO">
<ref bean="UserDAO" />
</property>
</bean>
利用反轉控制產生action
現在可以進行測試了,可以登陸了^-^
老是說log4j沒有配置,下次視頻配置一下。。。成功了。。
注冊新用戶,用戶瀏覽、刪除用戶
打開
UserDAO.java 文件,增加以下方法:
public boolean addUser(User user) {
try {
//調用前面save方法
save(user);
} catch (Exception e) {
System.out.println(e.getMessage());
return false;
}
return true;
}
按下 Ctrl + N ,使用向導創建 adduser.jsp 、AdduserForm(DynaValidatorForm)、AdduserAction.java文件,這是注冊新用戶的Action
我用的是maxthon瀏覽器,如果是add.jsp,它會當做廣告攔下來,,,,多加個user...
修改配置內容如下:
<action
attribute="adduserForm"
input="/adduser.jsp"
name="adduserForm"
path="/adduser"
validate="true"
type="org.springframework.web.struts.DelegatingActionProxy" />
第一句實現了必須對提交的數據進行驗證
第二句實現了和spring集成
修改
AdduserAction.java 文件,內容如下:
private
UserDAO userDAO;
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public
ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
DynaValidatorForm adduserForm = (DynaValidatorForm) form;
User user = new User();
user.setUsername(adduserForm.getString("username"));
user.setPassword(adduserForm.getString("password"));
adduserForm.set("password", null);
if (userDAO.addUser(user)) {
return mapping.findForward("indexGo");
} else {
return mapping.getInputForward();
}
}
關于在Action中使用 User 對像,我在這里沒有使用 IoC 方式進行管理,這不好,希望大家在正式應用中使用。
在spring配置文件(applicationContext.xml)中加入以下內容:
<bean name="/adduser"
class="com.test.struts.action.AdduserAction"
singleton="false">
<property name="userDAO">
<ref bean="UserDAO" />
</property>
</bean>
修改
index.jsp 文件
<html>
<head>
<title>Struts+Spring+Hibernate</title>
</head>
<body>
<a href="login.jsp">Login</a>
<br>
<a href="add.jsp">Add User</a>
</body>
</html>
修改
adduser.jsp 文件的首行,替換為以下內容,目的是為了使用UTF-8的編碼格式顯示頁面
<%@ page language="java" contentType="text/html;
charset=UTF-8" %>
修改
validation.xml 文件,加入以下內容:
<form name="adduserForm">
<field property="username"
depends="required">
<arg0 key="prompt.username" />
</field>
<field property="password"
depends="required">
<arg0 key="prompt.password" />
</field>
</form>
現在整個 AddUser 已經完成,如果你覺得不放心的話可以在這里停一停先進行這一段的測試!
創建一個Action用于查詢數據,名稱為 find
創建
display.jsp 文件,用于顯示所有用戶
創建一個 forward displayGO 指向 display.jsp 選中 redirect
修改
UserDAO.java 文件,增加 findAllUser() 方法,代碼如下:
public List findAllUser() {
List users=this.getHibernateTemplate().find("from User u");
if(users.size()>0)
return users;
return null;
}
修改
struts-config.xml 文件
<action path="/find"
type="org.springframework.web.struts.DelegatingActionProxy" />
修改
FindAction.java 文件,內容如下:
private UserDAO userDAO;
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public
ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
List users=userDAO.findAllUser();
if(users!=null){
HttpSession session=request.getSession();
session.setAttribute("users",users);
return mapping.findForward("displayGo");
}
return mapping.getInputForward();
}
在spring配置文件(applicationContext.xml)中加入以下內容:
<bean name="/find"
class="com.test.struts.action.FindAction"
singleton="false">
<property name="userDAO">
<ref bean="UserDAO" />
</property>
</bean>
修改
display.jsp 文件,內容如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="
<%@ taglib uri="
<%@ taglib uri="
<html>
<head>
<title>DISPLAY</title>
</head>
<body>
<logic:present name="users">
<form action="del.do">
<table border="1">
<logic:iterate id="element"
name="users">
<tr><td width="100">
<input type="radio" name="select"
value="<bean:write name="element"
property="id"/>">
<bean:write name="element" property="username"/>
</td></tr>
</logic:iterate>
</table>
<INPUT type="submit" name="Submit"
value="submit">
</form>
</logic:present>
</body>
</html>
現在整個 Display 已經完成,如果你覺得不放心的話可以在這里停一停先進行這一段的測試!
新建一個 Action 用于刪除選中的用戶,name:del
修改
struts-config.xml 文件中的以下內容為:
<action path="/del"
type="org.springframework.web.struts.DelegatingActionProxy" />
修改
UserDAO.java 文件,增加以下方法
public boolean delUser(Integer lid) {
try {
User user=(User)findById(lid);
this.getHibernateTemplate().delete(user);
} catch (Exception e) {
System.out.println(e.getMessage());
return false;
}
return true;
}
修改
DelAction.java 文件,內容如下:
public class DelAction extends Action {
private
UserDAO userDAO;
public
UserDAO getUserDAO() {
return userDAO;
}
public
void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public
ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
Integer selid=Integer.valueOf(request.getParameter("select"));
if(userDAO.delUser(selid))
return mapping.findForward("indexGo");
return mapping.getInputForward();
}
}
Ctrl+Shift+o導入包
在spring配置文件(applicationContext.xml)中加入以下內容:
<bean name="/del"
class="com.test.struts.action.DelAction" singleton="false">
<property name="userDAO">
<ref bean="UserDAO" />
</property>
</bean>
修改
index.jsp 文件
<html>
<head>
<title>Struts+Spring+Hibernate</title>
</head>
<body>
<a href="login.jsp">Login</a>
<br>
<a href="add.jsp">Add User</a>
<br>
<a href="find.do">Display</a>
</body>
</html>
代碼已經全部完成,可以進行測試了!!!
如果測試不成功,請往回查看。。。。完了!!!
失誤失誤,大小寫不注意,就是這種后果,大家以后要注意點哦
好了,成功了,祝大家都成功!
拜拜!
posted on 2007-12-18 11:43
xyz 閱讀(1133)
評論(0) 編輯 收藏 所屬分類:
他山之石