0 0

SSH应用中遇见的琐碎问题,灰常郁闷中……3

是这样一个流程:
index.jsp以管理员身份登陆——→根据登陆名从数据库查询所有模糊匹配的用户得到list——→在list中遍历每个Admins,如果有loginname和password完全匹配者,则获取这个Admins的id——→从数据库的admins用获得的id取出这个Admins并存入session——→跳转页面至adm_main.jsp——→adm_main.jsp是一个框架页面,利用Struts的Tiles分帧——→根据分帧信息加载header.jsp,footer.jsp等。

SSH框架基本搭建好了,貌似没有大错误,不过有两个问题点不太明白:

★问题A:
    这是struts-config.xml文件的片段:
  <struts-config>
  <data-sources />
  <form-beans />
  <global-exceptions />
  <global-forwards />
  <action-mappings >
    <action path="/addAdmin" type="edu.bhu.Kupid.actions.AddAdmin" validate="false" >
    <forward name="ok" path="/ok.jsp" ></forward>
    </action>
    <action path="/loginCheckAction" type="edu.bhu.Kupid.actions.LoginCheckAction" validate="false" >
    <forward name="adm_main" path="adm_main"></forward>
    </action>
  </action-mappings>
 
  <!-- Spring为Struts提供了一个处理器 -->
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />
<plug-in className="org.apache.struts.tiles.TilesPlugin" > 
 
      <!-- Path to XML definition file --> 
      <set-property property="definitions-config" 
                       value="/WEB-INF/tiles-config.xml" /> 
    </plug-in> 

</struts-config>

出现的问题:浏览器报404错误,好像在说找不到ServletAction,如果将Tiles的插件节点删除,即
<plug-in className="org.apache.struts.tiles.TilesPlugin" > 
 
      <!-- Path to XML definition file --> 
      <set-property property="definitions-config" 
                       value="/WEB-INF/tiles-config.xml" /> 
    </plug-in>
这部分删掉,则一切正常。
Why?
该如何处理?

★问题B:
这是一个BaseDaoImpl. java的代码:
package edu.bhu.Kupid.persist;

import java.io.Serializable;

import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class BaseDaoImpl<T,PK extends Serializable> extends HibernateDaoSupport implements BaseDao<T, PK> {

protected Class entityClass;
protected HibernateTemplate ht;
public HibernateTemplate getHt() {
return ht;
}

public void setHt(HibernateTemplate ht) {
this.ht = ht;
}

public void delete(T entity) {
getHibernateTemplate().delete(entity);
}

public void deleteById(PK id) {
getHibernateTemplate().delete(getHibernateTemplate().get(entityClass, id));
}

public T findById(PK id) {
return (T)getHibernateTemplate().get(entityClass, id);
}

public void insert(T entity) {

getHibernateTemplate().save(entity);

}

public void update(T entity) {
getHibernateTemplate().update(entity);
}

}

出现的问题:
如果有一个AdminsDaoImpl类作为其子类:
public class AdminsDaoImpl extends BaseDaoImpl<Admins,String> implements AdminsDao
则该子类应该继承了他的方法。
但是在一个Action中我写了private AdminsServiceImpl asi;并提供set/get方法将其注入,然后调用asi.findById(id)的时候出现了一个空指针异常。
后来在AdminsDaoImpl中重写父类方法findById:
public Admins findById(final String id) {
List<Admins> list= (List<Admins>)ht.execute(new HibernateCallback() {
public Object doInHibernate(Session s) throws HibernateException,
SQLException {
Criteria c = s.createCriteria(Admins.class);
c.add(Restrictions.eq("id",id));
return c.list();
}
});
Admins a=new Admins();
for(int i=0;i<list.size();i++)
{
a.setId(list.get(i).getId());
a.setLevel(list.get(i).getLevel());
a.setPwd(list.get(i).getPwd());
a.setLoginname(list.get(i).getLoginname());
}
return a;
}
则一切正常。
那么,问题又在哪?为什么重写了再调用就没有异常?直接调父类方法就有空指针问题? 父类和子类的HibernateTemplate我都做了注入。


==================================================================================================


以下为相关的配置文件:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <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>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
<servlet>
<servlet-name>SpringContextServlet</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
  <filter>
  <filter-name>OpenSessionInView</filter-name>
  <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  <init-param>
  <param-name>singleSession</param-name>
  <param-value>false</param-value>
  </init-param>
  </filter>
  <filter-mapping>
  <filter-name>OpenSessionInView</filter-name>
  <url-pattern>*.do</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>   
  </welcome-file-list>
