是这样一个流程:
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包被删除。
感谢回答问题的人,万福。
相关推荐
在这个"简单的ssh应用"中,我们将会探讨SSH框架的核心概念和它们如何协同工作。 Struts2是MVC(Model-View-Controller)设计模式的实现,负责处理HTTP请求并控制应用程序流程。它提供了丰富的拦截器机制,允许...
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**:指代的是**S**truts2 + **S**pring + **H**ibernate三个开源框架的组合,它们在Java企业级应用开发中被广泛采用。 - **Struts2**:基于MVC模式的Web应用框架,提供了丰富的标签库以及灵活的配置方式,...
在企业级应用中,SSH的重要性不言而喻,因为它能够保证数据传输的安全性,防止敏感信息被窃取或篡改。下面将详细阐述SSH的核心功能、工作原理以及在企业中的应用。 SSH主要提供了以下功能: 1. **加密通信**:SSH...
SSH 使用中常遇到的问题以及解决方法 SSH(Secure Shell)是...SSH 使用中常见的问题和解决方法,都是基于实际使用经验的总结。使用 SSH 时,需要注意各种可能出现的问题,并及时解决,以确保 SSH 使用的安全和稳定。
根据提供的文件内容,本文将讨论SSH隧道下应用协议识别的网络安全研究的关键知识点,内容涵盖应用层信息识别的重要性、SSH协议的分析、流量监控技术、以及加密协议对网络监控的影响等。 1. 应用层信息识别的重要性 ...
SSH.NET 是一个开源的.NET库,专为.NET开发者设计,用于实现Secure Shell(SSH)协议。...同时,阅读和分析压缩包中的源代码、文档和示例将有助于快速掌握SSH.NET的用法,从而在自己的项目中有效地应用SSH安全通信。
下面将详细讨论在SSH整合过程中可能遇到的问题及其解决方案。 1. **依赖冲突**:由于Struts、Spring和Hibernate各自有自己的库依赖,整合时可能会出现版本冲突。解决方法是确保所有库的版本兼容,或者使用Maven或...
《轻量级JAVAEE企业应用实战SSH2整合开发》是一本深入浅出的教程,主要讲解如何使用Struts2、Hibernate和Spring这三大框架(SSH)进行集成开发,以实现高效、灵活的企业级应用程序。第二版针对初学者和有一定经验的...
SSH整合与JSON的应用是现代软件开发中的重要环节,特别是在分布式系统和远程服务器管理中。SSH(Secure Shell)是一种网络协议,用于在不安全的网络上安全地执行命令和传输数据,而JSON(JavaScript Object Notation...
通过深入研究这些资料,你可以掌握SSH2框架的基本用法,了解如何在实际项目中整合这三个框架,以及如何解决开发过程中遇到的问题。这将有助于提升你的Java Web开发技能,使你能够更好地应对复杂的企业级项目需求。...
ssh开发中遇到的一些小问题的解决办法,或许有能帮到你的也说不定
SSH框架,全称为Struts2、Spring和Hibernate的集成,是Java Web开发中常用的一种开源框架组合。这个框架集合了Struts2的MVC设计模式、Spring的依赖注入(DI)以及事务管理、Hibernate的对象关系映射(ORM)功能,为...
SSH可用jar包通常指的是包含SSH相关功能的Java库,使得开发者能够在Java应用中集成SSH服务。 在Java开发中,SSH主要涉及三个组件:Spring、Struts和Hibernate。它们分别是用于处理应用框架、用户界面和数据持久化的...
VB中的SSH应用可能涉及以下知识点: 1. SSH连接:创建SSH客户端对象,设置服务器地址、端口、用户名和认证方式。 2. 密钥管理:处理公钥和私钥文件,加载到VB程序中进行身份验证。 3. 远程命令执行:通过SSH通道...
ssh的一些实用,大家可以拿去看看,呵呵,希望能给你帮助
7. **事务管理**:由于Redis不支持分布式事务,因此在SSH应用中,需要根据业务需求处理事务与缓存的一致性问题。可以采用补偿事务或者最终一致性策略来解决。 8. **性能优化**:根据应用负载调整Redis的配置,如...
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上...这些中文文档将帮助开发者更深入地理解和使用SSH,同时也能辅助理解Struts、Hibernate和Spring这些Java开发中的关键框架,从而提升开发效率和代码质量。
在这个“SSH框架小应用”中,初学者可以学习如何配置这三个框架,例如在web.xml中配置Struts2的前端控制器,设置Spring的ContextLoaderListener,以及Hibernate的SessionFactory。此外,还要理解如何在struts.xml中...