SSH自学记

      SSH终于自学完啦!如果说一无所获那是不可能的,但又说不上如何精湛.

我觉得把他看作一看作是一座山坡比较合适,当山坡被采在脚底时,自已

就会上升到另一个高度(虽然这个坡不太高),才能看到更远更高的山峰.

也可以经常在这个山坡上励练自已,为登那远方绝顶奠定基础.

     在学习SSH的过程中是有过一些笔记的,可惜现在都身首异处.只能

晒出近期整合的部分啦!可以看作是08年的最后一个阶段,前期的一些

笔记也尽可能抽空处理完.下面来看看我在整合SSH实现登录的一点随

笔吧!

 

 hibernate+struts+spring实现登录
关于ssh的加载可以参看"ssh.doc"

在框架使用过程中我们应该注意怎样去将各个部分细化.
关于此项目的编写我可以简单分一下,下面就分类来说一说.


spring配置文件applocationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- 数据库的配置 -->

 <bean id="dataSource"
  class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName"
   value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
  </property>
  <property name="url"
   value="jdbc:sqlserver://localhost:1433;databaseName=master">
  </property>
  <property name="username" value="sa"></property>
 </bean>
 <!-- hibernateSession的工厂 -->
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.SQLServerDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
   </props>
  </property>
  <property name="mappingResources">
   <list>
    <value>com/risingsun/pojo/Person.hbm.xml</value>
   </list>
  </property>
 </bean>
 
 <!-- hibernate的数据操作模版 -->
 <bean id="hibernateTemplate"
  class="org.springframework.orm.hibernate3.HibernateTemplate">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>
 </bean>
 
 <!--PersonDAO接口 -->
 <bean id="persondao" class="com.risingsun.config.IPersonDAO"
  abstract="true">
 </bean>
 
 
 <!-- persondao的实现类 -->
 <bean id="persondaoimpl" class="com.risingsun.DAO.PesonDAOImpil"
  parent="persondao">
  <property name="hibernateTemplate">
   <ref bean="hibernateTemplate" />
  </property>
 </bean>
 
 
 <!--personAction类的调用 -->
 <bean name="/person" class="com.risingsun.struts.action.PersonAction">
 <property name="persondao">
 <ref bean="persondaoimpl"/>
 </property>
 </bean>
</beans>
当然这个写完后我们可以用一个java来测试一下,这样比jsp页面快而且容易抓到错误.

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  ApplicationContext ac=null;
  ac=new ClassPathXmlApplicationContext("applicationContext.xml");
  Person per=new Person();
  per.setName("rss");
  per.setPassword("123456");
  IPersonDAO id=(IPersonDAO)ac.getBean("persondaoimpl");
  id.isLogin(per);
 }
如果这里没问题的话,那我就可以加载struts.在后面的操作中我们至少可以不用再关心hibernate和struts的问题啦!
唉,差点把hibernate忘掉啦!
其实hibernate在applocationContext.xml中也是存在的,就是person类的那个orm文件的位置.有一部分hibernate文件
也是被集成到spring的applocationContext.xml文件里啦!
hibernate的其它功能就只剩POJO和DAO啦.我们依然可以使用.那该怎样调用DAO类呢,要知道DAO里还有个sessionFactory呢,
这个当然是存在的啦!
<bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.SQLServerDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
   </props>
  </property>
  <property name="mappingResources">
   <list>
    <value>com/risingsun/pojo/Person.hbm.xml</value>
   </list>
  </property>
 </bean>

哈哈,想不到吧!sessionFactory就变成这样啦!
当然还有点要说一下,DAO类要继承HibernateDaoSupport 类,这样我们就可以用到sessionFactory啦!

public class PesonDAOImpil extends HibernateDaoSupport implements IPersonDAO {