</web-app>

struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
  <data-sources />
  <form-beans />
  <global-exceptions />
  <global-forwards />
  <action-mappings >
    <action path="/addAdmin" type="edu.bhu.Kupid.actions.AddAdmin" validate="false" >
    <forward name="ok" path="/ok.jsp" ></forward>
    </action>
    <action path="/loginCheckAction" type="edu.bhu.Kupid.actions.LoginCheckAction" validate="false" >
    <forward name="adm_main" path="adm_main"></forward>
    </action>
  </action-mappings>
 
  <!-- Spring为Struts提供了一个处理器 -->
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />
<plug-in className="org.apache.struts.tiles.TilesPlugin" > 
 
      <!-- Path to XML definition file --> 
      <set-property property="definitions-config" 
                       value="/WEB-INF/tiles-config.xml" /> 
    </plug-in> 

</struts-config>

tiles-config.xml
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 1.3//EN"
       "http://struts.apache.org/dtds/tiles-config_1_3.dtd">
<tiles-definitions>
<definition name="adm_main" path="/adm_main.jsp">
        <put name="adm_header" value="/adm_header.jsp"></put>
        <put name="adm_welcome" value="/adm_welcome.jsp"></put>
        <put name="adm_footer" value="/adm_footer.jsp"></put>
</definition>
</tiles-definitions>

applicationContext.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">
    <import resource="spring-admins.xml" />
