SSH框架的简单搭建步骤
l MyEclipse6.5
l Tomcat5.5.26
l MySQL5.0
l?數(shù)據(jù)庫(kù)腳本程序
CREATE TABLE user (
?????? id int(11) NOT NULL auto_increment,
?????? username varchar(50) default NULL,
?????? password varchar(50) default NULL,
?????? PRIMARY KEY (id)
);
INSERT INTO user VALUES ('1', 'admin', 'admin');
環(huán)境的搭建這里就不寫了,估計(jì)大家應(yīng)該很熟悉,不會(huì)的可以上網(wǎng)看一下,有很多這樣的資料。
3.Go!讓我們開始創(chuàng)建工程
打開MyEclipse,需要注意的是這里應(yīng)該處于MyEclipse?Java?Enterprise視圖;新建一個(gè)Web Project,輸入適當(dāng)?shù)墓こ堂?#xff0c;這里我們輸入ssh,Finish即可。
確定之后MyEclipse會(huì)生成名為SSH的項(xiàng)目,其中生成的目錄結(jié)構(gòu)如下所示:
4.添加Struts1.2框架支持
在ssh工程上面右擊,在彈出的菜單中選擇MyEclipse -> Add Struts Capabilities…,添加Struts的支持。
在彈出的對(duì)話框中選擇Struts 1.2,修改Base package for new classes成所需的包名,其余保持原狀,Finish即可
完成后的結(jié)構(gòu)為:
5.添加Spring2.0框架支持
在ssh工程上面右擊,在彈出的菜單中選擇MyEclipse -> Add?spring?Capabilities…,添加Spring框架支持
由于Spring采取最小化庫(kù)發(fā)布的方式,使得Spring的庫(kù)文件彼此都是分離的,因而我們需要自己選擇需要的庫(kù),需要引用的如下圖:
選擇好后Next,在窗口中選擇Browse,選擇ssh工程下面的WEB-INF文件夾,然后Finsh。
6.配置數(shù)據(jù)源
在MyEclipse右上角選擇MyEclipse Database Explorer,打開數(shù)據(jù)庫(kù)管理視圖。
在左側(cè)的DB Browser點(diǎn)擊右鍵,選擇New…,打開Database Driver對(duì)話框。
在Database Driver對(duì)話框中按照如下配置選擇數(shù)據(jù)庫(kù)驅(qū)動(dòng)。首先選擇Driver Template,在這里我們選擇MySQL。Driver Name是以后配置時(shí)使用的驅(qū)動(dòng)名字,用以區(qū)分驅(qū)動(dòng),這里使用MySQL即可。然后根據(jù)實(shí)際情況填寫URL,User name和Password。點(diǎn)擊Add JARs添加數(shù)據(jù)庫(kù)驅(qū)動(dòng)文件。為方便配置,可以選擇Save password保存密碼。配置完畢后Finish即可。
7.Spring與hibernate的整合
當(dāng)配置完數(shù)據(jù)源后,就可以添加Hibernate支持了。切換到MyEclipse?Java?Enterprise視圖,在ssh工程上面右擊,在彈出的菜單中選擇MyEclipse -> Add Hibernate Capabilities…,添加Hibernate的支持。
我們選擇Hibernate3.2,全部按照默認(rèn)設(shè)置即可,然后點(diǎn)擊Next;
在對(duì)話框中選擇Spring configuration file,表示我們希望將Hibernate托管給Spring進(jìn)行管理,這是將Hibernate與Spring進(jìn)行整合的基礎(chǔ)。然后點(diǎn)擊Next;
在出現(xiàn)的對(duì)話框中選擇Existing Spring configuration file。因?yàn)槲覀円呀?jīng)添加了Spring的配置文件,所以這里選擇的是已存在的配置文件。MyEclipse會(huì)自動(dòng)找到存在的那個(gè)文件。然后在SessionFactory ID中輸入Hibernate的SessionFactory在Spring配置文件中的Bean ID的名字,這里我們輸入sessionFactory即可。然后點(diǎn)擊Next;
在出現(xiàn)的對(duì)話框中的Bean Id里面輸入數(shù)據(jù)源在Spring中的Bean ID的名字,這里我們輸入dataSource。然后在DB Driver里面選擇我們剛剛配置好的ssh,MyEclipse會(huì)將其余的信息自動(dòng)填寫到表格里面。然后點(diǎn)擊Next;
在出現(xiàn)的對(duì)話框中取消Create SessionFactory class。點(diǎn)擊Finish即可。
此時(shí)MyEclipse會(huì)自動(dòng)打開Spring的配置文件,文件內(nèi)容為:
此時(shí),切換到MyEclipse DataBase Explorer視圖,右鍵打開數(shù)據(jù)庫(kù)連接,在需要使用的數(shù)據(jù)表格上面點(diǎn)擊右鍵,選擇Hibernate Reverse Engineering...。這里我們使用剛剛建立在test數(shù)據(jù)庫(kù)中添加的user表。
??
在打開的對(duì)話框中修改Java src folder為我們建立的/ssh/src,這里需要選擇到src文件夾,并且需要填寫Java package,這是MyEclipse生成的類所在的包,我們將其取名為user。然后選擇Java Data Object,建立POJO類。然后選擇Java Data Access Object。其中,POJO類是數(shù)據(jù)庫(kù)表格所對(duì)應(yīng)的Java類,JDO類是MyEclipse自動(dòng)生成的對(duì)數(shù)據(jù)庫(kù)的一些操作。這里會(huì)封裝一些常用的操作,簡(jiǎn)化我們的編寫。填寫完成后點(diǎn)擊Next。
在出現(xiàn)的對(duì)話框中選擇ID Generator為native,然后點(diǎn)擊Finish即可。
此時(shí)ssh項(xiàng)目的目錄結(jié)構(gòu)如下所示。其中的User.Java是MyEclipse生成的使用面向?qū)ο蟮腏ava語言對(duì)數(shù)據(jù)庫(kù)表格進(jìn)行的抽象,User.hbm.xml是將數(shù)據(jù)庫(kù)表格中的字段和POJO類的屬性進(jìn)行映射的定義,UserDAO.java封裝了一些MyEclipse自動(dòng)生成的對(duì)數(shù)據(jù)庫(kù)的操作。
這時(shí)我們修改一下文件目錄,使之更好的組織。我們建立一個(gè)dao包,將DAO類與POJO類分開。然后我們?cè)趕truts包下面建立action和form包,用來管理Struts的Action和Form。為了將實(shí)現(xiàn)與接口進(jìn)行解耦,我們建議在dao包下面添加接口,然后建立dao.impl包,將實(shí)際的DAO類放在這里。DAO類是直接與數(shù)據(jù)庫(kù)打交道的類,為了對(duì)業(yè)務(wù)邏輯進(jìn)行封裝,我們將業(yè)務(wù)全部寫在service類里面,和dao一樣,我們先建立service包,里面添加業(yè)務(wù)接口,具體的實(shí)現(xiàn)放在service.impl里面。
將UserDAO.java移動(dòng)到dao的impl包下面,并在dao包下建立接口IUserDAO,內(nèi)容為:
?
| package com.ssh.dao; import java.util.List; import com.ssh.user.User; public interface IUserDAO { ??? public User findById(Integer id); ??? public List findByUsername(Object username); ??? public void save(User user); } |
在service中建立接口IUserService.java,在service中impl中建立UserService.java
?
| IUserService.java package com.ssh.service; import com.ssh.user.User; public interface IUserService { ?????? public User getUserById(Integer id); ?????? public User getUserByUsername(String username); ?????? public void addUser(User user); } |
??
?
| UserService.java package com.ssh.service.impl; import java.util.List; import com.ssh.dao.IUserDAO; import com.ssh.service.IUserService; import com.ssh.user.User; public class UserService implements IUserService { ??? private IUserDAO userDAO; ??? public void addUser(User user) { ?????? userDAO.save(user); ??? } ??? public User getUserById(Integer id) { ?????? return userDAO.findById(id); ??? } ??? public User getUserByUsername(String username) { ?????? List list = userDAO.findByUsername(username); ?????? if (list.size() == 0) { ?????????? return null; ?????? } else { ?????????? return (User) list.get(0); ?????? } ??? } ??? public IUserDAO getUserDAO() { ?????? return userDAO; ??? } ??? public void setUserDAO(IUserDAO userDAO) { ?????? this.userDAO = userDAO; ??? } } |
??
此時(shí)的整體工程結(jié)構(gòu)為:
此時(shí)的applicationContext內(nèi)容需要配置bean內(nèi)容為:
?
| <bean id="UserDAO" class="com.ssh.dao.impl.UserDAO"> ??? <property name="sessionFactory"> ?????? <ref bean="sessionFactory" /> ??? </property> </bean> |
8.整合Struts和Spring
Struts和Spring整合方式其核心是讓Struts能夠訪問到交給Spring進(jìn)行托管的類,這個(gè)我在網(wǎng)上看到了一個(gè)方式,自我認(rèn)為很好,因此只要我們可以讓Struts從Spring獲得需要的類就可以了。 為了達(dá)到這個(gè)目標(biāo),我們創(chuàng)建一個(gè)類BaseAction:
?
| package com.ssh.struts.action; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import org.springframework.web.struts.ActionSupport; public class BaseAction extends ActionSupport { ???????? protected Object getBean(String id) { ?????????????????? WebApplicationContext ctx = WebApplicationContextUtils ???????????????????????????????????? .getWebApplicationContext(this.servlet.getServletContext()); ?????????????????? return ctx.getBean(id); ???????? } } |
為了讓W(xué)eb容器能夠初始化Spring,我們需要修改web.xml文件,增加以下內(nèi)容:
?
| <context-param> ?????????????????? <param-name>contextConfigLocation</param-name> ?????????????????? <param-value>/WEB-INF/applicationContext.xml</param-value> ???????? </context-param> ???????? <servlet> ?????????????????? <servlet-name>SpringContextServlet</servlet-name> ?????????????????? <servlet-class> ??????????????????????????? org.springframework.web.context.ContextLoaderServlet ?????????????????? </servlet-class> ?????????????????? <load-on-startup>1</load-on-startup> ???????? </servlet> |
9.啊,讓看看我們工作是否有效
通過上面的配置,我們已經(jīng)能夠讓這三個(gè)框架來協(xié)同作戰(zhàn)了,讓我們現(xiàn)在來測(cè)試一下。
首先創(chuàng)建基于Struts的JSP頁(yè)面。打開WEB-INF下面的struts-config.xml,單擊右鍵,選擇New -> Form, Action and JSP。
在彈出的對(duì)話框中添加User case,然后點(diǎn)擊Add生成Properties代碼。這會(huì)由MyEclipse自動(dòng)生成相應(yīng)的Form代碼。輸入完成后選擇JSP選項(xiàng)卡,選上Create JSP form,修改路徑,然后點(diǎn)擊Next。
在出現(xiàn)的對(duì)話框中修改Path,將Superclass更改為前面定義的BaseAction,然后將Input Source修改為自己需要的路徑。完成后Finish即可。
然后在struts-config.xml點(diǎn)擊右鍵,選擇New -> Forward,準(zhǔn)備創(chuàng)建一個(gè)ActionForward。
在彈出的對(duì)話框中,選擇Local Action Forward,通過Browser填寫Action Path,然后填寫Name和Path,完成后點(diǎn)擊Finish即可。
在LoginAction中添加如下代碼
?
| public ActionForward execute(ActionMapping mapping, ActionForm form, ?????????? HttpServletRequest request, HttpServletResponse response) { ?????? LoginForm loginForm = (LoginForm) form; ?????? String username = loginForm.getUsername(); ?????? String password = loginForm.getPassword(); ?????? ActionForward forward = mapping.getInputForward(); ?????? IUserService service = (IUserService) getBean("userService"); ?????? User userFromDB = service.getUserByUsername(username); ?????? if (userFromDB.getPassword().equals(password)) { ?????????? forward = mapping.findForward("suc"); ?????? } ?????? return forward; ??? } |
login.jsp內(nèi)容
?
| <%@ page language="java" pageEncoding="ISO-8859-1"%> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <html> ??? <head> ?????? <title>JSP for LoginForm form</title> ??? </head> ??? <body> ?????? <html:form action="/login"> ?????????? password : <html:password property="password"/><html:errors property="password"/><br/> ?????????? username : <html:text property="username"/><html:errors property="username"/><br/> ?????? ??? <html:submit/><html:cancel/> ?????? </html:form> ??? </body> </html> |
Ok,這時(shí)我們可以啟動(dòng)Tomcat進(jìn)行查看頁(yè)面了
10.黎明前的黑暗
上面的工作完成以后理論上應(yīng)該可用,但是當(dāng)你運(yùn)行的事后卻發(fā)現(xiàn)會(huì)有一個(gè)非常詭異的異常出現(xiàn)
這個(gè)問題本來面目是這樣,由于MyEclipse給我們做的事情太全面了,全面到spring和hibernate的包都是重復(fù)引用的。
其解決辦法就是干掉多余的包,在Tomcat 5.5\webapps\ssh\WEB-INF\lib下的asm-2.2.3.jar就可以了,在重啟Tomcat我們看看我們干了這么長(zhǎng)時(shí)間的成果吧,
真令人失望又失敗了,呵呵有如下異常:
哎,誰叫俺的腦子不好使能,忘了加入bean的初始化,在applicationContext.xml中加入如下內(nèi)容就可以了
?
| <bean name="userService" class="com.ssh.service.impl.UserService"> ??? <property name="userDAO"> ?????? <ref bean="UserDAO" /> ??? </property> </bean> |
歷經(jīng)千難萬阻,我們終于看到了一個(gè)想看的巨破巨簡(jiǎn)陋的界面,呵呵,就到這里吧,估計(jì)大家要瘋了。
轉(zhuǎn)載于:https://www.cnblogs.com/andriod2016/articles/6524914.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的SSH框架的简单搭建步骤的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【计算机视觉】跟踪算法及相关主页
- 下一篇: 《随笔记录》20170310