 public boolean isLogin(Person person) {
  // TODO Auto-generated method stub
  boolean flag=false;
  String HQL="FROM Person AS P WHERE P.name=? AND P.password=?";
  Query qe=this.getSession().createQuery(HQL);
  qe.setParameter(0,person.getName());
  qe.setParameter(1,person.getPassword());
  List lst=qe.list();
  if(lst.size()>0)
  {
   System.out.println("欢迎:"+person.getName()+"登录");   
   flag=true;
  }
  else
  {
   System.out.println("错误的用户名或密码");
  }
  return flag;
 }

由此我们不难看出hibernate和spring的结合还是蛮好的嘛!不过struts就没有那么爽啦!struts可是把我折腾的够呛啦!
这里我们要使用动态验证框架,下面一一说下from和action的配置
  <form-beans > 
    <form-bean name="personForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="password" type="java.lang.String" />
      <form-property name="name" type="java.lang.String" />
    </form-bean>
这就是动态验证from,不用再生成personForm.java文件啦,帅吧!
当然,即然我们要使用验证框架,那就和得和xml文件、资源文件沟通一下啦!
验证文件validation.xml

<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<formset>
<form name="personForm">
<field property="name" depends="required">
<arg key="err.name" resource="true"/>
</field>
<field property="password" depends="required">
<arg key="err.password" resource="true"/>
</field>
</form>
</formset>
</form-validation>
这里的arg key="err.name"对应的就是我们的资源文件啦!
# Resources for parameter 'com.risingsun.struts.ApplicationResources'
# Project spring-8
 errors.required={0}/u4e0d/u80fd/u4e3a/u7a7a
 err.name=/u7528/u6237/u540d
 err.password=/u5bc6/u7801
看上去我们并没有做什么,只是简单处理一个ascii码转换而已。
其它的事都是"validator-rules.xml"搞定的,是不是要多谢下它呢。
这完了我们还得回去struts-config.xml里全做点手脚,加上以下代码
  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
  </plug-in>
上面可以通过plugin文件来添加(在新建->others->struts2.0里可以找得到)
还需要在action里启动validate="true",这样我们就可以使用验证框架啦!
<action-mappings >
    <action
      attribute="personForm"
      input="/login.jsp"
      name="personForm"
      parameter="model"
      path="/person"
      scope="request"
      type="com.risingsun.struts.action.PersonAction" validate="true">
      <forward name="sur" path="/login.jsp"></forward>
      </action>

form就总算完啦,下面是action。
action这个类还是得存在的(PersonAction.java)

private IPersonDAO persondao;
 /**
  * Method execute
  * @param mapping
  * @param form
  * @param request
  * @param response
  * @return ActionForward
  */
 public ActionForward login(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  System.out.println("来啦");
  DynaValidatorForm personForm = (DynaValidatorForm) form;// TODO Auto-generated method stub
  Person person=new Person();
  person.setName(personForm.getString("name"));
  person.setPassword(personForm.getString("password"));
  if(persondao.isLogin(person))
  {
   request.setAttribute("user",person);
  }
  else
  {
   request.setAttribute("error","错误的用户名或密码");
  }
  return mapping.findForward("sur");
 }
 public IPersonDAO getPersondao() {
  return persondao;
 }
 public void setPersondao(IPersonDAO persondao) {
  this.persondao = persondao;
 }

看到form的取值没有,和往常有所不一样的。
和以前一样我们得配置web.xml文件中加上下面的东东
  <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
  </context-param>
  <servlet>
  <servlet-name>context</servlet-name>
  <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
  </servlet>
 
就样在启动时就可以给我们的请求提供服务啦!当然前提是struts-config.xml得指向他,要不我们的action往那触发呢
1、给struts-config.xml加一个控制器
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>
2、给struts-config.xml加点pugin文件
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />
  </plug-in>
这里和web.xml里的配置近似哦,很显然他们有一定联系。只是我还未渗透。
这样可唯是万事俱备只欠春风啦!
在applicationContext.xml中加入下面的代码:
<!--personAction类的调用 -->
 <bean name="/person" class="com.risingsun.struts.action.PersonAction">
 <property name="persondao">
 <ref bean="persondaoimpl"/>
 </property>
 </bean>
看到了吧“<bean name="/person"”这个可以servlet哦,就是指向咱们的那个PersonAction.java
这样ssh里Over啦!不过UI还得搞它一搞!
 <logic:present name="user" scope="request">
    <h1>欢迎${requestScope.user.name}登录</h1>
  </logic:present>
  <logic:present name="error" scope="request">
  <h1>${requestScope.error}</h1>
  </logic:present>
   <html:form action="/person.do" method="post" οnsubmit="return validatePersonForm(this)">
   <table>
   <tr>
  <td><html:hidden property="model" value="login"></html:hidden></td>
   </tr>
   <tr>
   <td>用户名:<html:text property="name"></html:text></td>
   </tr>
   <tr>
   <td>密码:<html:password property="password"></html:password></td>
   </tr>
   <tr>
   <td><html:submit>登录</html:submit>
   <html:reset>重置</html:reset>
   </td>
   </tr>
   </table>
   </html:form>
   <html:javascript formName="personForm"/>
  </body>
</html:html>

jsp文件就没什么搞头啦,不过有几个新玩意得说说!
   <html:form action="/person.do" method="post" οnsubmit="return validatePersonForm(this)">这里的onsubmit可是调用validatePersonForm方法的哦!
我们这是看不到得等web跑起来,我们查下他源文件才能看清。
 <html:javascript formName="personForm"/>
这句我还不太知情,我想应该是将personForm里的验证框架转成javascriptk吧
(前台自动验证你的表单,当然,前台验证的核心还是javascript,只不过这都由struts的 <html:javascript> 标签帮你实现了)这是csdn里找到的。

OO终于搞完SSH的登录啦,都快吐啦!

 

 

写完这段文字时我总算松啦一口气,终于把这个SSH整合到一起啦!相信深爱JAVA的友友们能体会到我此刻的心情.

整合完后我也想了一下,其实SSH并不适合与每个项目.但SSH里运用的各种设计模式和思想,确实值得我们去深思下.

现在可以将SSH假想成设计模式的提炼,但真正的运用还得看日后的付出啦!

