-
SSH框架应用的一个例子,不知道错在哪里,很郁闷5
开发环境:
MyEclipse7+Tomcat5+MySQL5+Struts1.2+Hibernate3.2+Spring2.0
相关代码:
index.jsp中代码:
<body>
<form action="addAdmin.do">
<input type="submit" value="OK" />
</form>
</body>
AddAdmin.java代码:
package edu.bhu.Kupid.actions;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import edu.bhu.Kupid.domain.Admins;
import edu.bhu.Kupid.service.AdminsService;
public class AddAdmin extends Action {
private AdminsService admServer;
public AdminsService getAdmServer() {
return admServer;
}
public void setAdmServer(AdminsService admServer) {
this.admServer = admServer;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception{
request.setCharacterEncoding("utf-8");
String loginname="admin";
String pwd="admin";
Admins adm=new Admins();
adm.setPwd(pwd);
adm.setId("1234665");
adm.setLoginname(loginname);
adm.setLevel(0);
admServer.addAdmin(adm);
return mapping.findForward("ok");
}
}
AdminsService.java代码:
package edu.bhu.Kupid.service;
import java.util.List;
import edu.bhu.Kupid.domain.Admins;
public interface AdminsService {
public void addAdmin(Admins adm);
public List<Admins> findAdminsByName(String name);
}
AdminsServiceImpl代码:
package edu.bhu.Kupid.service;
import java.util.List;
import edu.bhu.Kupid.domain.Admins;
import edu.bhu.Kupid.persist.AdminsDao;
public class AdminsServiceImpl implements AdminsService {
private AdminsDao admDao;
public void addAdmin(Admins adm) {
admDao.insert(adm);
}
public AdminsDao getAdmDao() {
return admDao;
}
public void setAdmDao(AdminsDao admDao) {
this.admDao = admDao;
}
public List<Admins> findAdminsByName(String name) {
return null;
}
}
AdminsDao.java代码:
package edu.bhu.Kupid.persist;
import edu.bhu.Kupid.domain.Admins;
public interface AdminsDao extends BaseDao<Admins,String>{
}
AdminsDaoImpl.java代码:
package edu.bhu.Kupid.persist;
import edu.bhu.Kupid.domain.Admins;
import edu.bhu.Kupid.persist.BaseDaoImpl;
public class AdminsDaoImpl extends BaseDaoImpl<Admins,String> implements AdminsDao {
}
BaseDao.java代码:
package edu.bhu.Kupid.persist;
import java.io.Serializable;
public interface BaseDao<T, PK extends Serializable> {
public void insert(T entity);
public void update(T entity);
public void delete(T entity);
public void deleteById(PK id);
public T findById(PK id);
}
BaseDaoImpl.java代码:
package edu.bhu.Kupid.persist;
import java.io.Serializable;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class BaseDaoImpl<T,PK extends Serializable> extends HibernateDaoSupport implements BaseDao<T, PK> {
protected Class entityClass;
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);
}
}
Admins.java代码(这个BEAN的代码是利用MyEclipse的DBExplorer的Hibernate Reverse Engineering生成的)
package edu.bhu.Kupid.domain;
/**
* Admins entity. @author MyEclipse Persistence Tools
*/
public class Admins implements java.io.Serializable {
// Fields
private String id;
private String loginname;
private String pwd;
private Integer level;
// Constructors
/** default constructor */
public Admins() {
}
/** full constructor */
public Admins(String id, String loginname, String pwd, Integer level) {
this.id = id;
this.loginname = loginname;
this.pwd = pwd;
this.level = level;
}
// Property accessors
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getLoginname() {
return this.loginname;
}
public void setLoginname(String loginname) {
this.loginname = loginname;
}
public String getPwd() {
return this.pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Integer getLevel() {
return this.level;
}
public void setLevel(Integer level) {
this.level = level;
}
}
Admins.hbm.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="edu.bhu.Kupid.domain.Admins" table="admins" catalog="graduation">
<id name="id" type="java.lang.String">
<column name="id" length="128" />
<generator class="uuid.hex" />
</id>
<property name="loginname" type="java.lang.String">
<column name="loginname" length="20" not-null="true" />
</property>
<property name="pwd" type="java.lang.String">
<column name="pwd" length="20" not-null="true" />
</property>
<property name="level" type="java.lang.Integer">
<column name="level" not-null="true" />
</property>
</class>
</hibernate-mapping>
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">
</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>
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" />
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/classes/configure.properties</value>
</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>
</bean>
</beans>
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-mappings>
<message-resources parameter="edu.bhu.Kupid.resource.ApplicationResources" />
</struts-config>
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>/WEB-INF/classes/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>
<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>
程序目的:
index.jsp上的按钮被点击后,一条Admin的信息入库。
产生错误:
浏览器中错误信息:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:173)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
root cause
java.lang.NullPointerException
edu.bhu.Kupid.actions.AddAdmin.execute(AddAdmin.java:37)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:173)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.30 logs.
Apache Tomcat/5.0.30
MyEclipse中错误信息: 无。
最后感谢您的帮助。祝您好运。棘手问题郁闷中。。。
问题补充:
AddAdmin第37行是:admServer.addAdmin(adm);
问题补充:
我说的嘛,怎么出空指针,昨天晚上做了这样一个试验:
注释掉原来37行的代码,然后手工创建spring上下文,就能通过。果然是SSH整合中有错误。
//admServer.addAdmin(adm);
ApplicationContext ctx=new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});
AdminsService admServer=(AdminsService)ctx.getBean("adminsServer");
admServer.addAdmin(adm);
我是第一次做SSH,不太会弄,请各位多指教。
现在还有一个很头疼的地方,就是struts,我用了tiles来做页面的分帧,于是给struts-config.xml文件加入了
<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor" contentType="text/html; charset=UTF-8" />
<message-resources parameter="edu.bhu.Kupid.resource.ApplicationResources" />
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/tiles-config.xml" />
</plug-in>
结果这段代码一加进来,jsp提交表单到action的时候就找不到action了,浏览器报404异常。
PS:回lewhwa :因为有一次我发项目,有个仁兄说下载太麻烦,不如直接贴代码的好,于是我就贴了代码。。。2009年2月08日 03:36
6个答案 按时间排序 按投票排序
-
采纳的答案
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />
这段代码是ActionServlet用的,ActionServlet里面会有一个RequestProcessor,这个主要是处理请求的,包括创建Action,创建Form,调用validate方法,调用Action的execute方法等等都是这个类来做的,可以参考《精通Struts》99~103页
上面的配置表示不使用Struts的缺省的Processor,而使用Spring提供的Processor,那么创建Action的动作就由这个Spring提供的类来完成,在创建的过程中就可以进行注入了
tiles一般都是使用plugin的方式加入到struts的
可以将下面的配置加入到struts-config.xml<plug-in className="org.apache.struts.tiles.TilesPlugin" > <!-- Path to XML definition file --> <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" /> </plug-in>
具体配置可以参考struts-1.2.9-bin.zip(可以去官方网站下载),在压缩包的webapps目录中有一个struts-blank.war,里面有相关的配置2009年2月09日 18:06
-
在struts-config.xml里面加上
<!-- Spring为Struts提供了一个处理器 -->
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />2009年2月09日 10:16
-
你的edu.bhu.Kupid.actions.AddAdmin 是通过 struts配置文件加载的
根本没有通过spring的IOC容器管理
所以你的依赖关系没有建立,那么admServer就为空
admServer.addAdmin(adm) ,所以报空指针太正常了~2009年2月08日 19:55
-
引用java.lang.NullPointerException
edu.bhu.Kupid.actions.AddAdmin.execute(AddAdmin.java:37)
AddAdmin里的37行是什么?
2009年2月08日 16:40
相关推荐
这个例子很可能是使用JSch库,因为它是Java中常用的SSH库,可以方便地进行SSH连接、文件传输和远程执行命令。 下面是一些关于SSH框架登录的关键知识点: 1. **公钥认证**:SSH允许使用公钥/私钥对进行身份验证。...
这个"ssh框架简单的小例子"项目,旨在演示如何将这三个框架整合在一起,实现一个基本的功能。在这个小李子(可能指的是小型应用或示例)中,开发者仅实现了部分功能,但足以展示SSH框架的核心集成。 **Struts2** 是...
通过这个例子,开发者可以学习到SSH框架的集成技巧,了解如何编写Action、配置Struts2的拦截器、如何使用Spring进行依赖注入以及如何设计和使用Hibernate的实体类和映射文件。这对于初学者来说是一个很好的起点,...
一个ssh框架整合的小例子
下面将详细介绍SSH框架的核心概念以及如何结合它们创建一个实际的应用。 **Spring框架** Spring是一个全面的Java应用框架,它的核心是依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...
这个“一个简单的SSH框架程序”很显然是一个基于这些技术构建的应用实例,用于帮助开发者理解并学习如何整合这三种框架。接下来,我们将深入探讨SSH框架以及与其相关的技术。 **Struts2框架**: Struts2是MVC...
4. **实例详解**:在SSH01这个示例中,可能包含了一个简单的用户登录功能。Action类可能名为LoginAction,处理登录请求,检查用户名和密码。Spring可能会配置一个UserService接口和其实现类,用于处理业务逻辑。...
Spring框架则是一个全面的企业级应用框架,它不仅包含MVC组件,还提供了事务管理、数据访问、AOP、DI等功能。Spring的DI允许开发者将对象的创建和管理交给容器,降低了组件之间的耦合。在SSH中,Spring通常用来管理...
Java中的ssh框架小例子Java中的ssh框架小例子Java中的ssh框架小例子Java中的ssh框架小例子Java中的ssh框架小例子Java中的ssh框架小例子Java中的ssh框架小例子Java中的ssh框架小例子Java中的ssh框架小例子Java中的ssh...
ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ...
这个压缩包文件"SSHdemo"提供了一个SSH框架搭建登录功能的示例,帮助开发者了解并实践如何整合这三个框架来构建一个完整的Web应用程序。 **Struts2** 是一个基于MVC(Model-View-Controller)设计模式的Java Web...
在实际学习和使用这个例子时,你可能需要了解以下步骤: 1. **设置环境**:确保已安装JDK,Eclipse,以及Maven或Gradle。 2. **导入项目**:在Eclipse中导入此压缩包,通常选择"Import > Existing Maven Projects"或...
ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ...
这个标题“ssh的例子,整个框架都有了”暗示我们将会探讨SSH框架的使用,可能包括配置、连接、命令行操作以及在开发中的应用。SSH在IT行业中广泛应用于服务器管理、自动化任务执行和应用程序之间的安全通信。 描述...
这个项目实例是将SSH框架与支付宝接口集成,构建一个可以处理在线支付的Web应用。下面我们将深入探讨SSH框架及其与支付宝集成的关键知识点。 **Spring框架**:Spring作为核心的IoC(Inversion of Control)和AOP...
SSH(Struts2 + Spring + Hibernate)是一种经典的Java Web开发框架组合,用于构建高效、可维护的Web应用程序。在这个“SSH注解方式整合小例子”中,我们将深入探讨如何使用注解来简化SSH框架的配置过程,使得开发...
这个“ssh框架纯净版”包含了这三个框架的基础组件和相关代码,旨在提供一个简洁、无多余依赖的开发环境。 1. **Struts2**:Struts2是一个基于MVC设计模式的Web应用框架,它继承了Struts1的优点并引入了许多新特性...
SSH框架的应用涉及了Web开发的多个方面,包括但不限于以下知识点: 1. MVC设计模式的理解与实践:学习如何使用Struts2实现MVC架构,理解Action、Result和Interceptor的工作原理。 2. Spring的依赖注入和AOP:了解DI...
这个小例子主要探讨的是SSH框架中注解的应用。注解在现代编程中扮演着重要角色,它提供了元数据,使得代码更具可读性,减少配置文件的复杂性,并且在运行时可以被解析以执行特定的行为。 1. **Struts2中的注解**: ...
在“SSH增删改查”这个例子中,初学者可以了解到如何利用这三个框架实现基本的数据操作。增删改查是任何数据库应用的基础,通常包括添加(Insert)、删除(Delete)、更新(Update)和查询(Select)四种操作。 1. ...