SSH项目的实现步骤
来源:互联网 发布:js动态生成树形菜单 编辑:程序博客网 时间:2024/05/21 08:02
第1步、导入页面
将表态页面资料复制到项目的“WebRoot”文件夹下。注:确保每个页面的字符符合JSP的编码方式(GBK或UTF-8)
第2步、导入数据库驱动
将“mysql-connector-java-5[1].1.12-bin.jar”复制到项目的“WebRoot/WEB-INF/lib”文件夹下,刷新项目后出现 。
第3步、添加Struts框架
1、添加Struts:在项目名字上点右键选择如下图
2、在“Base package for new classes”里填上“web”,点击Finish。
3、在web.xml文件里:
<1>删除下面的配置
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<2>加上字符过滤器:
<filter>
<filter-name>filter</filter-name>
<filter-class>filter.CharFilter</filter-class>
<init-param>
<param-name>charSet</param-name>
<param-value>gbk</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4、在 上点右键,新键一个filter包,然后下这个包下编写一个为CharFilter.java的文件,文件代码如下:
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 CharFilter implements Filter {
private String charSet=null;
public void destroy() {}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(charSet);
response.setCharacterEncoding(charSet);
chain.doFilter(request, response);//向后传递控制权
}
public void init(FilterConfig config) throws ServletException {
charSet=config.getInitParameter("charSet");
}
}
5、建立entity包,并根据Hibernate框架来生成实体类(User)[详细请参考第五步、添加Hibernate的框架]
第四步、在Struts框架下完成一个登录操作
1、在页面上:
<c:if test="${sessionScope.UserLoginInfo!=null}">
<div style="height:137px;background:url(images/myepai.gif) no-repeat;">
<strong>${UserLoginInfo.user_name}</strong> 大驾光临
<ul style="color:#0c0c0c;list-style-type:circle;margin:8px 16px;">
<li><a href="goods.do?operate=toAdd">发布商品</a></li>
<li>我的宝贝</li>
</ul>
<a href="userLogOut.do?operate=doLogOut" class="a_button">注销</a>
</div>
</c:if>
<c:if test="${sessionScope.UserLoginInfo==null}">
<form action="userLogin.do?operate=doLogin" method="post">
用户名:<input type="text" name="user.user_name" style="width:60px;" /> <br />
密 码:<input type="password" name="user.user_password" style="width:60px;" /><br />
<a href="user_agreement.jsp" class="a_button">用户注册</a>
<input type="submit" value="登录" class="button" style="width:40px;"/> <br />
<img src="images/login.gif" style="width:75px;"></img>
</form>
</c:if>
2、struts-config.xml文件里:
<form-beans>
<form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="user" type="entity.User"></form-property>
</form-bean>
</form-beans>
注1:form-bean标签里的type的值固定成:
org.apache.struts.action.DynaActionForm
注2:form-property标签里的name的值为属性值,在页面上提交表单里的name应写为:属性值.实体的字段值。例如user.user_name。
<action-mappings>
<action path="/userLogin"
name="loginForm"
type="web.EpaiDispatchAction" parameter="operate"
scope="request">
<exception key="error.login" type="biz.exception.LoginException" path="/index.jsp"></exception>
<forward name="success" path="/index.jsp"></forward>
</action>
</action-mappings>
注1:action 标签里的path的值与form表单提交时.do前面的单词保持一致。
注2:action标签里的name的值与form-bean标签里的name的值保持一致。
注3:action标签里的type的值与web包里所写的DispatchAction的名字保持一致。
注4:action标签里的parameter的值与form表单提交时.do?后面的单词保持一致。
注5:exception标签里的key的值与web包里的ApplicationResources.properties文件里面的 一致。
注6:exception标签里的type的值与biz包下面的exception包里的LoginException.java文件名一致。
注7:excetion标签里的path的值是报错后转向的路径,必须有“/”这个符号。
注8:forward标签里的name的值是与web包里的DispatchAction文件里所调用的方法doLogin里面的return mapping.findForward("success"); 里的success这个单词保持一致。
注9:forward标签里的path的值是正确执行后转向的路径,必须有“/”这个符号。
3、DispatchAction.java文件(这里文件名为:EpaiDispatchAction.java)里:
package web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.actions.DispatchAction;
import biz.UserLoginBiz;
import entity.User;
public class EpaiDispatchAction extends DispatchAction {
private Biz biz;
// 用户登录控制器方案
public ActionForward doLogin(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
DynaActionForm df = (DynaActionForm) form;
User user = (User) df.get("user");
User userInfo = biz.doLogin(user);
request.getSession().setAttribute("UserLoginInfo", userInfo);
return mapping.findForward("success");
}
}
注:df.get(“user”)里面的user和form-property标签里的name的值为属性值,要一致。
4、在biz包里建一个Biz.java,其内容如下:
package biz;
import java.util.List;
import biz.exception.LoginException;
import dao.BaseDao;
import entity.User;
public class Biz {
private BaseDao dao;
public User doLogin(User user) throws Exception {
List list=(List)dao.findByParams("from User u where u.user_name=? and u.user_password=?", user.getUser_name(),user.getUser_password());
if(list.isEmpty())
throw new LoginException();
return (User) list.get(0);
}
}
5、在biz.exception包里建一个LoginException.java,其内容如下:
package biz.exception;
public class LoginException extends Exception {}
6、在web包里的ApplicationResources.properties文件里写上:
第五步、添加Hibernate框架
1、加入Hibernate
2、只选择Hibernate3.2 Core Libraries - <MyEclipse-Library>
3、点击Next后:
4、点击Next后去掉Specify database connection details?前的勾,再点击Next:
5、去掉Create SessionFactory?前的勾,由Spring的容器来使用SessionFactory:
6、在MyEclipse右上角点击
7、在MyEclipse左上角点击MyEclipse Derby选择New
8、Driver template为要用的数据库类型;Driver name为在MyEclipse里的名称;<hostname>为主机名:一般为localhost;<dbname>为数据库名;User name为数据库链接帐号;Password为数据库链接密码;
9、加入Driver JARS (数据库驱动JAR包):点击Add JARs按钮:
10、找到数据库JAR包点打开后,再点击Finish.
11、双击新建的DB:
12、输入数据库登入密码(如果保存了密码就没有这一步):
13、打开新建的DB里面的数据库,找到要建立的实体所对应的表(也可选择多张表):
14、Java src falder为项目里的src的路径;Java package为实体对象的包名;点击Finish
15、提示是否进入JAVA视图,点击Yes
16、打开hibernat.cfg.xml,DB确Driver里选择新建的DB Driver:
17、点击Properties里的Add..按钮
18、Property选择:format_sql,Value值为:true
19、Property选择:show_sql,Value值为:true
注:Hibernate框架成功建立应该有以下三方面:
a.构建路径上有hibernate的jar.
b.在src下有hibernate.cfg.xml文件.
c.在entity下有实体类,并且在同一目录下有"实体类名.hbm.xml".
20、双击所建实体(User.java和User.hbm.xml)修改对应表的字段的属性,使其保持一致,也可以删除“Customers.hbm.xml”后自己新建xml文件,21到25点的步骤为新建和编写xml文件
21、指向 点击右键
选择后,在File name里填写“实体类名.hbm.xml”
22、点击Next>后,选择Create XML file from a DTD file,点击Next>
23、选择Select XML Catalog entry,并找到Hibarnate Mapping DTD 3.0/EN,后击Next>
24、点击Finish
25、在dao包里建立BaseDao文件来链接数据库,文件代码如下:
package dao;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class BaseDao {
//增加
public void save(Object o){
Session s=HibernateSessionFactory.getSession();
Transaction tx=s.beginTransaction();
s.save(o);
tx.commit();
HibernateSessionFactory.closeSession();
}
//删除
public void delete(Object o){
Session s=HibernateSessionFactory.getSession();
Transaction tx=s.beginTransaction();
s.delete(o);
tx.commit();
HibernateSessionFactory.closeSession();
}
//修改
public void update(Object o){
Session s=HibernateSessionFactory.getSession();
Transaction tx=s.beginTransaction();
s.update(o);
tx.commit();
HibernateSessionFactory.closeSession();
}
//通过ID查找
public Object findById(Class clazz,Long id){
Session s=HibernateSessionFactory.getSession();
Transaction tx=s.beginTransaction();
Object o=s.get(clazz, id);
tx.commit();
HibernateSessionFactory.closeSession();
return o;
}
//通用查找
public List findByParams(String hql,Object...params){
Session s=HibernateSessionFactory.getSession();
Transaction tx=s.beginTransaction();
Query q=s.createQuery(hql);
if(params!=null){
int i=0;
for(Object p:params){
q.setParameter(i, p);
i++;
}
}
List list=q.list();
tx.commit();
HibernateSessionFactory.closeSession();
return list;
}
//通用查找一条记录
public Object findByParams2(String hql, Object... params){
List list=this.findByParams(hql, params);
if(!list.isEmpty()){
return list.get(0);
}
return null;
}
//分页查找
public List findByParamsWithPage(int page,int pageSize,String hql,Object...params){
Session s=HibernateSessionFactory.getSession();
Transaction tx=s.beginTransaction();
Query q=s.createQuery(hql);
if(params!=null){
int i=0;
for(Object p:params){
q.setParameter(i, p);
i++;
}
}
List list=q.setFirstResult((page-1)*pageSize).setMaxResults(pageSize).list();
tx.commit();
HibernateSessionFactory.closeSession();
return list;
}
}
注:操作数据的原则
1.hibernate有自己的管理对象的阶段(生命周期)。
2.对于new创建的数据只做save
3.先查询才能做改或删.
4.做查询时要先close再return。
5.不要对主键属性赋值.
面试:临时态和游离态对象有可能被垃圾回收,而持久态永不会回收.
26、打开Bid.hbm.xml编写配置文件如下:
<class name="entity.Bid" table="bid" catalog="epai">
<id name="bidId" type="java.lang.Long">
<column name="bid_id" />
<generator class="native" />
</id>
<many-to-one name="goods" class="entity.Goods" column="goods_id" cascade="save-update"/>
<many-to-one name="user" class="entity.User" column="buyer_id" cascade="save-update"/>
<property name="bidTime" type="java.sql.Timestamp">
<column name="bid_time" length="19" not-null="true" />
</property>
<property name="bidPrice" type="java.lang.Float">
<column name="bid_price" precision="12" scale="0" not-null="true" />
</property>
<property name="bidStatus" type="java.lang.Integer">
<column name="bid_status" not-null="true" />
</property>
</class>
说明:
a.类表映射
<class name="类名" table="表名" catalog="数据库名">
b.主键映射
<id name="对应主键的属性名" column="主键列名" type="类型名">
<generator class="native"/>
</id>
若属性名与列名一致,可省略column。
c.属性/字段映射
<property name="属性名" column="列名" type="类型名"/>
注意:
数据库类型 java类型(实体类属性类型) hibernate配置中的类型
varchar java.lang.String java.lang.String
bigint java.lang.Long java.lang.Long
int java.lang.Integer java.lang.Integer
bit java.lang.Boolean java.lang.Boolean
blob java.lang.byte[] binary
date java.sql.Date java.sql.Date
timestamp java.sql.Timestamp java.sql.Timestamp
char(1) java.lang.Character java.lang.Character
第六步 添加Spring容器
1、加入Spring
2、选择Spring1.2,勾上“AOP Libraries”“Core Libraries”“Persistence Core Libraries”和“web Libraries”,并选择“Copychecked Library contents to project folder”,点击Next:
3、点击Next:
4、点击Finish:
第七步 Struts与Spring整合
1、在web包里的EpaiDispatchAction.java里将biz加上set方法:
private Biz biz;
public void setBiz(Biz biz) {
this.biz = biz;
}
2、在biz包里的Biz.java里将dao加上set方法:
private BaseDao dao;
public void setDao(BaseDao dao) {
this.dao = dao;
}
3、中修改struts的配置文件struts-config.xml,将:
<action-mappings>
<action path="/userLogin"
name="loginForm"
type="web.EpaiDispatchAction" parameter="operate"
scope="request">
<exception key="error.login" type="biz.exception.LoginException" path="/index.jsp"></exception>
<forward name="success" path="/index.jsp"></forward>
</action>
</action-mappings>
里面的type的值修改为:
org.springframework.web.struts.DelegatingActionProxy
4、在struts-config.xml文件的最后加入:
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="classpath:applicationContext.xml"/>
</plug-in>
2、在applicationContext.xml里配置:
<!-- 连接Action(客户) -->
<bean name="/doLogin" class="web.EpetDispatchAction">
<property name="biz" ref="petBiz"></property>
</bean>
<!-- 连接Biz(目标) -->
<bean id="petBiz" class="biz.Biz">
<property name="dao" ref="petDao"></property>
</bean>
<!-- (增强) -->
<bean id="JiaFengAdvice" class="biz.JiaFengAdvice"></bean>
<!-- (代理) -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>petBiz</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>JiaFengAdvice</value>
</list>
</property>
</bean>
<!-- 连接Dao -->
<bean id="petDao" class="dao.BaseDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
注:web.EpetDispatchAction里必项有biz的set方法,biz.Biz里必须有dao的set方法,Action、Biz、Dao的ref和id要层层相扣。
第八步 aop的应用(用来在不修改源码的情况下增加新功能,建立SSH时,可以跳过)
aop的相关名词()
advice:表示一个增强的功能.
pointCut:表示一次或多次方法调用.
advisor=advice+pointcut
interceptor=advice或advisor
1、创建一个Advice对象,覆写方法完成增加的功能。
package biz;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class JiaJiFenAdvice implements MethodInterceptor {
@Override//覆写方法完成增加的功能
public Object invoke(MethodInvocation invocation) throws Throwable {
Object res=null;
try {
//这里添加:在原有功能前加功能
res=invocation.proceed();
//这里添加:在原有功能后加功能
} catch (Exception e) {
}
return res;
}
}
2、在“applicationContext.xml”文件里配置:
<!-- 客户 -->
<bean name="/doLogin" class="web.EpetDispatchAction">
<property name="diaryBiz" ref="petDiaryBiz"></property>
<property name="loginBiz" ref="petLoginBiz"></property>
</bean>
<!-- 目标 -->
<bean id="petDiaryBiz" class="biz.DiaryBiz"></bean>
<bean id="petLoginBiz" class="biz.LoginBiz"></bean>
<!-- 增强 -->
<bean id="petJiaJiFenAdvice" class="biz.JiaJiFenAdvice"></bean>
<!-- 代理 -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>petDiaryBiz</value>
<value>petLoginBiz</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>petJiaJiFenAdvice</value>
</list>
</property>
</bean>
第九步 Hibernate与Spring的整合
1、数据源托管,sessionFactory不再由hibernate提供,而改为spring提供。在applicationContext.xml里配置里体现为:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>
<!-- 连接Dao -->
<bean id="petDao" class="dao.BaseDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
2、简化dao的编写(具体代码查看第五步的第25点)
a.所有的dao继承HibernateDaoSupport。
b.CRUD方法全部通过hibernateTemplate来完成.
c.给dao注入sessionFactory.
3、给业务层增加事务服务
<!-- 配置事务管理器 -->
<bean id="tm"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!--以aop的方式产生代理对象-->
<bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="tm" />
<property name="transactionAttributes">
<props>
<prop key="login">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!-- 与petBiz业务连接 -->
<bean id="petBizProxy" parent="baseTransactionProxy">
<property name="target" ref="petBiz" />
</bean>
- SSH项目的实现步骤
- SSH开发项目:实现一组功能的步骤
- SSH框架整合开发项目的步骤
- Ssh项目添加WebService功能的步骤
- ssh搭建项目步骤
- ssh项目步骤
- SSH项目上手步骤
- ssh搭建项目步骤
- SSH项目整合步骤
- 实现SSH+rsync,备份的步骤
- ssh框架实现一组功能的步骤
- SSH框架项目配置步骤
- 通过Axis整合SSH 项目创建WebService的流程步骤
- ssh配置文件的步骤
- SSH项目实现重命名
- 使用SSH集成框架开发项目步骤
- 使用SSH集成框架开发项目步骤
- 用SSH集成框架开发项目步骤
- 继承
- SPOJ0919 prime checker
- 浮云
- 不同服务器数据库之间的数据操作
- goto语句
- SSH项目的实现步骤
- 计算机仿真中的HLA技术中的餐馆例子分析 (2) Transport
- javascript父页面传值
- s3c2410的时钟与电源
- SADSADSADS
- 。。。
- oracle中的序列
- spark登陆后闪一下就不见了,问题解决了。
- 回旋打印