     说到这个付出,我也不得不自醒一下啦!回想SSH学习的经历,可谓是断断续续啊!幸好是挺到了最后,但不得不改正

的是那飘浮不定的学习心态,看看下面的学习按排我想会更有依居.

2008年8月上半月:这个时节也是在京的最后半个月,也正是此时我开始啦SSH的征途,听的是李新华的Hibernate.

2008年9月的第2个星期:几经周折来到深圳,花了一周的时间学完了struts,当然学得也是很肤浅的.

2009年1月上半月:元旦后重返深圳,花了大半月的时间搞定啦spring和SSH的整合.

可以说hibernate的学习是相对而言最用心的,当时还在北京.

到了struts那一段,就不太安份啦!见了一堆朋友,乱念横生.

spring这块可谓在懒散中度过的......

看一看这期学习周期就发现很多问题:

1、学习目标不明确

     2008年9月以后的时间,很大部分被压在项目上啦!此时有冒出了Flex学习的念头。

     2009年1月,spring和flash同不进行。

2、杂乱无章

     SSH尚未完成时便自切入了FLEX,在SPRING进行时还渗入FLASH。

3、过于懒散

     特别是在2009年1月,SPRING和FLASH同时进行时,时间把撑得一塌胡涂。

4、情绪调整不妥

     在离京的后期学习中太过情绪化,当然这也是重入社会必经的一些事,但他影

      响得有点过头啦!

5、轻浮

     居然开始随心而为,偏偏很多东东都是错误的想法,主观意识并没有做出有效

     的响应,所谓的引导进行得非常不理想。

 

随便一扫描就一堆BUG,看来问题不小啊!09年的计划可要慎重啊!

好啊!都很晚啦!明天得回家啦!这份总结也该交啦,明天也会有新的日程。

至于未来,期待新的方向和计划……

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值