<import resource="spring-login.xml" />
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:configure.properties</value>
</property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>${jdbc.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>/edu/bhu/Kupid/domain/Admins.hbm.xml
</value>
<!-- 好多好多Hibernate -->
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${hibernate.dialect}
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<bean id="baseDao" class="edu.bhu.Kupid.persist.BaseDaoImpl" abstract="true">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
<property name="ht">
<ref bean="hibernateTemplate" />
</property>
</bean>

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
</beans>

spring-admins.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="adminsDao" class="edu.bhu.Kupid.persist.AdminsDaoImpl" parent="baseDao">
<property name="ht">
<ref bean="hibernateTemplate" />
</property>
</bean>
<bean id="adminsServer" class="edu.bhu.Kupid.service.AdminsServiceImpl">
<property name="admDao">
<ref bean="adminsDao"/>
</property>
</bean>
<bean name="/addAdmin" class="edu.bhu.Kupid.actions.AddAdmin">
<property name="admServer">
<ref bean="adminsServer" />
</property>
</bean>
</beans>

spring-login.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">
<import resource="spring-admins.xml" />
<bean name="/loginCheckAction" class="edu.bhu.Kupid.actions.LoginCheckAction" >
<property name="asi">
<ref bean="adminsServer" />
</property>
</bean>

</beans>



如果您不喜欢看这样长篇的代码,我还将项目进行了打包上传,为了削减附件的大小,MyGraduation\WebRoot\WEB-INF\lib\下的全部SSH的jar包被删除。

感谢回答问题的人,万福。
2009年2月10日 14:05

1个答案 按时间排序 按投票排序

0 0

看你问题都看累了!

2009年2月10日 19:07

相关推荐

    简单的ssh应用

    在这个"简单的ssh应用"中,我们将会探讨SSH框架的核心概念和它们如何协同工作。 Struts2是MVC(Model-View-Controller)设计模式的实现,负责处理HTTP请求并控制应用程序流程。它提供了丰富的拦截器机制,允许...

    百度BAE环境下的ssh应用

    1、本示例是一个简单的ssh应用,对单表进行新增和查询操作; 2、使用ssh版本为struts2-core-2.3.1.2,spring-aop-3.0.5.RELEASE,hibernate-3.6.5.Final; 3、struts2的配置采用xml(目前不支持annotation),spring和...

    SSH整合文档教程…………

    - **SSH**:指代的是**S**truts2 + **S**pring + **H**ibernate三个开源框架的组合,它们在Java企业级应用开发中被广泛采用。 - **Struts2**:基于MVC模式的Web应用框架,提供了丰富的标签库以及灵活的配置方式,...

    完美的SSH,适合企业级应用

    在企业级应用中,SSH的重要性不言而喻,因为它能够保证数据传输的安全性,防止敏感信息被窃取或篡改。下面将详细阐述SSH的核心功能、工作原理以及在企业中的应用。 SSH主要提供了以下功能: 1. **加密通信**:SSH...

    ssh使用中常遇到的问题以及解决方法

    SSH 使用中常遇到的问题以及解决方法 SSH(Secure Shell)是...SSH 使用中常见的问题和解决方法,都是基于实际使用经验的总结。使用 SSH 时,需要注意各种可能出现的问题,并及时解决,以确保 SSH 使用的安全和稳定。

    SSH隧道下应用协议识别的网络安全研究.pdf

    根据提供的文件内容,本文将讨论SSH隧道下应用协议识别的网络安全研究的关键知识点,内容涵盖应用层信息识别的重要性、SSH协议的分析、流量监控技术、以及加密协议对网络监控的影响等。 1. 应用层信息识别的重要性 ...

    SSH.NET-develop.zip_SSH.net_VI1Q_ssh

    SSH.NET 是一个开源的.NET库,专为.NET开发者设计,用于实现Secure Shell(SSH)协议。...同时,阅读和分析压缩包中的源代码、文档和示例将有助于快速掌握SSH.NET的用法,从而在自己的项目中有效地应用SSH安全通信。

    SSH整合遇到的问题及解决方案

    下面将详细讨论在SSH整合过程中可能遇到的问题及其解决方案。 1. **依赖冲突**:由于Struts、Spring和Hibernate各自有自己的库依赖,整合时可能会出现版本冲突。解决方法是确保所有库的版本兼容,或者使用Maven或...

    轻量级JAVAEE企业应用实战ssh2整合开发

    《轻量级JAVAEE企业应用实战SSH2整合开发》是一本深入浅出的教程,主要讲解如何使用Struts2、Hibernate和Spring这三大框架(SSH)进行集成开发,以实现高效、灵活的企业级应用程序。第二版针对初学者和有一定经验的...

    ssh整合与json的应用

    SSH整合与JSON的应用是现代软件开发中的重要环节,特别是在分布式系统和远程服务器管理中。SSH(Secure Shell)是一种网络协议,用于在不安全的网络上安全地执行命令和传输数据,而JSON(JavaScript Object Notation...

    ssh2框架练习项目及代码

    通过深入研究这些资料,你可以掌握SSH2框架的基本用法,了解如何在实际项目中整合这三个框架,以及如何解决开发过程中遇到的问题。这将有助于提升你的Java Web开发技能,使你能够更好地应对复杂的企业级项目需求。...

    ssh开发中遇到的一些小问题的解决办法

    ssh开发中遇到的一些小问题的解决办法,或许有能帮到你的也说不定

    ssh框架的模糊查询

    SSH框架,全称为Struts2、Spring和Hibernate的集成,是Java Web开发中常用的一种开源框架组合。这个框架集合了Struts2的MVC设计模式、Spring的依赖注入(DI)以及事务管理、Hibernate的对象关系映射(ORM)功能,为...

    SSH可用jar包

    SSH可用jar包通常指的是包含SSH相关功能的Java库,使得开发者能够在Java应用中集成SSH服务。 在Java开发中,SSH主要涉及三个组件:Spring、Struts和Hibernate。它们分别是用于处理应用框架、用户界面和数据持久化的...

    ssh.rar_vb ssh

    VB中的SSH应用可能涉及以下知识点: 1. SSH连接:创建SSH客户端对象,设置服务器地址、端口、用户名和认证方式。 2. 密钥管理:处理公钥和私钥文件,加载到VB程序中进行身份验证。 3. 远程命令执行:通过SSH通道...

    ssh的应用

    ssh的一些实用,大家可以拿去看看,呵呵,希望能给你帮助

    详解SSH框架和Redis的整合

    7. **事务管理**:由于Redis不支持分布式事务,因此在SSH应用中,需要根据业务需求处理事务与缓存的一致性问题。可以采用补偿事务或者最终一致性策略来解决。 8. **性能优化**:根据应用负载调整Redis的配置,如...

    SSH中文帮助文档

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络上...这些中文文档将帮助开发者更深入地理解和使用SSH,同时也能辅助理解Struts、Hibernate和Spring这些Java开发中的关键框架,从而提升开发效率和代码质量。

    SSH框架小应用

    在这个“SSH框架小应用”中,初学者可以学习如何配置这三个框架,例如在web.xml中配置Struts2的前端控制器,设置Spring的ContextLoaderListener,以及Hibernate的SessionFactory。此外,还要理解如何在struts.xml中...

Global site tag (gtag.js) - Google Analytics