SSH框架的简单搭建步骤
l MyEclipse6.5
l Tomcat5.5.26
l MySQL5.0
l?數據庫腳本程序
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');
環境的搭建這里就不寫了,估計大家應該很熟悉,不會的可以上網看一下,有很多這樣的資料。
3.Go!讓我們開始創建工程
打開MyEclipse,需要注意的是這里應該處于MyEclipse?Java?Enterprise視圖;新建一個Web Project,輸入適當的工程名字,這里我們輸入ssh,Finish即可。
確定之后MyEclipse會生成名為SSH的項目,其中生成的目錄結構如下所示:
4.添加Struts1.2框架支持
在ssh工程上面右擊,在彈出的菜單中選擇MyEclipse -> Add Struts Capabilities…,添加Struts的支持。
在彈出的對話框中選擇Struts 1.2,修改Base package for new classes成所需的包名,其余保持原狀,Finish即可
完成后的結構為:
5.添加Spring2.0框架支持
在ssh工程上面右擊,在彈出的菜單中選擇MyEclipse -> Add?spring?Capabilities…,添加Spring框架支持
由于Spring采取最小化庫發布的方式,使得Spring的庫文件彼此都是分離的,因而我們需要自己選擇需要的庫,需要引用的如下圖:
選擇好后Next,在窗口中選擇Browse,選擇ssh工程下面的WEB-INF文件夾,然后Finsh。
6.配置數據源
在MyEclipse右上角選擇MyEclipse Database Explorer,打開數據庫管理視圖。
在左側的DB Browser點擊右鍵,選擇New…,打開Database Driver對話框。
在Database Driver對話框中按照如下配置選擇數據庫驅動。首先選擇Driver Template,在這里我們選擇MySQL。Driver Name是以后配置時使用的驅動名字,用以區分驅動,這里使用MySQL即可。然后根據實際情況填寫URL,User name和Password。點擊Add JARs添加數據庫驅動文件。為方便配置,可以選擇Save password保存密碼。配置完畢后Finish即可。
7.Spring與hibernate的整合
當配置完數據源后,就可以添加Hibernate支持了。切換到MyEclipse?Java?Enterprise視圖,在ssh工程上面右擊,在彈出的菜單中選擇MyEclipse -> Add Hibernate Capabilities…,添加Hibernate的支持。
我們選擇Hibernate3.2,全部按照默認設置即可,然后點擊Next;
在對話框中選擇Spring configuration file,表示我們希望將Hibernate托管給Spring進行管理,這是將Hibernate與Spring進行整合的基礎。然后點擊Next;
在出現的對話框中選擇Existing Spring configuration file。因為我們已經添加了Spring的配置文件,所以這里選擇的是已存在的配置文件。MyEclipse會自動找到存在的那個文件。然后在SessionFactory ID中輸入Hibernate的SessionFactory在Spring配置文件中的Bean ID的名字,這里我們輸入sessionFactory即可。然后點擊Next;
在出現的對話框中的Bean Id里面輸入數據源在Spring中的Bean ID的名字,這里我們輸入dataSource。然后在DB Driver里面選擇我們剛剛配置好的ssh,MyEclipse會將其余的信息自動填寫到表格里面。然后點擊Next;
在出現的對話框中取消Create SessionFactory class。點擊Finish即可。
此時MyEclipse會自動打開Spring的配置文件,文件內容為:
此時,切換到MyEclipse DataBase Explorer視圖,右鍵打開數據庫連接,在需要使用的數據表格上面點擊右鍵,選擇Hibernate Reverse Engineering...。這里我們使用剛剛建立在test數據庫中添加的user表。
??
在打開的對話框中修改Java src folder為我們建立的/ssh/src,這里需要選擇到src文件夾,并且需要填寫Java package,這是MyEclipse生成的類所在的包,我們將其取名為user。然后選擇Java Data Object,建立POJO類。然后選擇Java Data Access Object。其中,POJO類是數據庫表格所對應的Java類,JDO類是MyEclipse自動生成的對數據庫的一些操作。這里會封裝一些常用的操作,簡化我們的編寫。填寫完成后點擊Next。
在出現的對話框中選擇ID Generator為native,然后點擊Finish即可。
此時ssh項目的目錄結構如下所示。其中的User.Java是MyEclipse生成的使用面向對象的Java語言對數據庫表格進行的抽象,User.hbm.xml是將數據庫表格中的字段和POJO類的屬性進行映射的定義,UserDAO.java封裝了一些MyEclipse自動生成的對數據庫的操作。
這時我們修改一下文件目錄,使之更好的組織。我們建立一個dao包,將DAO類與POJO類分開。然后我們在struts包下面建立action和form包,用來管理Struts的Action和Form。為了將實現與接口進行解耦,我們建議在dao包下面添加接口,然后建立dao.impl包,將實際的DAO類放在這里。DAO類是直接與數據庫打交道的類,為了對業務邏輯進行封裝,我們將業務全部寫在service類里面,和dao一樣,我們先建立service包,里面添加業務接口,具體的實現放在service.impl里面。
將UserDAO.java移動到dao的impl包下面,并在dao包下建立接口IUserDAO,內容為:
?
| 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; ??? } } |
??
此時的整體工程結構為:
此時的applicationContext內容需要配置bean內容為:
?
| <bean id="UserDAO" class="com.ssh.dao.impl.UserDAO"> ??? <property name="sessionFactory"> ?????? <ref bean="sessionFactory" /> ??? </property> </bean> |
8.整合Struts和Spring
Struts和Spring整合方式其核心是讓Struts能夠訪問到交給Spring進行托管的類,這個我在網上看到了一個方式,自我認為很好,因此只要我們可以讓Struts從Spring獲得需要的類就可以了。 為了達到這個目標,我們創建一個類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); ???????? } } |
為了讓Web容器能夠初始化Spring,我們需要修改web.xml文件,增加以下內容:
?
| <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.啊,讓看看我們工作是否有效
通過上面的配置,我們已經能夠讓這三個框架來協同作戰了,讓我們現在來測試一下。
首先創建基于Struts的JSP頁面。打開WEB-INF下面的struts-config.xml,單擊右鍵,選擇New -> Form, Action and JSP。
在彈出的對話框中添加User case,然后點擊Add生成Properties代碼。這會由MyEclipse自動生成相應的Form代碼。輸入完成后選擇JSP選項卡,選上Create JSP form,修改路徑,然后點擊Next。
在出現的對話框中修改Path,將Superclass更改為前面定義的BaseAction,然后將Input Source修改為自己需要的路徑。完成后Finish即可。
然后在struts-config.xml點擊右鍵,選擇New -> Forward,準備創建一個ActionForward。
在彈出的對話框中,選擇Local Action Forward,通過Browser填寫Action Path,然后填寫Name和Path,完成后點擊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內容
?
| <%@ 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,這時我們可以啟動Tomcat進行查看頁面了
10.黎明前的黑暗
上面的工作完成以后理論上應該可用,但是當你運行的事后卻發現會有一個非常詭異的異常出現
這個問題本來面目是這樣,由于MyEclipse給我們做的事情太全面了,全面到spring和hibernate的包都是重復引用的。
其解決辦法就是干掉多余的包,在Tomcat 5.5\webapps\ssh\WEB-INF\lib下的asm-2.2.3.jar就可以了,在重啟Tomcat我們看看我們干了這么長時間的成果吧,
真令人失望又失敗了,呵呵有如下異常:
哎,誰叫俺的腦子不好使能,忘了加入bean的初始化,在applicationContext.xml中加入如下內容就可以了
?
| <bean name="userService" class="com.ssh.service.impl.UserService"> ??? <property name="userDAO"> ?????? <ref bean="UserDAO" /> ??? </property> </bean> |
歷經千難萬阻,我們終于看到了一個想看的巨破巨簡陋的界面,呵呵,就到這里吧,估計大家要瘋了。
轉載于:https://www.cnblogs.com/andriod2016/articles/6524914.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的SSH框架的简单搭建步骤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【计算机视觉】跟踪算法及相关主页
- 下一篇: 《随笔记录》20170310